传统JDBC代码的弊端
在传统的jdbc代码中,即使是执行一条简单的SQL语句,其实现的整个流程也是极为繁琐的,先打开数据库连接执行sql,然后组装结果,最后关闭数据库资源,这中间还有大量的try...catch...finally语句,造成了代码的泛滥,导致我们的代码可读性和可维护性急剧下降,从而引发信任问题,为了解决这些“疑难杂症”。Spring提供了自己的解决方案,那就是JdbcTemplate模板。

实现步骤:

1.以c3p0连接mysql为例,使用c3p0需要导入两个相关jar包:
c3p0-0.9.1.2.jar
以及数据库jar: mysql-connector-java-5.1.7-bin.jar
以及事物相关jar:spring-tx-4.2.4.RELEASE.jar spring-jdbc-4.2.4.RELEASE.jar

2、书写资源文件jdbc.properties

<!-- 注意这里有坑,者四个键值对的键要么固定这么写,要么就以jdbc.***的方式,切记用以下方式写,却把user写成username,这是因为spring加载时username这个键被其他地方使用了 -->
url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
user=root
password=123456
driver=com.mysql.jdbc.Driver

3.书写配置文件

<context:property-placeholder
location="classpath:jdbc.properties" />
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${driver}"></property>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<!-- 这里还可以配置其他参数,比如initialPoolSize等等 -->
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<context:component-scan base-package="com.eric.jdbc"></context:component-scan>
</beans>

4.创建实体类:

//创建一个实体类,很简单,这里省略
public class BankUser {……}

5.创建一个实体类的映射类(用于指定数据库到实体类的字段映射关系):
通过RowMapper接口的实现,将每行数据映射到实例对象。但不必担心异常处理。调用JdbcTemplate将捕获并处理SQLExceptions。

public class BankUserMapper implements RowMapper<BankUser> {
public BankUser mapRow(ResultSet resultSet, int i) throws SQLException {
BankUser bankUser=new BankUser();
bankUser.setId(resultSet.getString("id"));
bankUser.setUserName(resultSet.getString("user_name"));
bankUser.setPassword(resultSet.getString("password"));
return bankUser;
}
}

6.书写DAO:

@Repository
public class UserDAOImpl {
@Autowired
private JdbcTemplate template;//必须注入JdbcTemplate模板
// 查询单个数据:
public BankUser findUserByname(String userName){
//在JdbcTemplate 都是使用?作为占位符
String sql ="select * from bank where id=?";
Object[] params = {userName};
RowMapper<BankUser> mapper = new BankUserMapper();
BankUser bankUser=template.queryForObject(sql, params,mapper);
return bankUser;
}
}
//查询多个数据:
public List<BankUser> findAllUser(){
String sql ="select * from bank";
RowMapper<BankUser> mapper = new BankUserMapper();
List<BankUser> list=template.query(sql,mapper);
return list;
}
//插入一条数据:
public void save(BankUser bankUser) {
String sql = "insert into bank(id,user_name,password,money) values (?,?,?,?)";
Object[] params = { bankUser.getId(),bankUser.getPassword(),
bankUser.getUserName(), bankUser.getMoney() };
template.update(sql, params);
}
//修改数据:
public void update(BankUser bankUser){
String sql = "update bank set password=? where id=?";
Object[] params ={bankUser.getPassword(),bankUser.getId()};
template.update(sql, params);
}
//删除数据:
public void deleteUser(String id){
String sql = "delete from emp where id=?";
Object[] params = {id};
template.update(sql, params);
}

玩转Spring——Spring整合JDBC的更多相关文章

  1. Spring Boot 整合JDBC 实现后端项目开发

    一.前言 二.新建Spring Boot 项目 三.Spring Boot 整合JDBC 与MySQL 交互 3.1 新建数据表skr_user 3.2 Jdbcproject 项目结构如下 3.3 ...

  2. 【Spring Boot学习之三】Spring Boot整合数据源

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...

  3. JAVAEE——spring03:spring整合JDBC和aop事务

    一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...

  4. Spring整合JDBC以及AOP管理事务

    本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象 ...

  5. Spring整合jdbc

    首先web.xml文件跟往常一样,加载spring容器和加载org.springframework.web.context.ContextLoaderListener读取applicationCont ...

  6. Spring整合JDBC及事务处理

    1.Spring整合JDBC DAO是数据访问对象(data access object)的简写.接口是实现松耦合的关键,Spring也鼓励使用接口,但不是强制的. 捕获异常时希望能尝试从异常状态中恢 ...

  7. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  8. Spring知识点总结(五)Spring整合JDBC

     1. 回顾JDBC        a. java操作关系型数据的API.导入相关数据库的驱动包后可以通过JDBC提供的接口来操作数据库.        b. 实现JDBC的六个步骤          ...

  9. Spring整合JDBC和Druid连接池

    我的博客名为黑客之谜,喜欢我的,或者喜欢未来的大神,点一波关注吧!顺便说一下,双十二快到了,祝大家双十二快乐,尽情的买买买~ 如果转载我的文章请标明出处和著名,谢谢配合. 我的博客地址为: https ...

  10. Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)

    1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...

随机推荐

  1. Python2.7 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed 问题解决

    # 报错信息 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.insta ...

  2. 自述:转职IT ,痛苦一阵子;不转职IT,痛苦一辈子(第一章)

    作为一个从后期制作转职过来的Java工程师,我认为我是幸运的,虽然我的本科专业(影视后期)也是火爆行业,不愁工作,但我不后悔进入这个IT坑,毕竟转行,只痛苦一阵子,但是不转行,可能我会痛苦一辈子. 我 ...

  3. 《Python测试开发技术栈—巴哥职场进化记》—初来乍到,请多关照

    上文<巴哥职场进化记-Python测试开发技术栈>开篇讲到巴哥毕业初到深圳,见到了来自五湖四海的室友.一番畅聊之后,抱着对未来职场生活的期待,大家都进入了梦乡.今天我们来看看巴哥第一天上班 ...

  4. PHP strrchr() 函数

    实例 搜索 "world" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符: <?php高佣联盟 www.cgewang.comecho strrchr(" ...

  5. [草稿] Linux 各种 打包 / 解包 命令

    https://www.cnblogs.com/yeungchie/ 有不少错误 .tar格式 解包: tar -xvf FileName.tar 打包: tar -cvf FileName.tar ...

  6. Blob分析之 ball.hdev

    * ball.hdev: Inspection of Ball Bonding * 关闭窗体更新 dev_update_window ('off')*关闭窗体dev_close_window ()*打 ...

  7. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  8. MySQL面试题!新鲜出炉~

    01.Mysql 的存储引擎,myisam和innodb的区别? 答:1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发. 2.innodb是支持事务 ...

  9. 【Python 实例】面向对象 | 按相反的顺序输出列表的值

    [Python 实例]面向对象 | 按相反的顺序输出列表的值 题目: 解答: 运行结果: 题目: 按相反的顺序输出列表的值 解答: """ 按相反的顺序输出列表的值 &q ...

  10. U盘数据泄露,用不到30行的Python代码就能盗走

    今天跟大家分享下一段简单的代码,希望能给经常用U盘的人警戒,提高信息安全意识. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...