当前位置:Gxlcms > 数据库问题 > Spring自带的jdbc用JdbcTemplate类

Spring自带的jdbc用JdbcTemplate类

时间:2021-07-01 10:21:17 帮助过:11人阅读

  • 相关的jar包:

  • 常用方法:

    • 构造方法:JdbcTemplate(DataSource dataSource)

    • 执行任意语句:execute(sql),此方法没有返回值

    • 执行DML语句:update(String sql, Object... params),返回int,影响行数

    • 执行DQL语句:queryxxx() 方法多,单独讲解

  • 2. 使用JdbcTemplate

    2.1 执行任意语句execute方法(了解)

    • 方法:jdbcTemplate.execute(sql)

      • 参数:要执行的SQL

      • 返回值:无

    2.2 进行增、删、改操作

    • 方法:jdbcTemplate.update(String sql, Object... params)

      • 参数:

        • sql:要执行的SQL语句。如果有参数,必须是?处理过的

        • params:执行SQL语句需要的参数值

      • 返回值:

        • int,表示影响的行数

    2.3 进行查询操作

    2.3.1 ==查询一个值==:
    • 方法:queryForObject(String sql, Class resultType, Object... params)

    • 参数:

      • sql:要执行的sql语句

      • resultType:想要什么类型的结果,比如:Integer.class, String.class

      • params:执行SQL语句需要的参数值

    • 返回值:

      • 一个值,类型是由参数resultType决定的

      通常用于查询数量,结果是一个值,类型通常是Integer

    • 示例:

    public void queryOne(){
       //Integer count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class);
    ?
       Integer count = jdbcTemplate.queryForObject("select count(*) from user where sex = ?", Integer.class, "男");
       System.out.println("user表里的数量:" + count);
    }
    2.3.2 查询一条记录Map:
    • 方法:queryForMap(String sql, Object... params)

    • 参数:

      • sql:要执行的SQL语句

      • params:执行SQL语句需要的参数值

    • 返回值:

      • Map<String, Object> 是Map<字段名, 字段值>

    • 示例:


    /**
        * 查询姓名是 大郎 的用户信息,得到Map<字段名,字段值>
        */
    @Test
    public void queryOneMap(){
       Map<String, Object> map = jdbcTemplate.queryForMap("select * from user where username = ?", "大郎");
       System.out.println(map);
    }
    2.3.3 查询多条记录List:
    • 方法:queryForList(String sql, Object... params)

    • 参数:

      • sql:要执行的SQL语句

      • params:执行SQL语句需要的参数值

    • 返回值:

      • List<Map<String,Object>>:每条记录是一个Map,把所有记录的Map放到List里

    • 示例:


       /**
        * 查询性别为男的所有用户,得到List
        */
       @Test
       public void queryManyList(){
           List<Map<String, Object>> mapList = jdbcTemplate.queryForList("select * from user where sex = ?", "男");
           for (Map<String, Object> map : mapList) {
               System.out.println(map);
          }
      }

     

    2.3.4 ==查询多条记录,得到JavaBean对象的集合==:
    • 方法:query(String sql, RowMapper rowMapper, Object.. params)

    • 参数:

      • sql:要执行的SQL语句

      • rowMapper:用于设置结果集中列的数据,对应到JavaBean哪个属性上,是设置对应关系的

        • 可以简化写成:new BeanPropertyRowMapper<>(JavaBean名称.class)

      • params:执行SQL语句需要的参数值

    • 返回值:

      • List<JavaBean对象>。List里每个JavaBean,是一条记录的数据封装成的对象

    • JavaBean:有特定结构的简单Java类。数据库里每张表,都可以有一个对应的JavaBean;表里每条记录,都对应一个JavaBean的对象。

      • 类里要有私有属性

      • 类里要有无参构造

      • 每个属性要有public的get/set方法

    • 示例:查询所有用户,得到用户集合List<User>


    /**
    * JavaBean:一种特殊结构的简单Java类,要求:
    * 1. 类里要有private的属性
    * 2. 每个属性要有public的get/set方法
    * 3. 要有无参构造
    * 4. 建议每个属性的类型,写成包装类,而不要写成基本数据类型
    */
    public class User {
       private Integer id;
       private String username;
       private String password;
       private String sex;
       private Date birthday;
    ?
       public Integer getId() {
           return id;
      }
    ?
       public void setId(Integer id) {
           this.id = id;
      }
    ?
       public String getUsername() {
           return username;
      }
    ?
       public void setUsername(String username) {
           this.username = username;
      }
    ?
       public String getPassword() {
           return password;
      }
    ?
       public void setPassword(String password) {
           this.password = password;
      }
    ?
       public String getSex() {
           return sex;
      }
    ?
       public void setSex(String sex) {
           this.sex = sex;
      }
    ?
       public Date getBirthday() {
           return birthday;
      }
    ?
       public void setBirthday(Date birthday) {
           this.birthday = birthday;
      }
    ?
       @Override
       public String toString() {
           return "User{" +
                   "id=" + id +
                   ", username=‘" + username + ‘\‘‘ +
                   ", password=‘" + password + ‘\‘‘ +
                   ", sex=‘" + sex + ‘\‘‘ +
                   ", birthday=" + birthday +
                   ‘}‘;
      }
    }

    /*
    查询所有性别为的用户,得到List<User>
    */
    @Test
    public void queryManyUser2(){
       List<User> userList = jdbcTemplate.query("select * from user where sex = ?", new BeanPropertyRowMapper<User>(User.class), "男");
       for (User user : userList) {
           System.out.println(user);
      }
    }

     

    2.3.5 ==查询一条记录,得到JavaBean对象==:
    • 方法:queryForObject(String sql, RowMapper rowMapper, Object.. params)

      注意:如果找不到数据,方法会抛异常EmptyResultDataAccessException

      我们认为是正常的,应该try..catch,让异常不影响后边代码的继续执行

    • 参数:

      • sql:要执行的SQL语句

      • rowMapper:用于设置结果集中列的数据,对应到JavaBean哪个属性上,是设置对应关系的

        • 可以简写成:new BeanPropertyRowMapper<>(JavaBean类名.class)

      • params:执行SQL语句需要的参数值

    • 返回值:

      • List<JavaBean对象>。List里每个JavaBean,是一条记录的数据封装成的对象

    • 示例


    /**
        * 查询用户名为 大朗 的信息,得到一个User对象
        */
    @Test
    public void queryOneUser(){
       User user = null;
       try {
           user = jdbcTemplate.queryForObject("select * from user where username = ?", new BeanPropertyRowMapper<User>(User.class), "大郎");
      } catch (EmptyResultDataAccessException e) {
           System.out.println("找不到用户User[username = 大郎]");
      }
       System.out.println(user);
    }

    Spring自带的jdbc用JdbcTemplate类

    标签:plist   pen   query   ams   details   决定   param   构造方法   包装   

    人气教程排行