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

OSCHINA-MIRROR/fishlikewater-easy-sql

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

Простая упаковка SQL2O

Функциональные особенности

  • Лёгкая, использование API SQL2O для работы с базой данных.
  • Встроенные часто используемые шаблоны запросов, быстрое использование.
  • Использование специализированных файлов ресурсов для управления SQL, разделение с кодом.
  • Использование аннотаций для максимального сокращения объёма кода.

2019-09-14 Код генерации GUI

public class TestTemplate {
     @Test
     public void testGui(){
        CreateCodeUtils.main();
    
    }
}

Image text

2019-08-13 Оптимизация перечисления, гибкое использование

public enum TypeEnum implements IEnum<Integer> {

    TYPE1(1, "Тип один"), TYPE2(2, "Тип два");

    private Integer code;

    private String desc;

    TypeEnum(Integer code, String desc){
        this.code = code;
        this.desc = desc;
    }

    public String getDesc(){
        return desc;
    }


    @Override
    public Integer getSaveField() {
        return code;
    }
}

Созданное перечисление реализует интерфейс IEnum и метод getSaveField, который возвращает атрибут, сохраняемый в базе данных.

2019-04-23 Добавление автоматического создания кода

public class TestTemplate {

    @Test
    public void testTpy(){
        Properties p = new Properties();
        p.setProperty("jdbc.url", "jdbc:sqlite:scorpio-jdbc.db");
        p.setProperty("jdbc.username", "");
        p.setProperty("jdbc.password", "");
        p.setProperty("jdbc.driver", "org.sqlite.JDBC");
        p.setProperty("table", "resources");
        p.setProperty("pack", "com.test");
        p.setProperty("fileMapper", "/mapper");
        p.setProperty("basePath", "F:\\IdeaProjects\\easy-sql\\sql2o-core");
        p.setProperty("templatePath", "F:\\IdeaProjects\\easy-sql\\sql2o-core\\src\\main\\resources");
        CreateTemplate.init(p);
        CreateTemplate.createMapper();
        CreateTemplate.createModel();
        CreateTemplate.createService();
    }
}

2019-04-19 ActiveRecord режим

@Data
@Table(fileMapper = "/Resources.sqlmap")
public class Resources extends BaseModel<Resources> {
    @Id
    private Integer id;
    @Column("name")
    private String name;

    private String resUrl;

    private Integer type;

    private Integer parentId;
    
    private Integer sort;
}

Класс сущности (по умолчанию имя таблицы в формате верблюжьего регистра, можно указать с помощью аннотации @Mapping table) наследуется от BaseModel и поддерживает аннотации @Table, @Id, @Column, @Transient.

2018-03-13 Добавление поддержки нескольких источников данных

Код слоя поддерживает несколько источников только для чтения и несколько источников для записи, необходимо включить BaseUtils.getBuilder().setOPenReadyAndWrite(true), использовать public static void openOnlyReady(DataSource... dataSource) и public static void openWrite(DataSource... dataSource), чтобы внедрить источники данных, а затем автоматически выбирать источник для чтения или записи на основе SQL-запроса при выполнении операций с базой данных.

2018-12-30 Добавление поддержки нескольких источников данных

Конфигурация spring boot с аннотацией @EnableSql2o (контейнер spring должен содержать источник данных).

Способ использования

Подготовка

  1. Сначала внедрите источник данных

1.1 Внедрение источника данных через javaConfig

    @Bean
    public Sql2o sql2o(){
        BaseUtils.getBuilder.setDebug(Boolean.valueOf(debug));
        return BaseUtils.open(dataSource());
    }

1.2 Другие способы внедрения

Здесь есть несколько способов инициализации, достаточно вызвать один из этих методов перед использованием:

    BaseUtils.open(String url, String user, String password);
    BaseUtils.open(DataSource dataSource);
    BaseUtils.open(Sql2o sql2o_);

Добавьте аннотацию @EnableSql2o к классу запуска spring boot (необходимо добавить зависимость автоматической конфигурации maven)

  1. Создайте mapper, чтобы он наследовал BaseMapper<'соответствующий объект'>, и используйте аннотацию @Table для обозначения соответствующей таблицы базы данных, первичного ключа и сопоставления объекта сущности Например:
    @Table(table = "m_article")
    public class AgendaMapper extends BaseMapper<Agenda> {
    
    }

В объекте сущности используйте @Id для пометки первичного ключа:

public class Agenda implements BaseModel {

    @Transient
    private static final long serialVersionUID = 1L;
    @Id
    private String id;
    private String title;
    private String startTime;
    private String endTime;
    private Boolean allDay;
    private String color;
    private String url;
    private Boolean editable;
    private String className;//class
    private String backgroundColor;
    private String borderColor;
    private String textColor;
    private String userId;
    private String isFinish;
    private String createTime;
}

