dao代码模板

提供数据源以及回收资源的工具类DbUtils:

public class DbUtils {
    private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
    static {
        try {
            dataSource.setDriverClass("com.mysql.jdbc.Driver");
            dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");// 指定连接的数据库的地址
            dataSource.setUser("root");
            dataSource.setPassword("123");
            dataSource.setAcquireIncrement(5);
            dataSource.setInitialPoolSize(20);
            dataSource.setMinPoolSize(2);
            dataSource.setMaxPoolSize(50);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 单例模式
    public static DataSource getDataSource() {
        return dataSource;
    }

    public static void close(Connection con, PreparedStatement ps, ResultSet rs) {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (ps != null) {
                ps.close();
                ps = null;
            }
            if (con != null) {
                con.close();
                con = null;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

提供数据库连接、处理事务的工具类TransactionUtils:

public class TransactionUtils {
    private static DataSource dataSource = DbUtils.getDataSource();
    private static Connection con = null;

    public static Connection getConnection() {
        try {
//            System.out.println(dataSource);
            con = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }

    public static void beginTx() {
        try {
            con.setAutoCommit(false);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void rollback() {
        try {
            con.rollback();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void commit() {
        try {
            con.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

一个测试dao类:

public class STDao {
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    public void update() {
        con = TransactionUtils.getConnection();
        System.out.println(con);
        TransactionUtils.beginTx();
        String sql = "delete from student";
        try {
            ps = con.prepareStatement(sql);
            ps.executeUpdate();
            sql = "insert into student (name,age) values (?,?)";
            ps = con.prepareStatement(sql);
            ps.setString(1, "xiaosi");
            ps.setObject(2, "yy");
            ps.executeUpdate();
            TransactionUtils.commit();
        } catch (Exception e) {
            e.printStackTrace();
            TransactionUtils.rollback();
        } finally {
            DbUtils.close(con, ps, rs);
        }
    }

    public static void main(String[] args) {
        STDao dao = new STDao();
        dao.update();
    }
}

以上代码是比较好的,数据源单例、在catch块中写回滚,在finally块中回收资源。

需要了解的是,如果我们的sql语句错误,那么在ps.executeUpdate();后就会抛出java.sql.SQLException异常,直接进入到catch块中,根本不会执行下面的提交事务代码,不提交事务的情况下执行回滚也不会报错,此时数据库数据不会改变。如果sql语句正确,提交事务后因为网路问题造成操作失败,则此时也会进入到catch块中,执行回滚,数据库数据也不会发生改变。所以说,数据层代码这样写最合适。

时间: 2024-08-23 07:02:51

dao代码模板的相关文章

文件代码模板的使用

文件代码模板的介绍 文件代码模板可以简单理解为:我们在项目中创建某些类型文件时,就已经在对应这些新文件中预设了代码内容.因为文字表达都带有点无力,所以下面用 Gif 动态图来演示. 如上图 Gif 所示,IntelliJ IDEA 默认新建类自带的类注释格式一般不够友好或是规范,所以我们一般需要自己根据公司编码规范进行设置. 如上图 Gif 所示,这是根据我自己的需求进行设置的类注释,这种注释方式会更友好. 根据演示我们应该已经很好地理解了文件代码模板是什么东西了.对此我们可以衍生出很多玩法,比

使用MyBatis Generator自动生成实体、mapper和dao层

通过MyBatis Generator可以自动生成实体.mapper和dao层,记录一下怎么用的. 主要步骤: 关于mybatis从数据库反向生成实体.DAO.mapper: 参考文章:http://www.cnblogs.com/wangkeai/p/6934683.html第一种方式:main方法运行(推荐) 1.在pom.xml中加入插件依赖: 2.写mbgConfiguration.xml文件,jdbc.properties文件 3.写/SSM/src/main/java/main/Ge

基于Mybatis的Dao层的开发

基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量. SqlSessionFactory是一个接口,接口中定义了openSession

mybatis开发dao的方法

mybatis开发dao的方法 1.1     SqlSession使用范围 1.1.1     SqlSessionFactoryBuilder 1 //以流的方式读取总的配置文件 2 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); 3 4 //生成SqlSessionFactory 5 SqlSessionFactory sqlSessionFactory = new SqlSessionFa

DAO层,Service层,Controller层、View层介绍

来自:http://jonsion.javaeye.com/blog/592335 DAO层 DAO 层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此 接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及 有关数据库连接的参数都在Spring的配置文件中进行配置. Service层 Service 层主要负责业

JAVA DAO(Data Access Object)的个人总结

最近上课,老师提到DAO,也是因为后面做作业的需要,就花了一点时间,来看一下DAO,也只是泛泛而谈,自己学习的一些总结,也希望给想学习的新手一些帮助吧. 1.什么是DAO 说来说去,DAO到底是什么呢?神神秘秘的,让我们来一层层的解开她的面纱.在核心J2EE模式中是这样介绍的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共的API当中.用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事物方法.在这个应用程序中,当需要和数据源进行交互的

使用JDBC连接MySQL数据库--典型案例分析(九)----财务帐号的DAO设计及其实现

转载请注明:http://blog.csdn.net/uniquewonderq 问题: 1.新增财务帐号: 2.修改某个财务帐号的信息. 3.修改某个财务帐号的状态. 4.查询所有的财务帐号. 5.根据某个财务帐号ID查询该财务帐号的全部信息. 方案: 在企业开发时,通常采用分层模式,常用的层次划分为表现层+控制层+业务层+持久层+数据源.持久层的功能是通过某些技术货框架将数据库的内容映射成对象,通过操作这些对象实现对数据库的操作.其主要目的是minutes业务对象和数据源那关系表之间的差异,

MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO(一)

在MyBatis中,当我们编写好访问数据库的映射器接口后,MapperScannerConfigurer就能自动成批地帮助我们根据这些接口生成DAO对象(),然后我们再使用Spring把这些DAO对象注入到业务逻辑层的对象(Service类的对象).因此,在这种情况下的DAO层,我们几乎不用编写代码,而且也没有地方编写,因为只有接口.这固然方便,不过如果我们需要在DAO层写一些代码的话,这种方式就无能为力了.此时,MyBatis-Spring提供给我们的SqlSessionDaoSupport类

Mybatis入门实例(三)——使用MyBatis Generator生成DAO(转载http://qiuqiu0034.iteye.com/blog/1163026)

接上回 http://qiuqiu0034.iteye.com/blog/1162952 虽然MyBatis很方便,但是想要手写全部的mapper还是很累人的,好在MyBatis官方推出了自动化工具,可以根据数据库和定义好的配置直接生成DAO层及以下的全部代码,非常方便. 需要注意的是,虽然自动化工具需要一个配置文件,但是MyBatis的配置文件仍然不能少,自动化工具的配置文件用于对生成的代码的选项进行配置,MyBatis的配置文件才是运行时的主要配置文件. 这个工具叫做MyBatis_Gene