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

  • 相关阅读:
    Javascript进阶(7)---函数参数
    Django连接mssql(SqlServer)
    ORM查询
    Django-Model操作数据库
    Django去操作已经存在的数据库
    如何设置CentOS 7获取动态及静态IP地址
    nginx代理设置
    Django+Linux+Uwsgi+Nginx项目部署文档
    nginx的安装部署
    Django项目在linux系统中虚拟环境部署
  • 原文地址:https://www.cnblogs.com/roucheng/p/3474921.html
Copyright © 2011-2022 走看看