参考

Bootstrap

创建实例

SQLite

Bootstrap bootstrap = Unabo.load(configuration -> {
			configuration.setUrl("jdbc:sqlite:sys.db");
			configuration.setDriverOption(DriverOption.SQLITE);
			configuration.setDatasourceType(DatasourceType.HikariCP);
			configuration.setShowSql(true);
		});

MySQL

 Bootstrap bootstrap = Unabo.load("sys", configuration -> {
            configuration.setUrl("jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true");
            configuration.setDriverOption(DriverOption.MYSQL_CJ);
            configuration.setDatasourceType(Configuration.DatasourceType.HikariCP);
            configuration.setUsername("root");
            configuration.setPassword("123456");
            configuration.setShowSql(true);
        });

Oracle

Bootstrap bootstrap = Unabo.load("oracle",configuration -> {
    configuration.setUrl("jdbc:oracle:thin:@//127.0.0.1:1521/ORCL");
	configuration.setDriverOption(DriverOption.ORACLE);
	configuration.setDatasourceType(Configuration.DatasourceType.HikariCP);
	configuration.setUsername("sys");
	configuration.setPassword("123456");
	configuration.setShowSql(true);
});

PostgreSQL

Bootstrap bootstrap = Unabo.load(configuration->{
configuration.setUrl("jdbc:postgresql://127.0.0.1:5432/postgres");
	configuration.setDriverOption(DriverOption.POSTGRESQL);
	configuration.setDatasourceType(Configuration.DatasourceType.HikariCP);
	configuration.setUsername("sys");
	configuration.setUsername("postgres");
	configuration.setPassword("123456");
	configuration.setShowSql(true);
});

SQLServer

Bootstrap bootstrap = Unabo.load(configuration->{
    configuration.setUrl("jdbc:jtds:sqlserver://localhost;DatabaseName=test;");
	configuration.setDriverOption(DriverOption.JTDS);
	configuration.setDatasourceType(Configuration.DatasourceType.HikariCP);
	configuration.setDataSouseType(DataSouseType.Druid);
	configuration.setUsername("test");
	configuration.setPassword("123456");
	configuration.setShowSql(true);
});

达梦

Bootstrap bootstrap = Unabo.load("default", configuration -> {
	configuration.setUrl("jdbc:dm://127.0.0.1:5236");
	configuration.setDriverOption(DriverOption.DM);
	configuration.setDataSouseType(DataSouseType.HikariCP);
	configuration.setUsername("SYSDBA");
	configuration.setPassword("123456");
	configuration.setShowSql(true);
	//通过ValidationQuery来设置默认库(写在url中是无效的)
	configuration.setValidationQuery("set SCHEMA PERSON");
});

MongoDB

Unabo.nosql.load(configurationNosql -> {
    configurationNosql.setIp("127.0.0.1");
    configurationNosql.setPort(27017);
    configurationNosql.setSchema("test");
});

枚举

C

名称解释备注
GT大于>
GTE大于等于>=
LT小于<
LTE小于等于<=
IN在列表in ; 多个值逗号分隔,如 张三,李四
NOT_IN不在列表not in
EQUALS等于=
NO_EQUALS不等于<>
CONTAINS包含模糊查询,LIKE '%keyword%'
NO_CONTAINS不包含模糊查询,NOT LIKE '%keyword%'
START_WITH开始以模糊查询,LIKE 'keyword%'
NO_START_WITH开始不是以模糊查询,NOT LIKE 'keyword%'
END_WITH结束以模糊查询,LIKE '%张'
NO_END_WITH结束不是以模糊查询,NOT LIKE '%张'
IS_NULL是NullIS NULL
IS_NOT_NULL不是NullIS NOT NULL
IS_EMPTY是空的= ''
IS_NOT_EMPTY不是空的<>''
BETWEEN介于BETWEEN 'value1' AND 'value2'
NOT_BETWEEN不介于NOT BETWEEN 'value1' AND 'value2'

DriverOption

NameValue
MYSQLcom.mysql.jdbc.DriverMysql 老版驱动
MYSQL_CJcom.mysql.cj.jdbc.DriverMysql 8+
POSTGRESQLorg.postgresql.Driver
DMdm.jdbc.driver.DmDriver
SQLITEorg.sqlite.JDBC
ORACLEoracle.jdbc.OracleDriver
JTDSnet.sourceforge.jtds.jdbc.DriverSqlserver 驱动
Mongodb为了与sql保持一致,实际无意义

TIP

也可以手动设置字符串 configuration.setDriverOption("手动设置驱动");