Объект сущности должен наследовать BaseModel, здесь @Transient указывает, что поле не является отображаемым полем.

Вызов API

Теперь вы можете использовать API для работы с данными.

Вставка данных в базу данных

      AgendaMapper agendaMapper = new AgendaMapper();
      Agenda agenda = new Agenda();
      /** Установить свойства опущено */
      agendaMapper.save(agenda);/** Установить первичный ключ */
      agendaMapper.saveIgnoreId(agenda) /** Игнорировать первичный ключ, автоинкремент*/
      Agenda[] agendas = new Agenda[];
      agendaMapper.save(agendas, true);/** Пакетное создание */

Другие методы создания здесь не перечислены. АгендаМэппер agendaMapper = новый АгендаМэппер();

Агенда agenda = новая Агенда();
/** 设置属性省略 /
agendaMapper.removeById(id);
agendaMapper.removeByIds(ids);
agendaMapper.remove(новый апдейт модел()); /
* 通过 UpdateModel 构造删除条件** /

Обновление данных

AgendaMapper agendaMapper = new AgendaMapper();
/** 设置属性省略** /
agendaMapper.update(новый апдейт модел()); /** 通过UpdateModel 构造更新条件** /

Запрос можно выполнить разными способами, результаты запроса можно упаковать в любой подходящий объект. Далее рассмотрим шаблон:
Шаблонный файл имеет расширение .sqlmap. По умолчанию поиск происходит в текущем каталоге класса DAO, но можно настроить путь поиска с помощью аннотации @Table в файле конфигурации fileMapper. Можно указать каталог или конкретный файл. Если не настроить fileMapper или указать каталог, по умолчанию будет использоваться файл с именем текущего класса. Шаблоны сохраняются в виде пар ключ-значение.

queryLableName = SELECT name from article_lable where id in(${lableIds});
updateStatus = update m_article set is_public=${status} where a_id=#${id}#;
queryCountByTitle = select count(*) from m_article a left join article_type t on a.type_id=t.id where 1=1
<#if title??> and a.name like #%${title}%# </#if>;

Шаблон пишется на языке Freemarker (здесь используется #${id}#, # обозначает строку), таким образом, можно использовать Mapper для вызова написанного SQL.

Map<String, Object> paramMap = new HashMap<>();
paramMap.put("title", title);
int count = agendaMapper.count(new QueryModel().tpl("queryCount", paramMap));
int count = agendaMapper.update(new UpdateModel().tpl("queryCount", paramMap)

SQL-запросы можно кэшировать, установив BaseUtils.getBuilder().setDev(false). По умолчанию dev имеет значение false, рекомендуется установить значение true во время разработки, чтобы не кэшировать SQL и иметь возможность изменять его и сразу видеть результат.

Поддержка создания таблиц (эта функция была отменена):
Если необходимо автоматически создавать таблицы при инициализации, нужно настроить BaseUtils.getBuilder().setCreate(true). DTO должны быть настроены с помощью аннотаций:

@IdGenerator(value = Generator.DEFINED, idclass = MyIdFactory.class)
private String aId;

@Column(value = "name",type = Types.VARCHAR, length = 20,nullable = false)
private String name;

@Column(value = "flag",type = Types.BOOLEAN,defaultValue = "0")
private Boolean flag;

В аннотации @IdGenerator есть свойство value, которое представляет собой перечисление способов генерации первичного ключа. Перечисление выглядит следующим образом:
public enum Generator {
AUTO,UUID,DEFINED
}
AUTO означает, что первичный ключ увеличивается автоматически, uuid означает генерацию UUID первичного ключа, defined означает пользовательскую генерацию. При настройке defined необходимо настроить атрибут idclass, который указывает класс, генерирующий первичный ключ. Этот класс должен наследовать класс IdDefined, например:

public class MyIdFactory implements IdDefined {
@Override
public String getId() {
return "t_option"+UUIDUtils.get();
}
}

Свойства аннотации @Column следующие:

public @interface Column {

String value();  

int type() default Types.VARCHAR;  

int length() default 255;  

boolean nullable() default false;  

String describe() default "";  

boolean index() default false;  

String columnDefined() default "";  

String defaultValue() default "";  

}
Здесь index означает, будет ли создан индекс для этого столбца, columnDefined используется для определения некоторых типов данных, таких как decimal(10,2), а defaultValue — это значение по умолчанию. Для типа Types.BOOLEAN значениями по умолчанию являются строки «0» и «1», которые представляют false и true соответственно.

Обратите внимание: если результат запроса представляет собой список карт, все заголовки таблиц преобразуются в нижний регистр.

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

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

1
https://api.gitlife.ru/oschina-mirror/fishlikewater-easy-sql.git
git@api.gitlife.ru:oschina-mirror/fishlikewater-easy-sql.git
oschina-mirror
fishlikewater-easy-sql
fishlikewater-easy-sql
master