Ibatis开发实例.doc

上传人:啊飒飒 文档编号:11504075 上传时间:2021-08-10 格式:DOC 页数:34 大小:141KB
返回 下载 相关 举报
Ibatis开发实例.doc_第1页
第1页 / 共34页
Ibatis开发实例.doc_第2页
第2页 / 共34页
Ibatis开发实例.doc_第3页
第3页 / 共34页
Ibatis开发实例.doc_第4页
第4页 / 共34页
Ibatis开发实例.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《Ibatis开发实例.doc》由会员分享,可在线阅读,更多相关《Ibatis开发实例.doc(34页珍藏版)》请在三一文库上搜索。

1、Spring宠物店非常典型的展现了Spring和IBatis的整合,下文将围绕宠物店展开介绍。首先来看宠物店中的一个领域对象(它是一个标准的JavaBean)和它的映射文件,如代码10.1310.14所示。代码10.13 Product.javapublic class Product implements Serializable private String productId; private String categoryId; private String name; private String description; 省略getter/setter.代码10.14 Produc

2、t.xml . . select productid, name, descn, category from product where productid = #value# select productid, name, descn, category from product where category = #value# .10.3.2 衔接IBatis配置和DAO实现接着给出IBatis的基本配置文件,如代码10.15所示。代码10.15 sql-map-config.xml . .在宠物店中,该文件仅包含了所有领域对象的映射文件,而挪走了关于IBatis的事务和数据源配置(即IB

3、atis配置文件中的transactionManager元素和它的子元素dataSource)。注意:在稍后将要给出的Spring配置文件中接手了这些配置,这是一个整合点。在宠物店中,持久和数据访问都是通过DAO来实现的。对于Product,存在一个与其对应的SqlMapProductDao,如代码10.16所示。代码10.16 SqlMapProductDao.javapackage org.springframework.samples.jpetstore.dao.ibatis;import java.util.ArrayList;import java.util.List;import

4、java.util.StringTokenizer;import org.springframework.dao.DataAccessException;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;import org.springframework.samples.jpetstore.dao.ProductDao;import org.springframework.samples.jpetstore.domain.Product;public class SqlMapProductDao exte

5、nds SqlMapClientDaoSupport implements ProductDao public List getProductListByCategory(String categoryId) throws DataAccessException return getSqlMapClientTemplate().queryForList(getProductListByCategory,categoryId); public Product getProduct(String productId) throws DataAccessException return (Produ

6、ct) getSqlMapClientTemplate().queryForObject(getProduct, productId); .上述代码中出现了Spring提供的IBatis DAO支持类和获取SqlMapClientTemplate的父类模板方法,这和JdbcDaoSupport及JdbcTemplate的使用具有一致的概念。并且,这些操作都统一的抛出Spring的通用数据访问异常DataAccessException。注意:在早期的IBatis1.3.x版本中Dao支持类和模板类分别被命名为SqlMapDaoSupport和SqlMapTemplate,在使用时不要混淆。10.

7、3.3 关键整合点:Spring配置文件有了以上的DAO组件后,来看一下Spring的配置,这是一个关键的整合点,如代码10.17所示。代码10.17 dataAccessContext-local.xml . .可以发现,Spring在上述文件中分别配置了数据源和事务管理的策略,其中挪去了原先在IBatis文件中的配置。说明:这样做的好处是可以通过Spring IoC容器统一的管理资源,在稍后还可以看到,Spring提供的声明性事务管理就是借助于统一的数据源和事务管理配置。SqlMapClientFactoryBean又是一个工厂bean,它暴露了两个关键属性用于注射IBatis配置文件和相

8、关的数据源。在工厂内部,通过读取IBatis配置文件,Spring会创建出IBatis的核心组件SqlMapClient,并向相关的DAO进行注射。SqlMapProductDao继承了SqlMapClientDaoSupport,后者暴露出一个sqlMapClient属性,用于接受Spring的注射。SqlMapClientDaoSupport会对其中封装的SqlMapClientTemplate做相应的设置,所以DAO子类便可在取用SqlMapClientTemplate时正常地工作了。10.3.4 添加声明式事务管理以上的IBatis DAO可以很自方便地被注射到相应的业务对象,并参与到

9、Spring提供的声明性事务中,配置如代码10.18所示。代码10.18 applicationContext.xml . WEB-INF/jdbc.properties . PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly . . 至此就基本完成了Spring IoC和IBatis的整合了,当然也可以通过编程的方式来使用Spring所提供的模板和支持类。本文将以一个实际例子来讲解整合iBATIS和Spring在WEB开发中的应用。在例子中,将应用DAO,FACADE这些常用的设计模式。 1、需求说明

10、假定我们要实现一个用户注册和登录的需求。注册时将用户信息保存到数据库,登录时使用注册的信息进行校验。2、数据库设计我们建2个表,一个存放基本的用户信息(T_USERS),一个放附加的信息(T_USER_INFO)。这2个表是1对1的关系,其实可以只建一个表,但在实际的开发中,我们常常会把它们拆分,把常用的信息放到主表中,不常用的放到辅表中,这样可以提升性能。本文使用的数据库是ORACLE,表结构如下:T_USERS 用户信息主表字段名字段说明字段类型userid用户在系统中的流水号,为PRIMARY KEYNUMBER(6,0) NOT NULLualias用户别名,在登录时输入的名字VARC

