参考
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.setDatasourceType(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.setDatasourceType(Configuration.DatasourceType.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 | 是Null | IS NULL |
IS_NOT_NULL | 不是Null | IS NOT NULL |
IS_EMPTY | 是空的 | = '' |
IS_NOT_EMPTY | 不是空的 | <>'' |
BETWEEN | 介于 | BETWEEN 'value1' AND 'value2' |
NOT_BETWEEN | 不介于 | NOT BETWEEN 'value1' AND 'value2' |
DriverOption
Name | Value | |
---|---|---|
MYSQL | com.mysql.jdbc.Driver | Mysql 老版驱动 |
MYSQL_CJ | com.mysql.cj.jdbc.Driver | Mysql 8+ |
POSTGRESQL | org.postgresql.Driver | |
DM | dm.jdbc.driver.DmDriver | |
SQLITE | org.sqlite.JDBC | |
ORACLE | oracle.jdbc.OracleDriver | |
JTDS | net.sourceforge.jtds.jdbc.Driver | Sqlserver 驱动 |
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