JdbcTemplate使用总结建议收藏

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

Spring JdbcTemplate

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

MyJdbcTemplte.java:

 1 package cn.itcast.gz.template;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 
 9 import javax.sql.DataSource;
10 
11 
12 public class MyJdbcTemplte {
13    
14     DataSource dataSource = null;
15     Connection conn = null;
16     PreparedStatement ps = null;
17     
18     interface updateOperation{
19          void execute(Connection conn,PreparedStatement ps)throws Exception;
20     }    
21     
22     //由于这里用了dbcp数据源,所以不用关闭连接
23     public void executeUpdate(updateOperation operation)
24     {
25         try {
26             dataSource = DbcpUtil.getDataSource();
27             conn=dataSource.getConnection();
28             conn.setAutoCommit(false);
29             //关键是这一步,dao的每个方法在这里得到调用
30             //http://www.cnblogs.com/roucheng/
31             operation.execute(conn, ps);
32             conn.commit();
33         } catch (Exception e) {
34             try {
35                 conn.rollback();
36             } catch (SQLException e1) {
37                 e1.printStackTrace();
38             }
39             e.printStackTrace();
40         }
41     }
42 }

PersonDaoImplTemplte.java:

 1 package cn.itcast.gz.template;
 2 
 3 import java.sql.Connection;
 4 import java.sql.PreparedStatement;
 5 import java.sql.Statement;
 6 
 7 import cn.itcast.gz.template.MyJdbcTemplte.updateOperation;
 8 
 9 public class PersonDaoImplTemplte implements IPersonDao {
10          
11     private final MyJdbcTemplte jdbcTemplte = new MyJdbcTemplte();
12 
13     @Override
14     public void save (final Person person) throws Exception{
15     
16         jdbcTemplte.executeUpdate(new updateOperation() {
17             @Override
18             public void execute(Connection conn , PreparedStatement ps) throws Exception {
19                 String sql  = "insert into person(name,age) values(?,?)";
20                     ps =conn.prepareStatement(sql);
21                     ps.setString(1, person.getName());
22                     ps.setInt(2, person.getAge());
23                     ps.executeUpdate();
24             }
25         });
26     }
27 
28 
29     @Override
30     public void delete(final Integer id) throws Exception{
31         
32         jdbcTemplte.executeUpdate(new updateOperation() {
33             
34             @Override
35             public void execute(Connection conn , PreparedStatement ps) throws Exception {
36                 
37                 String sql = "delete from person where id=?";
38                 ps = conn.prepareStatement(sql);
39                 ps.setInt(1, id);
40                 ps.executeUpdate();            
41             }
42         });
43     }
44     
45     @Override
46     public void updatePerson(final Person p,final Integer id) throws Exception{
47         jdbcTemplte.executeUpdate(new updateOperation() {
48 
49             @Override
50             public void execute(Connection conn , PreparedStatement ps) throws Exception {
51                 
52                 String sql = "update person set name=?,age=? where id=?";
53                 ps = conn.prepareStatement(sql);
54                 ps.setString(1, p.getName());
55                 ps.setInt(2, p.getAge());
56                 ps.setInt(3, id);
57                 ps.executeUpdate();            
58             }
59         });
60     }
61 }

 DbcpUtil.java:

 1 package cn.itcast.gz.template;
 2 
 3 import java.io.IOException;
 4 import java.util.Properties;
 5 
 6 import javax.sql.DataSource;
 7 
 8 import org.apache.commons.dbcp.BasicDataSourceFactory;
 9 
10 public class DbcpUtil {
11 
12     private static DataSource dataSource = null;
13     
14     static
15     {
16         try {
17             Properties properties = new Properties();
18             properties.load(DbcpUtil.class.getClassLoader().getResourceAsStream("db.properties"));
19             dataSource = BasicDataSourceFactory.createDataSource(properties);
20         } catch (Exception e) {
21             e.printStackTrace();
22         }
23     }
24     
25     public static DataSource getDataSource()
26     {
27         return dataSource;
28     }    
29 }

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120760.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安装loadrunner,缺少VC2005_sp1_with_atl的错

    安装loadrunner,缺少VC2005_sp1_with_atl的错

    2021年7月17日
    50
  • java大数据培训[通俗易懂]

    java大数据培训[通俗易懂]从近几年的发展来看,大数据已经可以说是当之无愧的热门了,大数据在越来越多的行业实现落地,也就需要更多的专业人才来支持。很多人都看好大数据行业,想要转向大数据发展,其中也不乏Java一类的技术开发人员。今天的大数据课程学习培训分享,我们来聊聊Java转大数据的那些事儿。因为大数据本身也与Java开发存在着紧密的关联性,行业当中现有的大数据从业者,其中也不乏Java资深开发者,在实际的工作当中,抓住大数据机遇,从Java开发转向了大数据开发,薪资待遇和发展空间,都有了明显的增长和拓宽。Java转大数

    2022年8月30日
    0
  • 正确姿势临时和永久开启关闭Android的SELinux

    正确姿势临时和永久开启关闭Android的SELinux      正确姿势临时和永久关闭Android的SELinux前言  自从Android4.4强制开启SELinux以后,在开发中我们经常会遇到avcdenied的问题,为了方便开发调试我们会将SELinux关闭,那么本章将带领读者怎么临时和永久关闭Android的SELinux。正确姿势临时和永久关闭Android的SELinux1.1临时关闭Andro…

    2022年6月27日
    32
  • quotename mysql,我如何在mySQL中创建一个QUOTENAME函数

    quotename mysql,我如何在mySQL中创建一个QUOTENAME函数IwouldliketocreateaQUOTENAME()functioninmySQLliketheonethatexistsinM$SQLServer.Thisiswhatitdoes:QUOTENAMEreturnsaUnicodestringwiththedelimitersaddedtomaketheinputstr…

    2022年7月25日
    8
  • centos7安装python 3.7_python安装后如何使用

    centos7安装python 3.7_python安装后如何使用文章目录什么是EPEL更新一下yum:安装EPEL:安装python3使用python3什么是EPELRHEL以及他的衍生发行版如CentOS、ScientificLinux为了稳定,官方的rpmrepository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安全稳定是重点,官方的rpmrepository提供的rpm包也不够丰富,很多时候需要自己编译那太辛苦了,而EPEL恰恰可以解决这两方面的问题。什么是EPEL?EPEL的全称叫ExtraPackag

    2022年9月25日
    1
  • Python 读取txt文件数据逗号为分隔符「建议收藏」

    Python 读取txt文件数据逗号为分隔符「建议收藏」fname=’./data/loc.txt’withopen(fname,’r+’,encoding=’utf-8′)asf:s=[i[:-1].split(‘,’)foriinf.readlines()]

    2022年5月13日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号