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

Spring JdbcTemplate类常用的方法的更多相关文章

  1. Delphi中TStringList类常用属性方法详解

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...

  2. File类常用的方法与字节流类方法简介

    File类常用的方法 获取功能的方法 public String getAbsolutePath() :返回此File的绝对路径名字符串. public String getPath() :将此Fil ...

  3. WebDriverWait类以及类常用的方法

    WebDriverWait类提供了显式等待和隐式等待,显式等待的等待时间是固定的,固定了10s就必须等待10s,隐式等待的等待时间是个范围,例如最大10s,那么如果在3s的时候程序达到预期的结果,那么 ...

  4. Collections集合工具类常用的方法

    java.utils.Collections //是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean addAll(Collection& ...

  5. Calendar类常用需求方法

    经常处理一些日期相关的信息,Calendar类是处理日期的常用类,写下几个方法,不用重复造轮子了. 1.求上一天,下一天的日期 Date now = new Date();Calendar c = C ...

  6. QueryRunner类常用的方法

    public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh) throws SQLEx ...

  7. WinForm BaseClass类常用通用方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. 集合框架二(Collection接口实现类常用遍历方法)

    四种常用遍历方式 Collection coll = new ArrayList(); coll.add("123"); coll.add("456"); co ...

  9. StringUtils类常用的方法讲解

    StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 ...

随机推荐

  1. 支持CSS3的高级CSS

    一.匹配部分字符串 在CSS2中,可以使用[ href='info.htm' ] 这样的属性选择器来匹配href属性中的字符,但是无法只匹配部分字符串.而CSS3给出了三个新的运算符:^ , $ 和 ...

  2. jenkins pipline 如何禁止任务并行

    背景: 我测试的一个项目CI包括好几个步骤,但是有的步骤是不能并行的,否则会互相影响 处理过程: [方案一]:不推荐此方案 在每个步骤里面的shell脚本中加进程判断 示例:比如本任务有4个步骤,第2 ...

  3. C语言sprintf函数的深入理解

    由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf比printf有用得多.所以本文着重介绍sprintf, ...

  4. word中去除所有table键

    1.打开word---文件---选项---显示,不勾选制表符 2.选择需要的文本,按[CTRL+H]查找替换, 3.将鼠标定位至“查找内容”,点击“特殊格式-制表符”,然后出现^t,在“替换为”中输入 ...

  5. 生成器和迭代器_python

    一.生成器简介(generator) 在进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator) ...

  6. 记录 shell学习过程(5)continue break

    1.continue ;i<;i++)) do ];then continue fi echo $i done # ./continue.sh12346789 2.break ;i<;i+ ...

  7. C++内存管理(new operator/operator new/operator delete/placement new)

    new operator 我们平时使用的new是new操作符(new operator),就像sizeof一样是语言内置的,不能改变它的含义,功能也是一样的 比如: string *ps = new ...

  8. keil密钥过期 新注册机 有效期至2032年

    点击下载:keil注册机至2032年

  9. 虚拟机NAT模式联网

    阿里开源镜像软件:https://opsx.alibaba.com/mirror 如何使VMware ip与本机ip处于同一网段 https://blog.csdn.net/kakuma_chen/a ...

  10. 【资源分享】CS起源 V34.4044(经典版本)

    *----------------------------------------------[下载区]----------------------------------------------* ...