在Springside中使用ibatis

阅读更多
 

Springside 中在orm这一层提供了ibatis的实现,可惜在例子中没有demo具体的用法。所以在这里简单demo一下在springside中使用ibatis的方法,运行效果如下:

在Springside中使用ibatis_第1张图片

 

(可能有人注意到这个列表不是使用ss中默认集成的extremetable,呵呵,没错,我用的是fins提供的ecside控件,关于在ss中使用ecside另外文章介绍)

 

1.  创建新项目
关于从ss中创建一个项目,请参看sswiki wiki.springside.org.cn,记得选择控件的时候选择orm/ibatis

2.  POJO
一个简单的叫做Userpojo,只包含一个id和一个username

java 代码
  1. public class User {   
  2.   
  3.     private Integer id;   
  4.     private String username;   
  5.   
  6.         public Integer getId() {   
  7.         return id;   
  8.     }   
  9.   
  10.     public void setId(Integer id) {   
  11.         this.id = id;   
  12.     }   
  13.   
  14.     public String getUsername() {   
  15.         return username;   
  16.     }   
  17.   
  18.     public void setUsername(String username) {   
  19.         this.username = username;   
  20.     }   
  21. }

 

3Service

       一个继承自IBatisEntityDaoManager,已经具有了listsave…等方法:

java 代码
  1. public class UserManager extends IBatisEntityDao {   
  2. }   

 

4Web

       同样是一个继承自的Action类,也没什么好说的:

java 代码
  1. public class UserAction extends StrutsEntityAction {   
  2.     private UserManager userManager;   
  3.   
  4.     public void setUserManager(UserManager userManager) {   
  5.         this.userManager = userManager;   
  6.     }   
  7. }   

 

5.配置啊配置

       重头戏来了,下面介绍ibatis需要的配置文件,以及这几个文件之间的关系。

(1)       applicationContext-ibatis.xml

类似ss中演示hibernate时的配置文件dataAccessContext-hibernate.xml,配置数据源、sqlMapClient以及transactionManager

注意在sqlMapClient的配置中configLocation属性指明了SQL Map XML配置文件的位置信息,“SQL Map使用XML配置文件统一配置不同的属性,包括DataSource的详细配置信息,SQL Map和其他可选属性,如线程管理等。”(摘自《iBATIS SQL Maps开发指南》)。不过在本文中只配置了映射文件。

 

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2. >  
  3. <beans default-autowire="byName" default-lazy-init="true">  
  4.       
  5.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  6.         <property name="driverClassName" value="${jdbc.driverClassName}"/>  
  7.         <property name="url" value="${jdbc.url}"/>  
  8.         <property name="username" value="${jdbc.username}"/>  
  9.         <property name="password" value="${jdbc.password}"/>  
  10.     bean>  
  11.        
  12.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  13.         <property name="configLocation" value="/WEB-INF/sql-map.xml" />  
  14.         <property name="dataSource" ref="dataSource"/>     
  15.     bean>  
  16.        
  17.     <bean id="transactionManager"  
  18.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  19.         <property name="dataSource"><ref local="dataSource"/>property>  
  20.     bean>  
  21.        
  22. beans>  

 

(2)       sql-map.xml

正如在(1)中所说,本文件中只是说明了映射文件的位置,关于更多配置选项,请参考《iBATIS SQL Maps开发指南》。其中resource="ibatis/user.xml"中中的路径信息是相对classpath的。

xml 代码
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3. <sqlMapConfig>  
  4.     <sql-map resource="ibatis/user.xml" />  
  5. sqlMapConfig>  

 

(3)       user.xml

终于到了最后一个配置文件了,这个文件就相当于hibernate的映射文件了,如下所示:

xml 代码
  1. xml version="1.0" encoding="UTF-8" ?>  
  2. >  
  3.   
  4. <sqlMap namespace="user">  
  5. <resultMap id="result" class="com.gpcgd.model.User">  
  6.     <result property="id" column="id" columnIndex="1"/>  
  7.     <result property="username" column="username" columnIndex="2"/>  
  8. resultMap>  
  9.   
  10. <select id="com.gpcgd.model.User.select" resultMap="result">  
  11.     select t.id,t.username, from t_user t   
  12. select>  
  13. sqlMap>  

resultMap指明了数据库和对象之间的映射关系,至于下面这段,需要解释一下

xml 代码
  1. <select id="com.gpcgd.model.User.select" resultMap="result">  
  2.     select t.id,t.username, from t_user t   
  3. select>  

首先是这个id,对应了dao接口中的调用参数,而返回值resultMap的值(resultMap="result")又对应了对象-数据库映射的resultMapidresultMap id="result")。

关于这个id="com.gpcgd.model.User.select",有必要说明一下。

我们知道,ssAction类的list方法是调用Manager类的getAll()方法的。

/ss2/core/src/java/org/springside/core/dao/IBatisGenericDao.java的源码中我们可以看到:

java 代码
  1. /**  
  2.      * 获取全部对象  
  3.      */  
  4.     public  List getAll(Class entityClass) {   
  5.         return getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null);   
  6.     }   

 

其中entityClass.getName()=com.gpcgd.model.User”,而POSTFIX_SELECT=.select”。所以selectid要设置为:“com.gpcgd.model.User.select”。

不知道能不能对“com.gpcgd.model.User.select”这种写法进行简化,如果哪位知道,请留言指正,谢谢!

 

 

你可能感兴趣的:(iBATIS,SQL,XML,Bean,Hibernate)