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

  • 相关阅读:
    如何在一个项目中同时包含mvc建站、webapi接口
    解决api、WebService跨域问题
    mvc接口、webapi、webservice 对比
    云服务器 远程mysql 无法连接
    c#快速写本地日志
    使用筛选器特性标记方法解决webapi 跨域问题
    流量控制(滑动窗口协议)
    解释Windows7“上帝模式”的原理
    Linux网络协议栈(二)——套接字缓存(socket buffer)
    理解MySQL——架构与概念
  • 原文地址:https://www.cnblogs.com/roucheng/p/3474921.html
Copyright © 2011-2022 走看看