文章目录
〇、写在前面
JdbcTemplate
依赖于数据库连接池,如果没有相应的知识储备,请点这些文字先行学习Druid数据库连接池
JdbcTemplate
相关jar包
的下载与使用步骤,请点击这些文字去下载并学会简单使用
创建一个数据库,再创建一张表,添加几条记录
create database db1;
use db1;
create table account(
id int primary key auto_increment,
name varchar(32),
balance double
);
insert into account values
(null,'zhangsan',1000),
(null,'lisi',2500);
前往Druid
配置文件中更改连接数据库的url
:
url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT
在新建的类中,声明一个私有的成员变,方便下面写代码调用:
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
使用Junit
测试写好的每一个方法
一、queryForMap 将查询结果封装为Map集合
queryForMap
将列名作为key
,将值作为value
,将这条记录封装为一个Map
集合
注意:这个方法查询的结果集长度只能是1
需求:查询 id = 1
的记录,将其封装为Map集合
@Test
public void test4(){
String sql = "select * from account where id = ?";
//下面的templaet已经声明
Map<String, Object> stringObjectMap = template.queryForMap(sql, 1);
System.out.println(stringObjectMap);
}
输出信息:
二、queryForList 将查询结果封装为List集合
queryForList
将每一条记录封装为一个Map
集合,再将Map
集合装载到List
集合中
需求:查询所有记录,将其封装为 List
@Test
public void test5(){
String sql = "select * from account";
List<Map<String, Object>> list = template.queryForList(sql);
for(Map<String,Object> map : list){
System.out.println(map);
}
}
输出信息:
三、query 将查询结果封装为JavaBean的List集合
首先创建一个JavaBean
类,名字叫做Account
,声明表中包含的所有字段:
private Integer id;
private String name;
private Double balance;
在IDEA
中按下快捷键alt + Insert
声明所有的get
、set
和toString
方法
需求:查询所有记录,将其封装为 Account 对象的 List 集合
@Test
public void test6_1(){
String sql = "select * from account";
List<Account> list = template.query(sql, new RowMapper<Account>() {
@Override
public Account mapRow(ResultSet rs, int i) throws SQLException {
int id = rs.getInt("id");
String name = rs.getString("name");
double balance = rs.getDouble("balance");
Account account = new Account();
account.setId(id);
account.setName(name);
account.setBalance(balance);
return account;
}
});
for(Account account : list){
System.out.println(account);
}
}
输出信息:
虽然达到了目标,但是上面的代码写的实在太多了!
使用BeanPropertyRowMapper
实现类,可以完成JavaBean
的自动封装,格式如下:
new BeanPropertyRowMapper<类型>(类型.class)
实现查询的代码如下:
@Test
public void test6_2(){
String sql = "select * from account";
List<Account> list = template.query(sql, new BeanPropertyRowMapper<Account>(Account.class));
for(Account account : list){
System.out.println(account);
}
}
也达到了一样的效果:
四、queryForObject 将查询结果封装为Object的对象
queryForObject
一般用于聚合函数的查询
需求:查询表中的总记录数
@Test
public void test7(){
String sql = "select count(id) from account";
Long total = template.queryForObject(sql, Long.class);
System.out.println(total);
}
输出信息: