public MyData findDataById(Long id){ return jdbcClient.sql("select * from my_data where id = ?") .params(id) .query(MyData.class) .single(); }
按照自定义查询条件查数据:
public List<MyData> findDataByName(String name){ return jdbcClient.sql("select * from my_data where name = ?") .params(name) .query(MyData.class) .list(); }
以上两种查询方式,查询条件中的变量使用的是占位符,JdbcClient也支持按照参数名进行查询:
public Integer insertDataWithNamedParam(MyData myData){ Integer rowsAffected = jdbcClient.sql("insert into my_data values(:id,:name) ") .param("id", myData.id()) .param("name", myData.name()) .update(); return rowsAffected; }
当参数比较多时,可以将参数放到一个Map中,用Map进行查询:
public List<MyData> findDataByParamMap(Map<String, ?> paramMap){ return jdbcClient.sql("select * from my_data where name = :name") .params(paramMap) .query(MyData.class) .list(); }
public List<MyData> findDataWithRowMapper(){ return jdbcClient.sql("select * from my_data") .query((rs, rowNum) -> new MyData(rs.getLong("id"), rs.getString("name"))) .list(); }
同时也支持查询记录数:
public Integer countByName(String name){ return jdbcClient.sql("select count(*) from my_data where name = ?") .params(name) .query(Integer.class) .single(); }
四、插入数据
可以使用 JdbcClient 的 update 方法进行数据的插入和更新。
通过占位符参数插入数据:
public Integer insertDataWithParam(MyData myData){ Integer rowsAffected = jdbcClient.sql("insert into my_data values(?,?) ") .param(myData.id()) .param(myData.name()) .update(); return rowsAffected; }
通过命名参数插入数据:
public Integer insertDataWithNamedParam(MyData myData){ Integer rowsAffected = jdbcClient.sql("insert into my_data values(:id,:name) ") .param("id", myData.id()) .param("name", myData.name()) .update(); return rowsAffected; }
直接插入整个对象:
public Integer insertDataWithObject(MyData myData){ Integer rowsAffected = jdbcClient.sql("insert into my_data values(:id,:name) ") .paramSource(myData) .update(); return rowsAffected; }
五、总结
通过上述的示例,可以看到基本的数据库操作都可以用 JdbcClient 实现,避免了复杂的ORM框架的使用,切操作要比ORM框架简单灵活的多。fluent API 的风格也更容易编写和阅读。