您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Spring3 DAO和事务详解
Java私塾《深入浅出学Spring3》——系列精品教程nSpring对JDBC的支持包括:DAO支持,JdbcTemplate类的使用、NamedParameterJdbcTemplate类的使用等。《深入浅出学Spring3开发》——系列精品教程真正高质量培训签订就业协议网址::460190900本节课程概览真正高质量培训签订就业协议网址::460190900第四章:对JDBC和ORM的支持《深入浅出学Spring3开发》——系列精品教程n简介Spring提供的DAO(数据访问对象)支持主要的目的是便于以标准的方式使用不同的数据访问技术,如JDBC,Hibernate或者JDO等。它不仅可以让你方便地在这些持久化技术间切换,而且让你在编码的时候不用考虑处理各种技术中特定的异常。n一致的异常层次Spring提供了一种方便的方法,把特定于某种技术的异常,如SQLException,转化为自己的异常,这种异常属于以DataAccessException为根的异常层次。这些异常封装了原始异常对象,这样就不会有丢失任何错误信息的风险。如果使用拦截器方式,你在应用中就得自己小心处理HibernateException、JDOException等,最好是委托给SessionFactoryUtils的convertHibernateAccessException、convertJdoAccessException等方法。这些方法可以把相应的异常转化为与org.springframework.dao中定义的异常层次相兼容的异常。真正高质量培训签订就业协议网址::460190900DAO支持-1《深入浅出学Spring3开发》——系列精品教程n一致的DAO支持抽象类为了便于以一种一致的方式使用各种数据访问技术,如JDBC、JDO和Hibernate,Spring提供了一套抽象DAO类供你扩展。这些抽象类提供了一些方法,通过它们你可以获得与你当前使用的数据访问技术相关的数据源和其他配置信息。1:JdbcDaoSupport-JDBC数据访问对象的基类。需要一个DataSource,同时为子类提供JdbcTemplate。2:HibernateDaoSupport-Hibernate数据访问对象的基类。需要一个SessionFactory,同时为子类提供HibernateTemplate。也可以选择直接通过提供一个HibernateTemplate来初始化。3:JdoDaoSupport-JDO数据访问对象的基类。需要设置一个PersistenceManagerFactory,同时为子类提供JdoTemplate。4:JpaDaoSupport-JPA数据访问对象的基类。需要一个EntityManagerFactory,同时为子类提供JpaTemplate。真正高质量培训签订就业协议网址::460190900DAO支持-2《深入浅出学Spring3开发》——系列精品教程n简介SpringJDBC抽象框架所带来的价值将在以下几个方面得以体现:(注:使用了SpringJDBC抽象框架之后,应用开发人员只需要完成斜体加粗字部分的编码工作。)1:指定数据库连接参数2:打开数据库连接3:声明SQL语句4:预编译并执行SQL语句5:遍历查询结果(如果需要的话)6:处理每一次遍历操作7:处理抛出的任何异常8:处理事务9:关闭数据库连接Spring将替我们完成所有单调乏味的JDBC底层细节处理工作真正高质量培训签订就业协议网址::460190900对JDBC的支持-1《深入浅出学Spring3开发》——系列精品教程nSpringJDBC抽象框架由四个包构成:core、dataSource、object以及support1:core包由JdbcTemplate类以及相关的回调接口和类组成。2:datasource包由一些用来简化DataSource访问的工具类,以及各种DataSource接口的简单实现(主要用于单元测试以及在J2EE容器之外使用JDBC)组成。3:object包由封装了查询、更新以及存储过程的类组成,这些类的对象都是线程安全并且可重复使用的。它们类似于JDO,与JDO的不同之处在于查询结果与数据库是“断开连接”的。它们是在core包的基础上对JDBC更高层次的抽象。4:support包提供了一些SQLException的转换类以及相关的工具类。在JDBC处理过程中抛出的异常将被转换成org.springframework.dao包中定义的异常。因此使用SpringJDBC进行开发将不需要处理JDBC或者特定的RDBMS才会抛出的异常。所有的异常都是uncheckedexception,这样我们就可以对传递到调用者的异常进行有选择的捕获。真正高质量培训签订就业协议网址::460190900对JDBC的支持-2《深入浅出学Spring3开发》——系列精品教程nJdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了对JDBC的使用。它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。n定义接口如下:publicinterfaceApi{publicbooleancreate(UserModelum);}n定义实现类如下:publicclassImplimplementsApi{privateDataSourceds=null;publicvoidsetDs(DataSourceds){this.ds=ds;}publicbooleancreate(UserModelum){JdbcTemplatejt=newJdbcTemplate(ds);jt.execute(insertintotbl_user(uuid,name)values('+um.getUuid()+','+um.getName()+'));returnfalse;}}真正高质量培训签订就业协议网址::460190900JdbcTemplate类-1《深入浅出学Spring3开发》——系列精品教程n配置文件beanname=apiclass=cn.javass.Spring3.jdbc.Implpropertyname=dsref=dataSource/property/beanbeanname=dataSourceclass=org.apache.commons.dbcp.BasicDataSourcepropertyname=driverClassNamevalueoracle.jdbc.driver.OracleDriver/value/propertypropertyname=urlvaluejdbc:oracle:thin:@localhost:1521:orcl/value/propertypropertyname=usernamevaluetest/value/propertypropertyname=passwordvalue=test//beann客户端publicstaticvoidmain(String[]args)throwsException{ApplicationContextcontext=newClassPathXmlApplicationContext(newString[]{applicationContext-jdbc.xml});Apiapi=(Api)context.getBean(api);UserModelum=newUserModel();um.setUuid(test1);um.setName(test1);api.create(um);}真正高质量培训签订就业协议网址::460190900JdbcTemplate类-2《深入浅出学Spring3开发》——系列精品教程n如果是需要向里面传递参数的,就需要回调接口,如下:publicbooleancreate(UserModelum1){JdbcTemplatejt=newJdbcTemplate(ds);finalUserModelum=um1;classmyCallBackimplementsPreparedStatementCallback{publicObjectdoInPreparedStatement(PreparedStatementpstmt)throwsSQLException,DataAccessException{pstmt.setString(1,um.getUuid());pstmt.setString(2,um.getName());System.out.println(dddddddd);returnpstmt.executeUpdate();}}jt.execute(insertintotbl_user(uuid,name)values(?,?),newmyCallBack());returnfalse;}真正高质量培训签订就业协议网址::460190900JdbcTemplate类-3《深入浅出学Spring3开发》——系列精品教程真正高质量培训签订就业协议网址::460190900JdbcTemplate类-4《深入浅出学Spring2开发》——系列精品教程nJdbcTemplate类的基本实现方式:模板方法设计模式+回调方法,把变和不变的部分分离开来,不变化的部分,实现在模板里面,而变化的部分通过回调方法的方式,由外部传入。nJdbcTemplate类的回调方法体系nNamedParameterJdbcTemplate类在SQL语句中支持使用命名参数,比较适合做查询,如果做更新,同样需要使用回调方法,如下:NamedParameterJdbcTemplatejt=newNamedParameterJdbcTemplate(ds);MapparamMap=newHashMap();paramMap.put(uuid,um.getUuid());Listlist=jt.queryForList(select*fromtbl_userwhereuuid=:uuid,paramMap);Iteratorit=list.iterator();while(it.hasNext()){Mapmap=(Map)it.next();System.out.println(uuid=+map.get(uuid)+,name=+map.get(name));}nNamedParameterJdbcTemplate类是线程安全的,该类的最佳使用方式不是每次操作的时候实例化一个新的NamedParameterJdbcTemplate,而是针对每个DataSource只配置一个NamedParameterJdbcTemplate实例真正高质量培训签订就业协议网址::460190900NamedParameterJdbcTemplate类-1《深入浅出学Spring3开发》——系列精品教程nNamedParameterJdbcTemplate也可以自己做mapper,如下:NamedParameterJdbcTemplatejt=newNamedParameterJdbcTemplate(ds);MapparamMap=newHa
本文标题:Spring3 DAO和事务详解
链接地址:https://www.777doc.com/doc-6340382 .html