Spring自带的jdbc用JdbcTemplate类
Posted 旺旺a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring自带的jdbc用JdbcTemplate类相关的知识,希望对你有一定的参考价值。
参考:https://blog.csdn.net/qq_23329167/article/details/81841996#commentBox和https://www.cnblogs.com/penghuake/p/10886291.html
1. 什么是JdbcTemplate
-
JdbcTemplate:是Spring框架的一部分,封装简化了JDBC的操作,帮我们处理了资源的获取和释放。我们只要提供sql语句和参数,就可以得到执行的结果了
-
相关的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<字段名,字段值>
*/
2.3.3 查询多条记录List:
-
方法:
queryForList(String sql, Object... params)
-
参数:
-
sql:要执行的SQL语句
-
params:执行SQL语句需要的参数值
-
-
返回值:
-
List<Map<String,Object>>
:每条记录是一个Map,把所有记录的Map放到List里
-
-
示例:
/**
* 查询性别为男的所有用户,得到List
*/
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;
}
/*
查询所有性别为的用户,得到List<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对象
*/
以上是关于Spring自带的jdbc用JdbcTemplate类的主要内容,如果未能解决你的问题,请参考以下文章
spring自带分布式锁-[jdbc-lock-registry]源码解析
spring自带分布式锁-[jdbc-lock-registry]源码解析
jdbc连接池问题 使用的是spring框架自带的jdbctemplate,请问一下在同一次请求中