打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring JdbcTemplate类的常用方法

 

  • execute(String  sql)   

可执行任何sql语句,但返回值是void,所以一般用于数据库的新建、修改、删除和数据表记录的增删改。

 

 

  • int  update(String sql) 
  • int  update(String sql, Object...args)

 增删改,args传递实参,返回受影响的记录数。

 

 

  • int[]   batchUpdate(String...sql)   
  • int[]   batchUpdate(String...sql, List<Object[]>  args)    

批量执行sql语句(增删改),返回受影响的记录数。

 

 

  • setMaxRows(int max)    //设置返回的最大记录数
  • setQueryTimeout(int  timeout)    //设置查询超时
  • setDataSource(DataSource  dataSource)    //设置数据源

以上3个方法都有对应的get方法。

 

  


 

 

queryForObject()      # 必须且只能返回一条记录,且只能查询一个字段

  • <T>  queryForObject(String sql, T.class)    //不需向sql语句传递参数
  • <T>  queryForObject(String sql, Object[]  args, T.class)    //args是sql语句中?对应的值
  • <T>  queryForObject(String sql, T.class, Object... args)
     String sql="select id from student_tb where name = ? and gender = ?"     Object[] args=new Object[]{"张三",1};     int id=jdbcTemplate.queryForObject(sql,args,int.class);

ForObject,顾名思义,必须且只能返回一条记录,如果返回多条记录或没有记录匹配,都会报错;且只能查询一个字段。 

 

 


  

 

queryForList()      #可以返回0条或多条记录,普通类型的List只能查询一个字段,Map类型的List可以查询多个字段

  • List<T>  queryForList(String sql, T.class)
  • List<T>  queryForList(String sql, Object[]  args, T.class)    //args是sql语句中?的对应值(实参)
  • List<T>  queryForList(String sql, T.class, Object...args)
        String sql="select name from student_tb";        List<String> list=jdbcTemplate.queryForList(sql,String.class);        for (String name:list){            System.out.println(name);        }  

基本数据类型的List,只能选中数据表的一列。

 

 

  • List<Map<String,Object>>   queryForList(String sql)
  • List<Map<String,Object>>   queryForList(String sql, Object...args)
       String sql="select * from student_tb";        List<Map<String,Object>> list=jdbcTemplate.queryForList(sql);        //list装的是结果集中所有的记录,一个map装一条记录        for (Map<String,Object> map:list){            //map的key是字段名,value是该字段的值。get()的返回值是Object。            Object id = map.get("id");            Object name = map.get("name");            Object age = map.get("age");            System.out.println("id:" id "\tname:" name "\tage:" age);        }

Map类型的List,可以选择多列。字段名都是String,值可能是各种类型,所以使用Map<String, Obejct>。

 

 


 

 

queryForMap()     #可以查询多个字段,但只能装一条记录

  • Map<String, Obejct>   queryForMap(String sql)
  • Map<String, Object>   queryForMap(String sql, Object...args)
        String sql="select * from student_tb where id = 1";        Map<String,Object> map=jdbcTemplate.queryForMap(sql);        Object name = map.get("name");        Object age = map.get("age");        System.out.println("name:" name "\tage:" age);

因为是Map,可以装多个字段,但只能装一条记录。

如果返回多条记录,则只取第一条来装;如果没有匹配的记录,会报错。

 

 


 

 

queryForRowSet()     #返回结果集

  • SqlRowSet  queryForRowSet(String sql)     
  • SqlRowSet  queryForRowSet(String sql, Object...args)    //args是sql语句中的?对应的值。
       String sql="select * from student_tb";        SqlRowSet rowSet=jdbcTemplate.queryForRowSet(sql);        //遍历结果集        while (rowSet.next()){            // 参数指定列名,可以用String类型的字段名,也可以用int型的值(该字段在结果集中的第几列,从1开始)            // int id = rowSet.getInt(1);            int id = rowSet.getInt("id");            String name = rowSet.getString("name");            //......        }

 

 


 

 

query()      #将结果集的记录映射为bean类型的List

  • List<T>   query(String sql, RowMapper<T>  rowMapper)
  • List<T>   query(String sql, Object[]  args, RowMapper<T>  rowMapper)
  • List<T>   query(String sql, RowMapper<T>  rowMapper, Object...args)

 

bean:

public class Student {    private int id;    private String name;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "Student{"                  "id="   id                  ", name='"   name   '\''                  ", age="   age                  '}';    }}

 

 

使用:

       String sql="select * from student_tb";        RowMapper<Student> rowMapper=new BeanPropertyRowMapper<>(Student.class);        List<Student> list=jdbcTemplate.query(sql,rowMapper);        System.out.println(list);

RowMapper是接口,BeanPropertyRowMapper是spring提供的唯一的实现类。

 

query()只能将结果集的记录映射为Bean类型的List,不能映射为基本类型的List。

映射时会自动将结果集中的字段赋给同名的成员变量,所以要求Bean的成员变量名要与结果集的字段名相同,很死板。

如果结果集中没有同名的字段,该成员变量就不会被映射(值是JVM赋的初始值)。

映射时是调用setter方法给Bean的成员变量赋值,所以Bean要提供setter方法。

 

 

在Spring中尽量不要使用new来创建Bean的实例,上面的RowMapper实例可以这样创建:

<bean name="beanPropertyRowMapper" class="org.springframework.jdbc.core.BeanPropertyRowMapper">      <!-- value指定目标类型 -->        <property name="mappedClass" value="com.chy.model.Student" /></bean>
RowMapper<Student> rowMapper = applicationContext.getBean("beanPropertyRowMapper",BeanPropertyRowMapper.class);

 

来源:https://www.icode9.com/content-4-623851.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
【JavaWeb】73:JdbcTemplate竟然只能算是江南七怪级别的
4.Spring的数据库开发
Spring 中的JdbcTemplate使用_阿郎
使用Spring 中RowMapper
spring对数据库操作的常用方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服