Spring JdbcTemplate

在数据库的操作中,每个业务方法都要得到连接,开启事务,提交事务,回滚,关闭连接等,我们可以把这些做成一个模版,这样,在业务代码中只需要关注业务逻辑即可。

MyJdbcTemplte.java:

 package cn.itcast.gz.template;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import javax.sql.DataSource; public class MyJdbcTemplte { DataSource dataSource = null;
Connection conn = null;
PreparedStatement ps = null; interface updateOperation{
void execute(Connection conn,PreparedStatement ps)throws Exception;
} //由于这里用了dbcp数据源,所以不用关闭连接
public void executeUpdate(updateOperation operation)
{
try {
dataSource = DbcpUtil.getDataSource();
conn=dataSource.getConnection();
conn.setAutoCommit(false);
//关键是这一步,dao的每个方法在这里得到调用
//http://www.cnblogs.com/roucheng/
operation.execute(conn, ps);
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}
}

PersonDaoImplTemplte.java:

 package cn.itcast.gz.template;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement; import cn.itcast.gz.template.MyJdbcTemplte.updateOperation; public class PersonDaoImplTemplte implements IPersonDao { private final MyJdbcTemplte jdbcTemplte = new MyJdbcTemplte(); @Override
public void save (final Person person) throws Exception{ jdbcTemplte.executeUpdate(new updateOperation() {
@Override
public void execute(Connection conn , PreparedStatement ps) throws Exception {
String sql = "insert into person(name,age) values(?,?)";
ps =conn.prepareStatement(sql);
ps.setString(1, person.getName());
ps.setInt(2, person.getAge());
ps.executeUpdate();
}
});
} @Override
public void delete(final Integer id) throws Exception{ jdbcTemplte.executeUpdate(new updateOperation() { @Override
public void execute(Connection conn , PreparedStatement ps) throws Exception { String sql = "delete from person where id=?";
ps = conn.prepareStatement(sql);
ps.setInt(1, id);
ps.executeUpdate();
}
});
} @Override
public void updatePerson(final Person p,final Integer id) throws Exception{
jdbcTemplte.executeUpdate(new updateOperation() { @Override
public void execute(Connection conn , PreparedStatement ps) throws Exception { String sql = "update person set name=?,age=? where id=?";
ps = conn.prepareStatement(sql);
ps.setString(1, p.getName());
ps.setInt(2, p.getAge());
ps.setInt(3, id);
ps.executeUpdate();
}
});
}
}

DbcpUtil.java:

 package cn.itcast.gz.template;

 import java.io.IOException;
import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; public class DbcpUtil { private static DataSource dataSource = null; static
{
try {
Properties properties = new Properties();
properties.load(DbcpUtil.class.getClassLoader().getResourceAsStream("db.properties"));
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
} public static DataSource getDataSource()
{
return dataSource;
}
}

就这个分享。。。有几个意见说下 
1. MyJdbcTemplte中的数据源不能变,建议添加一个带数据源的构造方法这样实例化的时候可以有不同的数据源以应对需要连接过个数据库的项目。
2. MyJdbcTemplte 这个只能执行更新的语句么,查询之类的不行,查询的话还要考虑赋值之类的问题,想想泛型

另外。。spring里有spring jdbctemplate,它提供的肯定是非常棒的,又是开源。。。只是个人觉得他的jdbctemplate中方法这么多有点晕。。。还好我顶住了自己整理了一些我要用的。。。。推荐楼主去看看它的源码吧。。

JdbcTemplate使用总结的更多相关文章

  1. JdbcTemplate+PageImpl实现多表分页查询

    一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...

  2. Spring JdbcTemplate

    参考链接: https://my.oschina.net/u/437232/blog/279530 http://jinnianshilongnian.iteye.com/blog/1423897 J ...

  3. jdbcTemplate批量插入(添加)

    public void addSubscibe(List<PermedipUserSubscribeVo> list) { final List<PermedipUserSubscr ...

  4. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  5. Spring MVC篇二、使用JdbcTemplate进行数据库操作

    上一篇只是一个简单的Spring MVC框架,接下来添加一些跟数据库的交互. 一.添加jdbc相关配置   在maven中添加相关依赖后,配置数据库访问参数及数据源.数据库参数使用配置文件,代码如下: ...

  6. 使用Spring JdbcTemplate实现数据库操作

    今天我来演示 关于JDBCTemplate实现对数据库的查询和添加 首先是添加 第一步大家都知道 创建一个实体类 然后写一个方法 把实体类当参数传进去 在实现这个接口 JdbcDaoSupport这个 ...

  7. JdbcTemplate进行查询

    1.jdbcTemplate.queryForInt() 和 jdbcTemplate.queryForLong() 例如:下面使用queryForInt()方法传回user表中的记录数: jdbcT ...

  8. jdbcTemplate之jdbc模板技术

    1:为什么要使用jdbcTemplate? 在实际开发中使用jdbc技术太过复杂,为了减少代码冗余,操作简单 步骤一:创建实体类 package beans; public class Book { ...

  9. Spring JdbcTemplate 方法详解

    JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...

  10. Spring中的JdbcTemplate使用

    1.引出SpringJDBC的概念 在学习JDBC编程时我们会感觉到JDBC的操作是多么繁琐,那么当我们学习的Hibernate框架时,我们感觉到数据库的操作也变非常简单,提高了开发效率.但是当使用H ...

随机推荐

  1. Identifier 'Logic.DomainObjectBase._isNew' is not CLS-compliant

    http://stackoverflow.com/questions/1195030/why-is-this-name-not-cls-compliant To get around this err ...

  2. memcached命令

    memcached相对于redis来说,简直简单太多,命令也少很多,一般应用都是使用redis,但了解一下也还是不错的. 具体命令和用法很参见:http://www.runoob.com/memcac ...

  3. 阿里云里面的Linux 系统挂载数据盘

    转自:http://www.cnblogs.com/adjk/p/5112360.html 适用系统:非IO优化+SSD云盘Linux(Redhat , CentOS,Debian,Ubuntu)实例 ...

  4. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  5. ch4 MySQL 安全管理

    第 4 章 MySQL 安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司 ...

  6. 画蛇添足-记spring3 hibernate4整合时遇到问题的处理办法

    最近在来到一个新公司,使用新的spring3,hibernate4框架,在使用注解事务总是不起作用. 首先看配置文件,然后再讲解. 首先是springmvc-servlet.xml,这个配置文件是se ...

  7. 使用git提交内容到网盘

    1.创建版本库(注意勾选纯版本库的选项) 2.客户端获取版本库代码 3.提交及获取 master是git默认的主要分支(主干),适合单人独自开发.多人开发时可以给每个人创建一个分支 参考资料: htt ...

  8. Raft论文的一些问题

    抛些问题出来,真正解释了这些问题才算理解了论文.:) 1. 什么是复制状态机 2. Raft vs Paxos 3. Raft的设计目标understandability,为达到设计目标在做设计时如何 ...

  9. script标签块的独立性与共享性

    块间独立,变量与方法共享 每个script块之间不会相互影响,某个script块出错,不会影响其它块的运行 块之间定义的非局部变量和方法可以共享,(其实只是共享了全局变量和方法) <script ...

  10. SDL安全人员角色定义

    SDL安全人员角色定义 http://www.docin.com/p-819975580.html