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


相关推荐

  • 海思Hi3798MV200机顶盒芯片处理器简介

    海思Hi3798MV200机顶盒芯片处理器简介Hi3798MV200是用于IPTV/OTT机顶盒市场的支持4KP60解码的全4K高性能SOC芯片。集成4核64位高性能CortexA53处理器和多核高性能2D/3D加速引擎;支持H.2654Kx2K@P6010bit超高清视频解码,高性能的H.265高清视频编码,HDR视频解码及显示,Dolby和DTS音频处理;内置USB2.0、USB3.0、SDIO3.0、PCIe2.0等丰富外设接口。…

    2022年6月26日
    403
  • CBOW 更新[通俗易懂]

    CBOW 更新[通俗易懂]代码:importtorchimporttorch.nnasnnimportnumpyasnpdefmake_context_vector(context,word_to_ix):idxs=[word_to_ix[w]forwincontext]returntorch.tensor(idxs,dtype=torch.long)…

    2025年8月31日
    7
  • Vue3快速入门教程「建议收藏」

    Vue3快速入门教程「建议收藏」DataProperty模板在<>内的,属于HTMLattribute普通的Mustache语法:双大括号->{{number}}的文本v-bind和v-on的使用创建vm实例时对常用的几个钩子函数的使用方法created(){}mounted(){}以下示例:每秒改变1次msg<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”U..

    2022年5月4日
    37
  • 苹果x充电慢是什么原因_冬季冬季婴儿游泳馆水温上升慢是什么原因呢?该怎么办呢?…[通俗易懂]

    最近,天气越来越冷,正是婴儿游泳馆旺季之时,不少婴儿游泳馆经营者却反映,自己家的热水器好像不太给力了,水温上升速度很慢,已经影响了正常的经营。那么,冬季冬季婴儿游泳馆水温上升慢是什么原因呢?该怎么办呢?热水器安装位置不对空气能热水器需要安装在通风处,好安装在阳台。阳台是个半开放空间,可以自主掌握。冬季有利于新风机置换空气,夏季可以当空调使用,保证热水器的正常运行。其他热水器也要按照使用说明,选…

    2022年4月7日
    42
  • 01-越狱环境搭建

    01-越狱环境搭建学习基础学习条件建议至少iOS8完美越狱版本也不能太高,要保证能够完美越狱检查手机是否可以越狱iOSJailbreak(iOS越狱)什么是iOSJailbreak?iOS系统的漏洞,获取iOS系统的最高权限(Root),解开之前的各种限制(合法行为)完美越狱和不完美越狱完美越狱越狱后的iPhone可以正常关机和重启不完美越狱iPhone一旦关机后再开机…

    2022年6月10日
    25
  • JVM – 内存模型

    JVM – 内存模型JVM-内存模型

    2022年5月24日
    31

发表回复

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

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