• jdbcTemplate使用


    一、jdbcTemplate简介

    1、什么是jdbcTemplate

    • JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。
    • Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。

    2、常用的方法

    1. execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句
    2. update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句
    3. query方法及queryForXXX方法:用于执行查询相关语句

    二、jdbcTemplate使用

    1、添加依赖

    
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-jdbcartifactId>
      <version>5.3.9version>
    dependency>
        
    
     <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-contextartifactId>
        <version>5.3.9version>
    dependency>
        
     
    <dependency>
        <groupId>org.springframeworkgroupId>
        <artifactId>spring-txartifactId>
       <version>5.3.9version>
    dependency>
        
    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.20version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    2、数据库结构

    注意:数据库主键自动递增,插入语句不用管主键

    在这里插入图片描述

    3、bean实体类

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class TUser implements Serializable {
    
        private Integer id;
        private String username;
        private String password;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4、yaml文件配置数据库

    #MySql8.0
    spring:
      datasource:
        driverClassName: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/order_system?useSSL=false&characterEncoding=utf-8&useUnicode=true&serverTimezone=Asia/Shanghai
        username: root
        password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5、具体代码使用

    (1)添加数据

    String sql = "INSERT INTO T_USER(username,password) VALUES(?,?)";
    jdbcTemplate.update(sql,"肘子","猪肉");
    
    • 1
    • 2

    (2)修改数据

    String sql = "UPDATE T_USER SET USERNAME = ?, PASSWORD = ? WHERE ID =?";
    int i = jdbcTemplate.update(sql,"鸡腿","鸡心",2);
    
    • 1
    • 2

    (3)删除数据

    String sql = "DELETE FROM T_USER WHERE id = ?;";
    int i = jdbcTemplate.update(sql,2);
    
    • 1
    • 2

    (4)批量操作 batchUpdate

    方法源码:

    在这里插入图片描述
    由源码可以看出,需要传入两个参数,SQL语句以及参数list

    ①批量添加

    		String sql = "INSERT INTO T_USER(username,password) VALUES(?,?)";
            List<Object[]> list = new ArrayList<>();
            Object[] o1 = {"Python", "xyxy"};
            Object[] o2 = {"java", "非官方的"};
            Object[] o3 = {"c#", "xydfgdxy"};
            Object[] o4 = {"c++", "gdfgty"};
            list.add(o1);
            list.add(o2);
            list.add(o3);
            list.add(o4);
            int[] inrArr = jdbcTemplate.batchUpdate(sql, list);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ②批量修改

    		String sql = "UPDATE T_USER SET USERNAME = ?,PASSWORD = ? WHERE ID = ?";
            List<Object[]> list = new ArrayList<>();
            Object[] o1 = {"ENGLISH", "FERUY",116};
            Object[] o2 = {"汉语", "非官FFDV方的",117};
            Object[] o3 = {"鳄鱼#", "DSF",118};
            Object[] o4 = {"法国++", "DSDSDSFGEG分",119};
            list.add(o1);
            list.add(o2);
            list.add(o3);
            list.add(o4);
            int[] inrArr = jdbcTemplate.batchUpdate(sql, list);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    ③批量删除

     		String sql = "DELETE FROM T_USER WHERE ID = ?";
            List<Object[]> list = new ArrayList<>();
            Object[] o1 = {116};
            Object[] o2 = {117};
            Object[] o3 = {118};
            Object[] o4 = {119};
            list.add(o1);
            list.add(o2);
            list.add(o3);
            list.add(o4);
            int[] inrArr = jdbcTemplate.batchUpdate(sql, list);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (5)查询

    		String sql = "SELECT * FROM T_USER WHERE PASSWORD LIKE concat('%', ?, '%')";
            List<TUser> userList = jdbcTemplate.query(sql, new RowMapper<TUser>() {
                @Override
                public TUser mapRow(ResultSet rs, int rowNum) throws SQLException {
                    TUser tUser = new TUser();
                    tUser.setId(rs.getInt("id"));
                    tUser.setUsername(rs.getString("username"));
                    tUser.setPassword(rs.getString("password"));
                    return tUser;
                }
            }, "g");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意:

    定义的SQL语句是一个like查询语句,但是不能直接写成String sql = "SELECT * FROM T_USER WHERE PASSWORD LIKE %?%";这种形式,系统无法分辨,要通过concat进行字符串拼接

    如果是Oracle,用||进行拼接,SELECT * FROM T_USER WHERE PASSWORD LIKE '%'|| ? ||'%'

    附加:自定义RowMapper实现类,实现mapRow方法

    import com.example.domain.TUser;
    import org.springframework.jdbc.core.RowMapper;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    public class TUserRowMapper implements RowMapper<TUser> {
        @Override
        public TUser mapRow(ResultSet rs, int rowNum) throws SQLException {
            TUser tUser = new TUser();
            tUser.setId(rs.getInt("id"));
            tUser.setUsername(rs.getString("username"));
            tUser.setPassword(rs.getString("password"));
            return tUser;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    业务代码:

    String sql = "SELECT * FROM T_USER WHERE PASSWORD LIKE concat('%', ?, '%')";
    List<TUser> userList = jdbcTemplate.query(sql,new TUserRowMapper(),"g");
    
    • 1
    • 2

    拓展连接:NamedParameterJdbcTemplate使用详解

  • 相关阅读:
    如何在IDEA中配置指定JDK版本?轻松解决!!!
    SpringBoot项目去除druid监控的底部广告
    安装thinkphp6并使用多应用模式,解决提示路由不存在解决办法
    C语言函数指针和返回指针值的函数
    box-shadow的使用
    博途PLC 1200PLC1500PLC 取消优化的块访问
    9.19作业
    MySQL优化01-索引
    JAVA学习笔记28(常用类)
    python基于PHP+MySQL的网上书店网上图书销售系统
  • 原文地址:https://blog.csdn.net/m0_58680865/article/details/126907528