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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Angularjs MVC

    Angularjs MVC

    2022年3月12日
    51
  • laravel 微信公众号的Token无效解决的方案[通俗易懂]

    laravel 微信公众号的Token无效解决的方案[通俗易懂]laravel代码的编写<?phpnamespaceApp\Http\Controllers\Admin\Official;useIlluminate\Http\Request;useApp\Http\Controllers\Controller;useIlluminate\Support\Facades\DB;define(‘TOKEN’,’yunlive11′);classWxresponseMsgextendsController{ protecte.

    2022年9月13日
    0
  • db4o 参考资料

    db4o 参考资料转自IBM:http://www.ibm.com/developerworks/cn/java/jdb4o/本系列是对开放源码数据库db4o的详尽介绍,db4o可以充分利用当前的面向对象的语言、系统和理念。要下载db4o,可以参考db4o主页;为了实践本系列的示例,需要下载db4o。系列文章第1部分:简介和概览(2007年4月9日)

    2022年7月21日
    17
  • 学习笔记3–车载传感器之毫米波雷达和超声波雷达

    学习笔记3–车载传感器之毫米波雷达和超声波雷达毫米波雷达和超声波雷达。

    2022年9月11日
    0
  • java压缩/解压war包

    java压缩/解压war包packagecom.kingsoft.unwar;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io

    2022年10月4日
    0
  • 免费的UML工具

    免费的UML工具VisualParadigmCommunityEdition是自2004年以来推出的,旨在提供免费的UML软件,用于非商业目的,支持在UML建模方面迈出第一步的用户,以及需要免费的跨平台UML建模软件的用户个人使用,如在学生项目中使用UML。UML建模工具免费用于各种非商业目的。支持13个UML2.x图和ERD图。VisualParadigmCommFreeUMLToolforPersonalandnon-Commercialpurposes,downloadnow!

    2022年7月12日
    14

发表回复

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

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