JdbcClient使用

JdbcClient使用

起男 24 2025-06-03

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();