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

OSCHINA-MIRROR/wangwei123-FastBuilder

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

FastBuilder — это быстрый ORM-фреймворк для разработки, поддерживающий базы данных MySQL и Oracle. В слое DAO он позволяет сэкономить более 50% времени разработки.

Следующие функции уже реализованы в FastBuilder:

    1. CRUD операции, автоматическая пагинация запросов для Oracle и MySQL
    1. Интеграция с менеджером транзакций Spring
    1. Уровень моделей использует подход "конвенция выше конфигурации", что значительно упрощает процесс разработки
    1. Инструмент генерации кода позволяет создать Model, Service и Controller уровнями одним щелчком мыши

Планы будущего развития:

    1. Продолжение оптимизации производительности
    1. Поиск наиболее простого способа разработки
    1. Добавление функций массового создания, изменения и удаления записей (в настоящее время недоступны; можно использовать циклический ввод одной записи за раз, но производительность ниже)
    1. Улучшение и открытие системы управления, которая будет включать управление пользователями, ролями и правами доступа

Инструмент генерации кода доступен по адресу: http://git.oschina.net/wangwei123/FastBuilderCodeGen**Быстрое начало работы:**

  • Шаг 1: Включение исходного кода FastBuilder в проект:
    • Несколько файлов пакетов, просто скопируйте их в проект
  • Шаг 2: Конфигурирование источника данных в файле конфигурации Spring:
<!-- Настройка базы данных -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
      destroy-method="close">
    <property name="driverClass" value="${db.driver}"/>
    <property name="jdbcUrl" value="${db.master.url}"/>
    <property name="username" value="${db.master.username}"/>
    <property name="password" value="${db.master.password}"/>
</bean>
<!-- Настройка управления транзакциями -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
  • После выполнения этих двух шагов вы можете приступить к разработке. Этот фреймворк зависит от фреймворка Spring, поэтому в проекте должны быть включены библиотеки Spring.Создание модели:
  • Вам нужно только расширять родительский класс Model, указывая имя ключа, таблицы и полей в конструкторе
//=====================================================================================
//=======================Модульный слой===============================================
//=====================================================================================
package com.ch.sys.model;
import com.ch.fastbuilder.model.Model;

public class Employee extends Model {
    public static final String TABLE = "employee";
    public static final String ID = "id";
    public static final String ACCOUNT = "account";
}
    public static String PASSWORD = "пароль";
    public static String NICKNAME = "никнейм";
    public static String GENDER = "пол";
    public static String HEAD_URL = "url_головного_изображения";
    public static String TYPE = "тип";
    public static String CREATED = "создан";

    public Employee() {
        super.setPrimaryKey(ID);
        super.setTableName(TABLE);
        //super.setGenerationType(GenerationType.UUID);
        super.setGenerationType(GenerationType.IDENTITY);
        super.setColumns(ID, ACCOUNT, PASSWORD, NICKNAME, GENDER, HEAD_URL, TYPE, CREATED);
    }

    public static Employee getByAccountPwd(String account, String password) {
        Map<String, Object> params = new HashMap<>();
        params.put("account", account);
        params.put("password", SHA1.signature(password));
        String sql = "account=:account and password=:password";
        Employee employee = Model.Where(sql, params).get(Employee.class);
        return employee;
    }
}

//=====================================================================================
//=======================Слой сервиса=================================================
//=====================================================================================

@Service
public class EmployeeService {

    @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
    public Employee getByAccountPwd(String account, String password) {
        Employee employee = Employee.getByAccountPwd(account, password);
        return employee;
    }
}
``````markdown
#### Ассоциативный запрос:
```java
public class Role extends Model {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    public static String TABLE = "role";
    public static String ID = "id";
    public static String NAME = "name";
    public static String CREATED = "created";

    public Role() {
        super.setPrimaryKey(ID);
        super.setTableName(TABLE);
        //super.setGenerationType(GenerationType.UUID);
        super.setGenerationType(GenerationType.IDENTITY);
        super.setColumns(ID, NAME, CREATED);
    }

    public static PageResult findByPage(ParamMap params) {
        BuilderModel builder = Model.InitParams(params);
        PageResult pageResult = builder.findPage(Role.class);
        return pageResult;
    }

    public static Role getByEmployeeId(Long employeeId) {
        Map<String, Object> params = new HashMap<>();
        params.put("employee_id", employeeId);

        BuilderModel builder = Model.InitParams(params);
        builder.select("r.id, r.name, r.created");
        builder.from("employee_role emr");
        builder.innerJoin("role r ON emr.role_id = r.id");
        builder.where("emr.employee_id = :employee_id");
    }
}
``````md
**Обновление данных:**
* Обновление может выполняться следующими способами:
  ```java
  update();
          // или так выполнить метод update
         Model.Update(employee);