11、HAR2(20) NOT NULLpassword密码VARCHAR2(30) NULLrealname真实姓名VARCHAR2(20) NULLemailemailVARCHAR2(30) NOT NULLusertypeid用户类型CHAR(2) NOT NULLSQLCREATE TABLE T_USERS (userid NUMBER(6,0) NOT NULL,usertypeid CHAR(2) NOT NULL,ualias VARCHAR2(20) NOT NULL,password VARCHAR2(30) NULL,email VARCHAR2(30) NOT NULL,r

12、ealname VARCHAR2(20) NULL);CREATE UNIQUE INDEX XAK1T_USERS ON T_USERS( ualias ASC );CREATE UNIQUE INDEX XAK2T_USERS ON T_USERS( email ASC );ALTER TABLE T_USERS ADD ( PRIMARY KEY (userid) ) ;T_USER_INFO 用户信息辅表字段名字段说明字段类型userid用户在系统中的流水号为KEYNUMBER(6,0) NOT NULLregdate注册日期DATE NULLlastlogdate最近一次登录日期DA

13、TE NULLlogtimes登录次数NUMBER(6) NULLSQLCREATE TABLE T_USER_INFO (userid NUMBER(6,0) NOT NULL,regdate DATE NULL,lastlogdate DATE NULL,logtimes NUMBER(6) NULL);ALTER TABLE T_USER_INFO ADD ( PRIMARY KEY (userid) ) ;ALTER TABLE T_USER_INFO ADD ( FOREIGN KEY (userid) REFERENCES T_USERS ) ;SEQUENCE Sequence_

14、userid 用户流水号产生SQLCREATE SEQUENCE Sequence_userid INCREMENT BY 1 START WITH 1 MAXVALUE 999999MINVALUE 1NOCYCLENOORDER;3、构建源代码包目录com(1)|-wysm(2)|-netstar(3) |-domain(4) (POJO) |-persistence(4) (持久化层) |-iface(5) (DAO 接口) |-sqlmapdao(5) (iBATIS DAO实现) |-sql(6) (iBATIS sqlmap定义文件) |-service(4) (FACADE接口)

15、 |-ibatis(5) (FACADE iBATIS实现) |-test(4)(JAVA环境测试)4、iBATIS sqlmap定义star.persistence.sqlmapdao.sql/sql-map-config.xml 数据库连接属性文件 star.properties.database.properties# Database Connectivity Properties#driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:localhost:1521:ORA92SERusername=netstarpassw

16、ord=star.persistence.sqlmapdao.sql/Sequence.xml select sequence_userid.nextval from dual star.persistence.sqlmapdao.sql/User.xmlSELECTUSERID as userId,UALIAS as userAlias,PASSWORD as password,REALNAME as realName,EMAIL as email,USERTYPEID as userTypeIdFROM T_USERSWHERE UALIAS = #userAlias#SELECTUSER

17、ID as userId,UALIAS as userAlias,PASSWORD as password,REALNAME as realName,EMAIL as email,USERTYPEID as userTypeIdFROM T_USERSWHERE UALIAS = #userAlias# ANDPASSWORD = #password#SELECTUSERID as userId,UALIAS as userAlias,PASSWORD as password,REALNAME as realName,EMAIL as email,USERTYPEID as userTypeI

18、dFROM T_USERSWHERE EMAIL=#email#UPDATE T_USERS SETUALIAS= #userAlias#,PASSWORD=#password#,REALNAME=#realName#,EMAIL = #email#,USERTYPEID = #userTypeId#WHERE USERID = #userId#INSERT INTO T_USERS(USERID,UALIAS,PASSWORD,REALNAME,EMAIL,USERTYPEID)VALUES(#userId#, #userAlias#,#password#,#realName#, #emai

19、l#, #userTypeId#)DELETE FROM T_USERSWHERE USERID=#userId#select count(*) FROM T_USERSWHERE USERID=#userId#star.persistence.sqlmapdao.sql/UserInfo.xmlSELECTUSERID,REGDATE,LASTLOGDATE,LOGTIMESFROM T_USER_INFOWHERE USERID = #userId#UPDATE T_USER_INFO SETREGDATE= #regDate#,LASTLOGDATE=#lastLogDate#,LOGT

20、IMES=#logTimes#WHERE USERID = #userId#INSERT INTO T_USER_INFO(USERID,REGDATE,LASTLOGDATE,LOGTIMES)VALUES(#userId#, #regDate#,#lastLogDate#,#logTimes#)DELETE FROM T_USER_INFOWHERE USERID=#userId#5、POJO定义 star.domain.User.javapackage star.domain; import java.io.*; public class User implements Serializ

21、able private Integer userId; private String userAlias; private String password; private String realName; private String email; private String userTypeId; public User() public User(Integer userId) this.userId=userId; public User(String userAlias) this.userAlias=userAlias; public User(String userAlias

22、,String password) this.userAlias=userAlias; this.password=password; public void setUserId(Integer userId) this.userId = userId; public void setUserAlias(String userAlias) this.userAlias = userAlias; public void setPassword(String password) this.password = password; public void setUserTypeId(String u

23、serTypeId) this.userTypeId = userTypeId; public void setRealName(String realName) this.realName = realName; public void setEmail(String email) this.email = email; public Integer getUserId() return userId; public String getUserAlias() return userAlias; public String getPassword() return password; pub

24、lic String getUserTypeId() return userTypeId; public String getRealName() return realName; public String getEmail() return email; star.domain.UserInfo.javapackage star.domain; import java.util.*; import java.io.Serializable; public class UserInfo implements Serializable private Integer userId; priva

25、te Date regDate; private Date lastLogDate; private Integer logTimes; public UserInfo() public void setUserId(Integer userId) this.userId = userId; public void setRegDate(Date regDate) this.regDate = regDate; public void setLastLogDate(Date lastLogDate) this.lastLogDate = lastLogDate; public void setLogTimes(Integer logTimes) this.logTimes = logTimes; public Integer getUserId() return userId; public Date getRegDate() return regDate; public Date getLastLogDate() return lastLogDate; public Integer getLogTimes() return logTimes

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1