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


相关推荐

  • 软件漏洞分析简述

    软件漏洞分析简述软件漏洞1.1漏洞的定义漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。漏洞在各时间阶段的名称根据是否公开分为:未公开漏洞、已公开漏洞根据漏洞是否发现分为:未知漏洞、已知漏洞根据补丁和利用价值是否发布分为:0day漏洞、1day漏洞、历史漏洞图1漏洞在各时间阶段的名称漏洞的特…

    2022年5月20日
    60
  • [LeetCode] Top K Frequent Elements 前K个高频元素

    [LeetCode] Top K Frequent Elements 前K个高频元素

    2022年3月12日
    42
  • 【Spring Boot】使用Spring Boot来搭建Java web项目以及开发过程

    一、SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapidapplicationdevelopment)成为领导者。SpringMVC是非常伟大的框架,开源…

    2022年4月13日
    70
  • android performClick使用

    android performClick使用performClick是使用代码主动去调用控件的点击事件(模拟人手去触摸控件)—————————————–booleanandroid.vi

    2022年7月4日
    16
  • MQTTnet 实现MQTT 客户端和服务端「建议收藏」

    MQTTnet 实现MQTT 客户端和服务端「建议收藏」服务端:classProgram{privatestaticMqttServermqttServer=null;staticvoidMain(string[]args){MqttNetTrace.TraceMessagePublished+=MqttNetTrace_Trace…

    2022年6月25日
    80
  • css改变鼠标样式

    css改变鼠标样式CSS控制鼠标通过cursor属性来实现,该属性可以在任何标记中使用,因此,可以改变各种页面元素的鼠标效果。//设置为小手cursor:pointer//设置为左右箭头cursor:w-resize或cursor:e-resize//设置为斜箭头cursor:nw-resize或cursor:ne-resize//设置为全方位箭头cursor:move此外,cursor还有很多鼠标指针效果,如下图:浏览器调用的是操作系统的鼠标效果,但是,不同的操作系统之间还是存在

    2022年5月31日
    75

发表回复

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

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