Удаление одной записи:

  • Данные, полученные от клиента через POST запрос, преобразуются в объект Role с помощью Model.
  • Любой объект, наследующий Model, может вызвать метод delete для удаления записи.
        // метод удаления
       public void delete() {
      	Employee employee = new Employee();
           employee.set(Employee.ID, 1);
      	employee.delete();
            // или так выполнить метод delete
           Model.Delete(employee);
            // или так выполнить метод delete
           // Model.Delete(id, Employee.class);
           Model.Delete(1, Employee.class);
    }
```java
@Service("roleService")
public class RoleService {
      @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
 	public Response findPage(ParamMap param) {
 		Response response = Response.newResponse();
  		PageResult pageResult = Role.findByPage(param);
 		return response.setPageResults(pageResult);
 	}
  	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
 	public Role getByEmployeeId(Long employeeId) {
 		Role role = Role.getByEmployeeId(employeeId);
 		return role;
 	}
  	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
 	public Response add(Role role) {
 		Response response = Response.newResponse();
  		Timestamp time = new Timestamp(System.currentTimeMillis());
 		role.set(Role.CREATED, time);
 		role.create();
  		return response.OK();
 	}
  	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
 	public Response update(Role role) {
 		Response response = Response.newResponse();
 		role.update();
  		return response.OK();
 	}
 }

Получение одной записи:

package com.ch.sys.service;

import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Service;
import com.ch.fastbuilder.model.Model;
import com.ch.sys.model.Employee;
import com.ch.sys.utils.SHA1;

@Service
public class EmployeeService {

    public Employee getByAccountPwd(String account, String password) {
        Map<String, Object> params = new HashMap<>();
        params.put("account", account);
        params.put("password", SHA1.signature(password));
        String sql = "account=:account and password=:password";
        Employee employee = Model.Where(sql, params);

Пагинация запросов:* Model.InitParams(request) — требуется передача только pageIndex и pageSize, автоматическая пагинация.

public static PageResult findByPage(ParamMap params) {
    BuilderModel builder = Model.InitParams(params);
    PageResult pageResult = builder.findPage(Role.class);
    return pageResult;
}
  • Либо такой вариант пагинации:
    List<Role> roles = Model.Limit(0, 10).list(Role.class);
  • Либо такой вариант пагинации:
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("id", 5);
    params.put("date", new Date());
    List<Role> roles = Model.Where("role_id > :id and created < :date", params).limit(1, 10).list(Role.class);
  • Это слишком длинно? Можно так:
    BuilderModel builder = Model.Where("role_id > :id and created < :date", params);
    List<Role> roles = builder.limit(1, 10).list(Role.class);
  • Можно указывать свои поля выборки:
    List<Role> roles = Model.Select("id, name, created").limit(1, 10).list(Role.class);
    ```**Выполнение SQL-запросов:**
    
  • Может выполняться любой SQL-запрос.
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("name", "Изменение имени");
    // Изменение данных
    Model.SQL("UPDATE role SET name = :name").withParams(params).execute();
    // Выборка данных
    Model.SQL("SELECT * FROM Role WHERE id > :id").withParams(params).list(Role.class);
    // Подсчет количества записей, остальные операции смотрите в демонстрационном примере

Комментарии ( 0 )

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

Введение

FastBuilder — это ORM-фреймворк, который обеспечивает быструю разработку и высокую производительность, а также обладает хорошей расширяемостью. Он гибко поддерживает переключение между различными базами данных, обеспечивает разделение чтения и записи, а также прост в освоении. Эффективность разработки на уровне DAO повышается более чем на 50 %. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wangwei123-FastBuilder.git
git@api.gitlife.ru:oschina-mirror/wangwei123-FastBuilder.git
oschina-mirror
wangwei123-FastBuilder
wangwei123-FastBuilder
master