前言
使用原生JDBC的API进行代码编写时,总得一遍遍去写结果集的拆解和对象的封装,那么这些重复性的工作和代码有没有一种方式可以帮我们解决呢?答案当然是有的,比如DBUtils、JDBC Template和MyBatis等众多工具或者持久层框架,都帮我们解决了这个问题。本篇文章将对JDBC Temlate这种持久层的技术使用进行讲解
想要了解更多关于JDBC的知识,可以参考本系列文章:
JDBC系列(上篇)——数据连接池的应用
一、JDBC Template简介
JDBC Template是Spring框架对JDBC的简单封装,提供了一个Template
对象来简化我们持久层的开发。这个模板支持简单的JDBC数据库访问功能以及基于索引参数的查询。
JdbcTemplate 类继承自抽象类 JdbcAccessor,同时实现了 JdbcOperations 接口。其直接父类 JdbcAccessor 为子类提供了一些访问数据库时使用的公共属性。
二、JDBC Template的使用
步骤一:引入Maven依赖
这里需要注意,JDBC Template还依赖了Spring其他核心的包,所以这里我们可以直接引入springmvc的依赖
<!-- Spring-jdbc 用于配置JdbcTemplate -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- 引入springmvc 依赖包,里面有spring其他beans、core等核心包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
步骤二:使用JDBC Template进行CRUD操作
使用JDBC Template
需要我们提前准备好数据库连接池Data Source
,可以使用代码的方式注入,也可以使用配置文件的方式注入。这里的话,我们不对连接池的部分进行讲解,主要讲解Template的应用。
DML操作
新增、修改、删除的操作基本只要调用update()方法就可以实现,对于缺省参数的使用,不需要再和之前一样需要调用很多次setString
和serInt
方法才可以把值封装好。
public class UserDaoImpl {
private JdbcTemplate template = new JdbcTemplate(DruidPoolUtils.getDataSource());
public boolean updateUser(){
int result = template.update("update user set password = ? where uid = ?", "123456", 2);
return result>0;
}
// 删除记录也是用update方法
public boolean deleteUser(){
int result = template.update("delete from user where uid = ?", 4);
return result>0;
}
// 新增记录也是用insert方法
public boolean insertUser(){
int result =template.update("insert into user(username,password) values(?,?)","xiaoqi",88888888);
return result>0;
}
DQL操作
对于查询操作,JDBC Template
提供了较多的API供我们去使用,我们可以根据需要来获取我们想要返回的结果
public class UserDaoImpl {
private JdbcTemplate template = new JdbcTemplate(DruidPoolUtils.getDataSource());
// 结果集封装为Map对象
public void queryTes1t(){
Map<String, Object> map = template.queryForMap("select * from user where username = ?", "xiaohong");
System.out.println(map.toString());
}
// 结果集封装为自定义对象的List集合,比较常用
public void queryTest2(){
List<Map<String, Object>> list = template.queryForList("select * from user where username = ?", "xiaohong");
for (Map<String, Object> stringObjectMap : list) {
System.out.println(stringObjectMap);
}
}
// 结果集封装为对象
public void queryTest3(){
List<User> list = template.query("select * from user where uid = ?", new BeanPropertyRowMapper<User>(User.class), 3);
System.out.println(list);
}
// queryForObject -》 常用于查询聚合函数的值
public void queryTest4(){
Long result = template.queryForObject("select count(*) from user",Long.class);
System.out.println(result);
}
}
至此,对于JDBC Template的介绍就到此结束啦。我们只要掌握其基本的api使用,可以做到在日常工作中应用即可。
最后再说说个人的一些小观点
其实JDBC Template和DBUtils本质上都是对原生JDBC的API进行的封装,只是前者归属在Spring大家族中,相对来说拓展性更好,而对于Hibernate
和Mybatis
而言,这两者已经算是比较完整成熟的ORM框架了,支持的功能要更为强大,当然使用起来的学习成本也会更高。大家在应用中需要根据实际情况来选择,如果只是比较小的项目,选择更为轻量的DBUtils和JDBC Template未尝不是更好的选择。
网友评论