JdbcTemplate使用总结建议收藏

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

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

JdbcTemplate使用总结建议收藏此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

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中方法这么多有点晕。。。还好我顶住了自己整理了一些我要用的。。。。推荐楼主去看看它的源码吧。。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • qt 获取窗口句柄「建议收藏」

    qt 获取窗口句柄「建议收藏」HWNDappwnd;appwnd=(HWND)w.winId();QStringClassName(“Qt5QWindowIcon”);QStringAppName=QStringLiteral(“GG”);LPCWSTRapp=reinterpret_cast(ClassName.data());LPCWSTRappCaption=reinterpret_

  • Navicat Premium 15.0.26 MacOS[通俗易懂]

    Navicat Premium 15.0.26 MacOS[通俗易懂]Navicatpremium是一款强大的数据库管理软件,使用它可以轻松连接到MySQL、SQLite、Oracle、MariaDB、Mssql、及PostgreSQL数据库,让管理不同类型的数据库更加的方便。有了NavicatPremium,您不再需要为不同的数据库而切换不同的数据库工具。NavicatPremium结合了其他Navicat成员的功能。有了这种连接到不同数据库的能力,它可以在MySQL、SQLite、Oracle、MariaDB、Mssql、及PostgreSQL之间进行数据传输,同

  • 传统的行存储和(HBase)列存储的区别「建议收藏」

    传统的行存储和(HBase)列存储的区别「建议收藏」1为什么要按列存储列式存储(Columnarorcolumn-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好,直接抄原文了):Ø Row-basedstoragestoresatableinasequenceofrows.Ø Column-basedstorag

  • id门禁卡复制到手机_门禁卡复制到苹果手机

    id门禁卡复制到手机_门禁卡复制到苹果手机大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。门禁卡复制到苹果手机的步骤如下:1、首先读取卡的ID,并安装“NFCTagInfo”,打开手机的NFC设置,门禁卡贴到手机后盖NFC部分,“NFCTagInfo”读取校园卡ID。可以看到“我的卡”ID号码。2、其次修改手机NFC的ID。随即打开R.E.管理器,根目录etc,找到etc文件夹中的“libnfc-nxp.conf”…

  • 深圳易速马网络科技有限公司_动易网络

    深圳易速马网络科技有限公司_动易网络纵观现如今国内CMS程序,大有百花争艳的感觉,随着企业建站需求的复杂度和功能的不断扩展,传统的三五个人写一段代码即告网站建已经行不通,于是以内容管理为应用核心的CMS产品大行其道。  这些CMS系统大体上基于两套框架编写:PHP+MySQL和.NET+MSSQL。在PHP中比较有名的就有DeDeCMS、PHP168、帝国CMS、Supesite等,在.NET方面就有zoomla!CMS、

  • 数据库分区、分表、分库、分片[通俗易懂]

    数据库分区、分表、分库、分片[通俗易懂]一、分区的概念        数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。        分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁IO压力值,分区的优点如下:1、相对于单个文件系统或是硬盘…

发表回复

您的电子邮箱地址不会被公开。

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