自定义查询
org.huiche.jdbc.JdbcExecutor 是huiche底层的jdbc执行器,如果dao不能满足你的要求, 可以使用JdbcExecutor进行操作
使用huiche-spring-boot-starter时,会自动注册JdbcExecutor为bean,进行注入即可使用
JdbcExecutor 支持传入原生sql和参数,也支持传入org.huiche.core.ast.Statement 这个是huiche的SQL抽象语法树(AST)封装的语句对象
原生SQL查询
java
@Autowired
private JdbcExecutor executor;
public void helloworld(){
String sql = "xxx";
List<Object> params = new ArrayList();
// 执行SQL
executor.sql(sql,params).update();
// 执行SQL并处理自增值,用于多行自增
executor.sql(sql,params).updateAndPopulateKey();
// 执行SQL并处理自增值,用于单行自增
executor.sql(sql,params).updateAndPopulateKeySingle();
// 查询是否存在,底层直接判断rs.next()
executor.sql(sql,params).queryExists();
// 查询并转换,返回MappedQuery,MappedQuery进一步操作时,才会真正进行数据库查询操作
// 通过行转换器查询
MappedQuery<T> mappedQuery = executor.sql(sql,params).query(RowMapper<T> mapper);
// 通过类查询
MappedQuery<T> mappedQuery = executor.sql(sql,params).query(Class<T> targetClass);
// 查询为Map,默认key为列名转java属性名(snake_case->camelCase),列重复会覆盖
MappedQuery<Map<String,Object> mappedQuery = executor.sql(sql,params).query();
// 查询为Map,自定义key取值
MappedQuery<Map<String,Object> mappedQuery = executor.sql(sql,params).query(BiFunction<String, String, String> keyNamingStrategy);
// 查询为list,默认返回ArrayList,可传入List来调整
List<T> list = mappedQuery.list()
// 查询为set,默认返回LinkedHashSet,可传入Set实例来调整
Set<T> set = mappedQuery.set()
// 查询为collection,需要提供一个集合实例来接收数据,比如HashSet
// 建议传入有序集合,否则无法保证顺序与数据库查询结果一致
HashSet<T> collection = mapperdQuery.collection(new HashSet());
// 查询为stream, 如果需要stream操作,可以进行此查询
// 如果结果类中有Reader或InputStream等流属性,也需要使用stream查询,且在stream操作结束前完成读取转换
Stream<T> stream = mapperdQuery.streeam();
// 查询返回的第一条数据,底层调用了ps.setMaxRows(1),需要自行确保查询条件下只返回一条数据
T first = mapperdQuery.first();
// 查询为Optional
Optional<T> optional = mapperdQuery.optional();
}内置Statement语句
使用Statement语句跟原生sql没有任何区别,只是sql构造的区别, 使用内置Statement语句,会使用对应方言进行转换,转换后即为原生sql语句
java
@Autowired
private JdbcExecutor executor;
public void helloworld(){
// 创建一个insert语句
Insert insert = Sql.insertInto(Artist.class).columns(xxx).values(xxx);
// 创建一个delete语句
Delete delete = Sql.deleteFrom(Artist.class).where(xxx);
// 创建一个update语句
Update update = Sql.update(Artist.class).set(xxx,xxx).where(xxx);
// 创建一个select语句
Select select = Sql.select(xxx).from(Artist.class).join(xxx).on(xxx).groupBy(xxx).having(xxx).orderBy(xxx).limit(xxx);
// 以上均为Statement的子类, 可以直接传递给JdbcExecutor使用
// 后续使用方法与原生SQL一致
executor.sql(insert).updateAndPopulateKeySingle();
executor.sql(delete).update();
executor.sql(update).update();
executor.sql(select).query(Artist.class).list();
}Sql 还提供更多的SQL语句,函数等,具体可了解
如果huiche-ast内置的SQL语句,函数等无法满足需求, 可以进行自定义,点击下一页了解