SQL操作说明
ProviderBuilder是Obatis数据库编程的核心类,SQL语句操作代理句柄的生成类,路径为 com.obatis.orm.provider.handle,和数据库交互的删、改、查都需要以此为桥梁进入DB 工厂类进行解析。以下主要描述一些常规的用法,更多用法可参考源码中方法注释或者参照 Obatis Demo项目。
SQL操作目前仅支持MySQL数据库,其他数据库后期视情况考虑兼容性问题。
-
查询所有数据
/**
* 查询所有数据
* @return
*/
@Override
public List<TestModel> list() {
/**
* 映射sql > select * from test;
* QueryProvider 更多用法,请参考注释
*/ QueryProvider provider = ProviderBuilder.query();
return this.list(provider); } -
根据条件查询
/**
* 根据条件查询
* @param params
* @return
*/
@Override
public List<TestInfo> listByParams(TestInfo params) {
/**
* 映射sql > select * from test where user_name = ? and type = ?;
* QueryProvider 更多用法,请参考注释
*/
QueryProvider provider = ProviderBuilder.query();
provider.equal(TestField.FIELD_USER_NAME, params.getUserName());
provider.equal(TestField.FIELD_TYPE, params.getType());
return this.list(provider, TestInfo.class);
} -
分页查询
/**
* 分页查询
* @param param
* @return
*/
@Override
public PageInfo<TestInfo> page(PageParam param) {
/**
* 映射sql > select type, user_name, birthday from test where user_name = ? and type = ? limit ?,?
* QueryProvider 更多用法,请参考注释
*/ QueryProvider provider = ProviderBuilder.query();
provider.select(TestField.FIELD_TYPE, TestField.FIELD_USER_NAME, TestField.FIELD_BIRTHDAY);
provider.setPage(param);
provider.equal(TestField.FIELD_USER_NAME, "name");
provider.equal(TestField.FIELD_TYPE, 1);
return this.page(provider, TestInfo.class);
} -
更新操作
/**
* 更新操作
*/
public void update() {
/**
* 映射sql > update test set user_name = ? where id = ?
* UpdateProvider 更多用法,请参考注释
*/ UpdateProvider provider = ProviderBuilder.update();
provider.set(TestField.FIELD_USER_NAME, "xiaoming");
provider.equal(TestField.FIELD_ID, "123456789");
this.update(provider); } -
删除操作
/**
* 删除
* 展示根据 QueryProvider 封装类删除和根据ID删除两种方式
*/
public void delete() {
/**
* 映射sql > delete test where user_name = ?
* QueryProvider 更多用法,请参考注释
*/ DeleteProvider provider = ProviderBuilder.delete();
provider.equal(TestField.FIELD_USER_NAME, "xiaoming");
this.update(provider);
/**
* 提醒:删除还提供了根据ID进行删除的方法
* 映射sql > delete test where id = ?
*/
this.deleteById(new BigInteger("123456789")); } -
连接查询和 or 条件查询
/**
* 连接查询和 or 条件查询
*/
public void leftJoin() {
/**
* 映射sql > select t.user_name, t.type, c.salary, c.company_name from test t left join user_company_list c on t.id=c.user_id where t.type in (?,?,?) or t.user_name=?
* 提醒:left join 如果被连接查询的表不出现 select()则默认不查询,而主表如果出现 select()则查询列举的字段,不出现则表示查询主表所有字段。如果不查询主表字段,则设置 selectNothing() 为true,详见注释说明。
* QueryProvider 更多用法,请参考注释
*/
QueryProvider provider = ProviderBuilder.query();
provider.select(TestField.FIELD_USER_NAME, TestField.FIELD_TYPE);
Integer[] typeArray = {1,2,3};
provider.in(TestField.FIELD_TYPE, typeArray);
provider.orEqual(TestField.FIELD_USER_NAME, "xiaoming");
QueryProvider workProvider = ProviderBuilder.query("user_company_list");
workProvider.select("salary", "company_name");
provider.addleftJoin(TestField.FIELD_ID, "user_id", workProvider);
this.list(provider, TestInfo.class);
/**
* 拓展说明:
* 如果要设置类似 where a = ? and (b = ? or c = ?),则把括号内语句看成是一个QueryProvider,用 addProvider() 即可,而此QueryProvider不用设置表名,相见注释说明。
* 如果连接查询要实现两个不同的 QueryProvider 字段运算,获取字段的方法为 getColumn()。 * 如果要用到字段运算,建议使用 com.obatis.core.sql.QueryProviderExpHandle 表达式运算类。
* QueryProvider 更多用法,请参考注释
*/
}