Java连接数据库---jdbcTemplate的简单使用

jdbcTemplate简介

jdbcTemplate是Spring框架针对jdbc的封装,他是一个基于ORM思想的jdbc工具类,简化了直接使用jdbc,数据库连接池的代码,提供了更加方便的操作来进行数据库操作。jdbcTemplate在Spring-jdbc的jar包中,并且还需要使用到Spring-tx的jar包(和事务相关),当然jdbc,连接池的jar包也必不可少。

使用DAO对数据进行访问

这里使用JavaWeb中三层架构之一的数据访问层来学习jdbcTemplate的使用,目录结构如下:

其中dao目录用于数据的CRUD,domain目录实现类与数据库表字段的映射,test目录进行单元测试,util提供连接连接池功能(前两篇博客对两种连接池工具进行了封装)

TeacherDao接口对TeacherDaoImpl类进行功能约束,模拟mybatis中接口和xml文件之间的映射,其中jdbcTemplate类的实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class TeacherDaoImpl implements TeacherDao {
private JdbcTemplate jt = new new JdbcTemplate(DruidUtil.getDataSource()); // 参数为工具类中返回的数据源对象,jdbcTemplate帮我们封装了jdbc连接数据库和获取连接池,我们只需要关注如何进行CRUD就可以了。

// 增
@Override
public int add(Teacher teacher) {
// 增删改使用update()方法,返回值为受影响的行数,这种使用了占位符?能有效防止SQL注入
return jt.update("INSERT INTO teacher VALUES (?, ?)", teacher.getTid(), teacher.getTname());

}

// 删
@Override
public int delete(String tid) {

return jt.update("DELETE FROM teacher WHERE tid = ?", "04");
}

// 改
@Override
public int update(Teacher teacher) {

return jt.update("UPDATE teacher SET tname = ? WHERE tid = ?", teacher.getTname(), teacher.getTid());
}

// 查
@Override
public List<Teacher> queryAll() {
// 查询多个使用query()方法,返回值为列表
return jt.query("SELECT * FROM teacher", new BeanPropertyRowMapper<>(Teacher.class));
}

@Override
public Teacher queryOne(String tid){
// 查询单个使用queryForObject,返回值为单个对象
return jt.queryForObject("SELECT * FROM teacher WHERE tid = ?", new BeanPropertyRowMapper<>(Teacher.class), "04");
}
}

可以通过junit的jar包所提供的单元测试功能来对dao实现类进行测试,测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class TeacherTest {
private TeacherDao teacherDao = new TeacherDaoImpl();

// 每一个由注解@Test注释的方法都可以单独执行,也可以按需依次执行
@Test
public void add(){

Teacher teacher = new Teacher();
teacher.setTid("04");
teacher.setTname("tom");
// 获取受影响行数
int i = teacherDao.add(teacher);
System.out.println(i);

}

@Test
public void delete(){

int i = teacherDao.delete("04");
System.out.println(i);

}

@Test
public void update(){

Teacher teacher = new Teacher();
teacher.setTid("04");
teacher.setTname("jack");

int i = teacherDao.update(teacher);
System.out.println(i);
}

@Test
public void queryAll(){

List<Teacher> teacherList = teacherDao.queryAll();
System.out.println(teacherList);
}

@Test
public void queryOne(){

Teacher teacher = teacherDao.queryOne("04");
System.out.println(teacher);
}
}