本文主要介紹Spring與Mybatis三種常用整合方法,所需的整合架包是mybatis-spring.jar,可透過連結
http://code.google.com/p/mybatis/下載到。
1.採用資料映射器(MapperFactoryBean)的方式,不用寫mybatis映射文件,採用註解方式提供對應的sql語句和輸入參數。
(1)Spring設定檔:
<!-- 引入jdbc設定檔--> <context:property-placeholder location="jdbc.properties"/> <!--建立jdbc資料來源--> <bean id="dataSource" destroy-method="close "> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="initialSize" value="${initialSize}"/> < property name="maxActive" value="${maxActive}"/> <property name="maxIdle" value="${maxIdle}"/> <property name="minIdle" value="${minIdle}"/> </bean> <!-- 建立SqlSessionFactory,同時指定資料來源--> <bean id="sqlSessionFactory"> <property name="dataSource" ref="dataSource" /> </bean> <!--建立資料映射器,資料映射器必須為介面--> <bean id="userMapper"> <property name="mapperInterface" value="com.xxt.ibatis.dbcp.dao.UserMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <bean id="userDaoImpl2"> <property name="userMapper" ref="userMapper"/> </bean>(2)資料映射器UserMapper,程式碼如下:
public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{userId}") User getUser(@Param("userId") long id); }(3)dao介面類別UserDao,程式碼如下:
public interface UserDao { public User getUserById(User user); }(4)dao實作類別UserDaoImpl2,,程式碼如下:
public class UserDaoImpl2 implements UserDao { private UserMapper userMapper; public void setUserMapper(UserMapper userMapper) { this.userMapper = userMapper; } public User getUserById(User user) { return useruserMapper.2、採用介面org.apache.ibatis.session.SqlSession的實作類別org.mybatis.spring.SqlSessionTemplate。
mybatis中, sessionFactory可由SqlSessionFactoryBuilder.來建立。
MyBatis-Spring 中,使用了SqlSessionFactoryBean來取代。
SqlSessionFactoryBean有一個必須屬性dataSource,另外還有一個通用屬性configLocation(用來指定mybatis的xml設定檔路徑)。
(1)Spring設定檔:
<!-- 建立SqlSessionFactory,同時指定資料來源-->
<bean id="sqlSessionFactory">
<property name="dataSource" ref="dataSource" />
<!-- 指定sqlMapConfig總配置文件,訂製的environment在spring容器中不在生效-->
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
<!--指定實體類別映射文件,可以指定同時指定某一包以及子包下面的所有配置文件,mapperLocations和configLocation有一個即可,當需要為實體類指定別名時,可指定configLocation屬性,然後在mybatis總設定檔中採用mapper引入實體類別映射檔-->
<!- - <property name="mapperLocations" value="classpath*:com/xxt/ibatis/dbcp/**/*.xml"/> -->
<bean>
(2)mybatis總設定檔sqlMapConfig.xml:
<configuration> <typeAliases> <typeAlias type="com.xxt.ibatis.dbcp.domain.User" alias="User" /> </typeAliases> <mappers> <mapper resource="com/xxt/ibatis/dbcp/ domain/user.map.xml" /> </mappers> </configuration>
(3)實體類別映射檔user.map.xml:
<mapper namespace="com.xxt.ibatis.dbcp.domain.User"> <resultMap type="User" id="userMap"> <id property="id" column="id" /> <result property=" name" column="name" /> <result property="password" column="password" /> <result property="createTime" column="createtime" /> </resultMap> <select id="getUser" parameterType="User" resultMap="userMap"> select * from user where id = #{id} </select> <mapper/>(4)dao層介面實作類別UserDaoImpl:
Java程式碼
public class UserDaoImpl implements UserDao { public SqlSessionTemplate sqlSession; public User getUserById(User user) { return (User)sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.sqlget SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } }3.採用抽象類別org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
(1)spring設定檔:
Java程式碼
<bean id="sqlSessionFactory"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> <!-- <property name="mapperLocations " value="classpath*:com/xxt/ibatis/dbcp/domain/user.map.xml"/ > --> </bean> <bean id="sqlSession" > <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="userDaoImpl3"> <!--注入SqlSessionTemplate實例--> <property name="sqlSessionTemplate " ref="sqlSession" /> <!--也可直接注入SqlSessionFactory實例,二者都指定時,SqlSessionFactory失效--> <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> --> </bean>
(2) dao層介面實作類別UserDaoImpl3:
Java程式碼
public class UserDaoImpl3 extends SqlSessionDaoSupport implements UserDao { public User getUserById(User user) { return (User) getSqlSession().selectOne("com.xxt.ibatis.dbcp.domain.User.User"