1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/msgcode-x-orm

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-enUS.md 7.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 01.12.2024 01:52 f1ff481

#中文版README


##Note 2016-07-24 04:08   update 0.0.2-SNAPSHOT
  1. Добавить ссылку на модель.
  2. Оптимизировать структуру регистра.
  3. Добавить метод toModel в Record, после преобразования модель всё ещё имеет свою ссылку.

##Note   0.0.1-SNAPSHOT содержит серьёзную ошибку

##Notice

Это инструменты или фреймворк, что угодно, я просто сделал это для себя и практикуюсь, как начать проект с открытым исходным кодом. Я надеюсь, предшественники могут дать мне несколько советов, если вам это не нравится, скажите мне почему, спасибо.

##Foreword

Я раньше сомневался, использовать Springboot или JFinal.

JFinal имеет очень удобный ORM, но автор считает, что аннотации увеличат стоимость обучения, а я не новичок.

Я думаю, что аннотации значительно уменьшат количество настроек.

В конце концов, я выбираю SpringBoot. Но JPA не создан для динамического запроса. Поэтому я хочу написать свой ORM, похожий на JFinal.

##x-orm Introduce

x-orm построен на JDBCTemplate, поэтому вы можете не беспокоиться о транзакции или источнике данных, это похоже на jdbc.

Модель — это объект сущности + dao, как домен в DDD, но не совсем то же самое.

Record — это просто неотображаемый объект, он может выполнять SQL-запросы без сущности. В некоторых случаях это очень удобно.

##Setting x-orm основан на SpringBoot + Jdbc, поэтому вам нужно добавить следующее в Maven dependencies:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.6.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

Помимо настроек jdbc и spring, настройка запуска очень проста, вам просто нужно добавить:

Register.registerModel("com.xdivo.model"); //сканировать пакет

и

Register.registerRecord("online_class"); //имя базы данных

как

@Controller
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.xdivo")
public class SpringBootStarter {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootStarter.class, args);
        Register.registerModel("com.xdivo.model"); //сканировать пакет
        Register.registerRecord("online_class"); //имя базы данных
        Register.initThreadPool(100, 100, 1000); //инициализация пула потоков 0 означает использование значений по умолчанию
    }
}

Если вам не нужно использовать Record или ThreadPool, вы можете удалить эти строки;

Определение модели:

/**
 * User
 * Created by liujunjie on 16-7-19.
 */
@Entity(table = "c_user")
public class User extends Model<User> {

    @PK
    @Column(name = "id_")
    private long id;

    @Column(name = "mobile_")
    private String mobile;

    @Column(name = "password_")
    private String password;

    @Join(refColumn = "id")
    @Column(name = "room_id_")
    private Room room;

    @Join(refColumn = "id")
    @Column(name = "student_id_")
    private Student student;

    public long getId() {
        return id;
    }

    public User setId(long id) {
        this.id = id;
        return this;
    }

    public String getMobile() {
        return mobile;
    }

    public User setMobile(String mobile) {
        this.mobile = mobile;
        return this;
    }

    public String getPassword() {
        return password;
    }

    public User setPassword(String password) {
        this.password = password;
        return this;
    }

    public Room getRoom() {
        return room;
    }

    public User setRoom(Room room) {
        this.room = room;
        return this;
    }

    public Student getStudent() {
        return student;
    }

    public User setStudent(Student student) {
        this.student = student;
        return this;
    }
}

Когда вы используете его, это как JFinal:

//сохраняем пользователя
new User().setMobile("abc")
      .setPassword("123")
      .save();

//находим пользователя по первичному ключу
User user = new User().findById(id);
``` ```
// Получаем объект-ссылку
user.getStudent();

// Асинхронное сохранение в базу данных
user.asyncSave();

// Асинхронное обновление в базе данных
user.asyncUpdate();
// Используем запись
Record record = Db.findById("c_user", 23);

// Преобразуем в модель, можно использовать модель для получения объекта-ссылки
User user = record.toModel(User.class);

// Сохраняем запись
Record record = new Record()
    .set("mobile_", "abc")
    .set("password_", "123");
Db.save("c_user", record);
// Непосредственно используем jdbcTemplate и преобразуем в Модель
Map<String, Object> resultMap = jdbcTemplate.queryForMap("SELECT * FROM user WHERE id = ?", 1);
User user = new User().mapping(resultMap);

List<Map<String, Object>> resultList = jdbcTemplate.queryForList("SELECT * FROM user");
List<User> users = new User().mappingList(resultList);
/**
 * Скролл пагинация (поддерживает только столбцы типа Number)
 *
 * @param orderColName  имя столбца сортировки
 * @param orderColValue значение столбца сортировки
 * @param direction     тип направления
 * @param params        параметры
 * @param pageSize      количество элементов на странице
 * @return ScrollResult
 */
public ScrollResult scroll(String orderColName, Number orderColValue, String direction, Map<String, Object> params, int pageSize)


// Метод скролл пагинации
ScrollResult result = user.scroll("id", id, Model.Direction.DESC, null, 2);

##Contact
###QQ: 41369927
###E-Mail: 41369927@qq.com
###WeChat: jay41369927

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/msgcode-x-orm.git
git@api.gitlife.ru:oschina-mirror/msgcode-x-orm.git
oschina-mirror
msgcode-x-orm
msgcode-x-orm
master