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

  • 相关阅读:
    如何找出数组中重复次数最多的数
    如何计算两个有序整型数组的交集
    如何分别使用递归与非递归实现二分查找算法
    如何用递归算法判断一个数组是否是递增
    如何用一个for循环打印出一个二维数组
    如何用递归实现数组求和
    ElasticSearch安装和head插件安装
    SpringBoot全局异常处理方式
    Redis高级命令操作大全--推荐
    Mysql中FIND_IN_SET和REPLACE函数简介
  • 原文地址:https://www.cnblogs.com/roucheng/p/3474921.html
Copyright © 2020-2023  润新知