JdbcClient使用
SpringBoot 3.2引入了新的 JdbcClient 用于数据库操作,JdbcClient对JdbcTemplate进行了封装,采用了 fluent API 的风格,可以进行链式调用。
对于不适合使用复杂的ORM框架,或者需要编写复杂的SQL的场景,可以使用JdbcClient自己编写SQL来操作数据库。不过JdbcClient不支持数据的批量操作和存储过程调用,对于这种情况就需要使用JdbcTemplate。
依赖
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
runtimeOnly 'mysql:mysql-connector-java:8.0.33'
配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
简单使用
@Autowired
private JdbcClient jdbcClient;
查询
精准查询
User user = jdbcClient.sql("select * from t_user where id = ?")
.param(1)
.query(User.class)
.single();
批量查询
List<User> list = jdbcClient.sql("select * from t_user")
.query(User.class)
.list();
如果需要字段映射
List<User> list = jdbcClient.sql("select username name,password pwd from t_user")
.query((rs, rowNum) ->
new User()
.username(rs.getString("name"))
.password(rs.getString("pwd")))
.list();
查询数量
Integer count = jdbcClient.sql("select count(*) from t_user")
.query(Integer.class)
.single();
新增
多参数时需要保证传入参数的顺序,也可以使用:xxx
来命名
int update = jdbcClient.sql("insert into t_user (username,password) values(:username,:password)")
.param("username", "wangwu")
.param("password", "123456")
.update();
也可以使用map进行封装
Map<String,Object> map = new HashMap<>();
map.put("username","tianliu");
map.put("password","abcde");
int update = jdbcClient.sql("insert into t_user (username,password) values(:username,:password)")
.params(map)
.update();
也可以直接传入pojo对象
User user = new User().username("sunqi").password("qwe");
int update = jdbcClient.sql("insert into t_user (username,password) values(:username,:password)")
.paramSource(user)
.update();
修改
int update = jdbcClient.sql("update t_user set username=:username where id=:id")
.param("id", 1)
.param("username", "zhangsan123")
.update();
删除
int update = jdbcClient.sql("delete from t_user where id=:id")
.param("id", 6)
.update();