DatasourceType

  • Dbcp 默认
  • Druid
  • C3p0
  • HikariCP 推荐

TIP

连接池依赖除默认项,使用时需手动引入

TransactionFactoryEnum

  • JdbcTransactionFactory

    手动事务工厂

  • SpringManagedTransactionFactory

    Spring事务工厂

Associated

代表与前一个条件用什么方式连接

  • AND
  • OR

接口

Manager

获取实例

Manager manager = bootstrap.manager();

获取连接池实例,可以强转为具体连接池类型

DataSource dataSource = manager.getTemplate().getDataSource();

获取配置信息

manager.productType();
manager.databaseName();
manager.getConfiguration();

DataInfomation

获取实例

DataInformation dataInformation = bootstrap.dataInformation();

获取表名

dataInformation.getTableNames();
//是否包含表名
dataInformation.containsTable("tableName");

获取表字段

dataInformation.getColumns("tableName")

获取库名称

dataInformation.getDatabases();

queryTable

操作表,主要用于查询,drop,column等操作

queryEntity

bootstrap.query(实体类对象或集合)...

用于 插入,修改,建表等操作

querySQL

bootstrap.createSQL(sql)...

sql查询,可以搭配 addCondition使用

queryMap

bootstrap.queryMap(表名,<T extend Map<String,Object>>单个实例/集合)...

作用同 queryEntity 一样,区别只是类型

Behavior

 @Table(name="user")
 @Data
 public  class User implements Behavior<User>{
     @Id
     int id;
     String name;
     int age;
     @Column(name = "class")
     String cls;
     LocalDateTime create_time;

 }

赋予实体类行为,可直接通过实体类来操作数据库

增删改查


User user = new User();
user.setXXX...

user.insert();

--------------------

User user =  new User(id).findByPk();
user.setName("张三");

//指定字段修改
user.fields("name").update();

//除了id以外字段都修改
user.exceptFields("id").update();

_________________________

//主键删除
user.delete();

________________________

//列表查询
 List<User> list = Behavior.specify(FlowTest.User.class).list();

获取Bootstrap实例

Behavior中通过 this.bootstrap() 获取实例

 @Table(schema = "test",name="user")
 public static class User implements Behavior<User> {

 @Id
 String id;
 ....
        
   public void todo(){
      this.bootstrap()...
   }
}








 


Condition 条件

SimpleCondition

创建

一般通过C(条件工厂)来创建

//import online.sanen.unabo.api.condition.C;
C.eq("id",1);

CompositeCondition

创建

一般通过C(条件工厂)来创建

 C.composite(composite->{
     composite.add(gt("age",18));
     composite.add(eq("height","170",Condition.Associated.OR));
 });

Function

TIP

unabo自身并未提供函数,函数支持请参阅当前数据库文档

Condition支持函数,例如Mysql下

C.gt("name",2,"length(%s)")

//字符串插值项作为填充字段,最终生成 length(name)>2

启用与关闭 (enable)

setEnable 设置条件是否生效,非启用状态下条件不会参与查询。(默认值 true版本1.1.7.2+

  C.eq("id","1").enable(false);

这在复合查询中是有用的,不破坏代码连贯性让条件参与查询,举例:


 bootstrap.queryTable("user").addCondition(conds->{
   conds.add(contains("name",keyword).enable(!Validate.isNullOrEmpty(keyword)));
   ...
 });
 
 //只有当keyword有值时,条件才会参与查询
 

很多情况判断比较复杂,一行代码无法搞定,此时可以用enable的重载,enable(Supplier<Boolean> supplier) 最终返回布尔值即可。

 bootstrap.queryTable("user").addCondition(conds->{

     conds.add(C.contains("name",keyword).enable(()->{
       ...
       return  Validate.isNullOrEmpty(keyword))
    );
});
 
 //只有当keyword有值时,条件才会参与查询





 





类型转换 (valueCastType)

字符串型数值会自动转换成数值类型

  bootstrap.queryTable("user").addCondition(C.eq("id","1"));
  
  //查询时自动转换类型,以 id>1 查询

使用 valueCastType 关闭条件值自动转换

 bootstrap.queryTable("user")
  .addCondition(C.eq("id","1").valueCastType(false));
  
  //查询时保留原始类型,以 id>"1" 查询

连接 (Associated)

多个条件 and/or 拼接时,以后一个条件连接符为准

 composite.add(gt("age",18));
 composite.add(eq("height","170",Condition.Associated.OR));
 
// 最后输出为=>  age>18 or height<170