posts - 167,  comments - 30,  trackbacks - 0

          根據(jù)官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發(fā)工作就已經(jīng)完成了,所以Spring3中還是沒有對Mybatis3的支持。因此由Mybatis社區(qū)自己開發(fā)了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟Spring的用法做一個簡單的介紹。

          MapperFactoryBean

                首先,我們需要從Mybatis官網(wǎng)上下載Mybatis-Spring的jar包添加到我們項目的類路徑下,當(dāng)然也需要添加Mybatis的相關(guān)jar包和Spring的相關(guān)jar包。我們知道在Mybatis的所有操作都是基于一個SqlSession的,而SqlSession是由SqlSessionFactory來產(chǎn)生的,SqlSessionFactory又是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的時候,我們也需要SqlSession,而且這個SqlSession是內(nèi)嵌在程序中的,一般不需要我們直接訪問。SqlSession也是由SqlSessionFactory來產(chǎn)生的,但是Mybatis-Spring給我們封裝了一個SqlSessionFactoryBean,在這個bean里面還是通過SqlSessionFactoryBuilder來建立對應(yīng)的SqlSessionFactory,進(jìn)而獲取到對應(yīng)的SqlSession。通過SqlSessionFactoryBean我們可以通過對其指定一些屬性來提供Mybatis的一些配置信息。所以接下來我們需要在Spring的applicationContext配置文件中定義一個SqlSessionFactoryBean。

          Xml代碼  收藏代碼
          1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  

          2.       <property name="dataSource" ref="dataSource" />  

          3.       <property name="mapperLocations"  

          4.              value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" />  

          5.       <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" />  

          6. bean>  


                在定義SqlSessionFactoryBean的時候,dataSource屬性是必須指定的,它表示用于連接數(shù)據(jù)庫的數(shù)據(jù)源。當(dāng)然,我們也可以指定一些其他的屬性,下面簡單列舉幾個:

          • mapperLocations:它表示我們的Mapper文件存放的位置,當(dāng)我們的Mapper文件跟對應(yīng)的Mapper接口處于同一位置的時候可以不用指定該屬性的值。

          • configLocation:用于指定Mybatis的配置文件位置。如果指定了該屬性,那么會以該配置文件的內(nèi)容作為配置信息構(gòu)建對應(yīng)的SqlSessionFactoryBuilder,但是后續(xù)屬性指定的內(nèi)容會覆蓋該配置文件里面指定的對應(yīng)內(nèi)容。

          • typeAliasesPackage:它一般對應(yīng)我們的實體類所在的包,這個時候會自動取對應(yīng)包中不包括包名的簡單類名作為包括包名的別名。多個package之間可以用逗號或者分號等來進(jìn)行分隔。

          • typeAliases:數(shù)組類型,用來指定別名的。指定了這個屬性后,Mybatis會把這個類型的短名稱作為這個類型的別名,前提是該類上沒有標(biāo)注@Alias注解,否則將使用該注解對應(yīng)的值作為此種類型的別名。

          Xml代碼  收藏代碼
          1. <property name="typeAliases">  

          2.    <array>  

          3.        <value>com.tiantian.mybatis.model.Blogvalue>  

          4.        <value>com.tiantian.mybatis.model.Commentvalue>  

          5.    array>  

          6. property>  


          • plugins:數(shù)組類型,用來指定Mybatis的Interceptor。

          • typeHandlersPackage:用來指定TypeHandler所在的包,如果指定了該屬性,SqlSessionFactoryBean會自動把該包下面的類注冊為對應(yīng)的TypeHandler。多個package之間可以用逗號或者分號等來進(jìn)行分隔。

          • typeHandlers:數(shù)組類型,表示TypeHandler。

                接下來就是在Spring的applicationContext文件中定義我們想要的Mapper對象對應(yīng)的MapperFactoryBean了。通過MapperFactoryBean可以獲取到我們想要的Mapper對象。MapperFactoryBean實現(xiàn)了Spring的FactoryBean接口,所以MapperFactoryBean是通過FactoryBean接口中定義的getObject方法來獲取對應(yīng)的Mapper對象的。在定義一個MapperFactoryBean的時候有兩個屬性需要我們注入,一個是Mybatis-Spring用來生成實現(xiàn)了SqlSession接口的SqlSessionTemplate對象的sqlSessionFactory;另一個就是我們所要返回的對應(yīng)的Mapper接口了。

                定義好相應(yīng)Mapper接口對應(yīng)的MapperFactoryBean之后,我們就可以把我們對應(yīng)的Mapper接口注入到由Spring管理的bean對象中了,比如Service bean對象。這樣當(dāng)我們需要使用到相應(yīng)的Mapper接口時,MapperFactoryBean會從它的getObject方法中獲取對應(yīng)的Mapper接口,而getObject內(nèi)部還是通過我們注入的屬性調(diào)用SqlSession接口的getMapper(Mapper接口)方法來返回對應(yīng)的Mapper接口的。這樣就通過把SqlSessionFactory和相應(yīng)的Mapper接口交給Spring管理實現(xiàn)了Mybatis跟Spring的整合。

          Spring的applicationContext.xml配置文件:

          Xml代碼  收藏代碼
          1. xml version="1.0" encoding="UTF-8"?>  

          2. <beans xmlns="http://www.springframework.org/schema/beans"  

          3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"  

          4.    xmlns:mvc="http://www.springframework.org/schema/mvc"  

          5.    xsi:schemaLocation="http://www.springframework.org/schema/beans  

          6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

          7.     http://www.springframework.org/schema/context  

          8.   http://www.springframework.org/schema/context/spring-context-3.0.xsd  

          9.     http://www.springframework.org/schema/mvc  

          10.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  

          11.    <context:component-scan base-package="com.tiantian.mybatis"/>  

          12.    <context:property-placeholder location="classpath:config/jdbc.properties"/>  

          13.    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  

          14.       destroy-method="close">  

          15.       <property name="driverClassName" value="${jdbc.driver}" />  

          16.       <property name="url" value="${jdbc.url}" />  

          17.       <property name="username" value="${jdbc.username}" />  

          18.       <property name="password" value="${jdbc.password}" />  

          19.    bean>  

          20.  

          21.    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  

          22.       <property name="dataSource" ref="dataSource" />  

          23.       <property name="mapperLocations"value="classpath:com/tiantian/mybatis/mapper/*.xml"/>  

          24.       <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />  

          25.    bean>  

          26.  

          27.    <bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  

          28.       <property name="mapperInterface"  

          29.           value="com.tiantian.mybatis.mapper.BlogMapper" />  

          30.       <property name="sqlSessionFactory" ref="sqlSessionFactory" />  

          31.    bean>  

          32.  

          33. beans>  


          BlogMapper.xml文件

          Xml代碼  收藏代碼
          1. xml version="1.0" encoding="UTF-8" ?>  

          2.  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  

          3.  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  

          4. <mapper namespace="com.tiantian.mybatis.mapper.BlogMapper">  

          5.  

          6.    <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true"keyProperty="id">  

          7.        insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})  

          8.    insert>  

          9.  

          10.    <select id="selectBlog" parameterType="int" resultMap="BlogResult">  

          11.       select * from t_blog where id = #{id}  

          12.    select>  

          13.  

          14.    <update id="updateBlog" parameterType="Blog">  

          15.        update t_blog set title = #{title},content = #{content},owner = #{owner} whereid = #{id}  

          16.    update>  

          17.  

          18.    <select id="selectAll" resultType="Blog">  

          19.        select * from t_blog  

          20.    select>  

          21.  

          22.    <delete id="deleteBlog" parameterType="int">  

          23.       delete from t_blog where id = #{id}  

          24.    delete>  

          25.    

          26. mapper>  


          BlogMapper.java

          Java代碼  收藏代碼
          1. package com.tiantian.mybatis.mapper;  

          2.  

          3. import java.util.List;  

          4. import com.tiantian.mybatis.model.Blog;  

          5.  

          6. publicinterface BlogMapper {  

          7.  

          8.    public Blog selectBlog(int id);  

          9.    

          10.    publicvoid insertBlog(Blog blog);  

          11.    

          12.    publicvoid updateBlog(Blog blog);  

          13.    

          14.    publicvoid deleteBlog(int id);  

          15.    

          16.    public List selectAll();  

          17.    

          18. }  


          BlogServiceImpl.java

          Java代碼  收藏代碼
          1. package com.tiantian.mybatis.service.impl;  

          2.  

          3. import java.util.List;  

          4. import javax.annotation.Resource;  

          5. import org.springframework.stereotype.Service;  

          6. import com.tiantian.mybatis.mapper.BlogMapper;  

          7. import com.tiantian.mybatis.model.Blog;  

          8. import com.tiantian.mybatis.service.BlogService;  

          9.  

          10. @Service  

          11. publicclass BlogServiceImpl implements BlogService {  

          12.  

          13.    private BlogMapper blogMapper;  

          14.    

          15.    publicvoid deleteBlog(int id) {  

          16.       blogMapper.deleteBlog(id);  

          17.    }  

          18.  

          19.    public Blog find(int id) {  

          20.       returnblogMapper.selectBlog(id);  

          21.    }  

          22.  

          23.    public List find() {  

          24.       returnblogMapper.selectAll();  

          25.    }  

          26.  

          27.    publicvoid insertBlog(Blog blog) {  

          28.       blogMapper.insertBlog(blog);  

          29.    }  

          30.  

          31.    publicvoid updateBlog(Blog blog) {  

          32.       blogMapper.updateBlog(blog);  

          33.    }  

          34.  

          35.    public BlogMapper getBlogMapper() {  

          36.       returnblogMapper;  

          37.    }  

          38.  

          39.    @Resource  

          40.    publicvoid setBlogMapper(BlogMapper blogMapper) {  

          41.       this.blogMapper = blogMapper;  

          42.    }  

          43.  

          44. }  


          MapperScannerConfigurer

                利用上面的方法進(jìn)行整合的時候,我們有一個Mapper就需要定義一個對應(yīng)的MapperFactoryBean,當(dāng)我們的Mapper比較少的時候,這樣做也還可以,但是當(dāng)我們的Mapper相當(dāng)多時我們再這樣定義一個個Mapper對應(yīng)的MapperFactoryBean就顯得速度比較慢了。為此Mybatis-Spring為我們提供了一個叫做MapperScannerConfigurer的類,通過這個類Mybatis-Spring會自動為我們注冊Mapper對應(yīng)的MapperFactoryBean對象。

                如果我們需要使用MapperScannerConfigurer來幫我們自動掃描和注冊Mapper接口的話我們需要在Spring的applicationContext配置文件中定義一個MapperScannerConfigurer對應(yīng)的bean。對于MapperScannerConfigurer而言有一個屬性是我們必須指定的,那就是basePackage。basePackage是用來指定Mapper接口文件所在的基包的,在這個基包或其所有子包下面的Mapper接口都將被搜索到。多個基包之間可以使用逗號或者分號進(jìn)行分隔。最簡單的MapperScannerConfigurer定義就是只指定一個basePackage屬性,如:

          Xml代碼  收藏代碼
          1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

          2.   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  

          3. bean>  


                這樣MapperScannerConfigurer就會掃描指定基包下面的所有接口,并把它們注冊為一個個MapperFactoryBean對象。當(dāng)使用MapperScannerConfigurer加basePackage屬性的時候,我們上面例子的applicationContext配置文件將變?yōu)檫@樣:

          Xml代碼  收藏代碼
          1. xml version="1.0" encoding="UTF-8"?>  

          2. <beans xmlns="http://www.springframework.org/schema/beans"  

          3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"  

          4.    xmlns:mvc="http://www.springframework.org/schema/mvc"  

          5.    xsi:schemaLocation="http://www.springframework.org/schema/beans  

          6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

          7.     http://www.springframework.org/schema/context  

          8.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  

          9.     http://www.springframework.org/schema/mvc  

          10.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  

          11.  

          12.    <context:component-scan base-package="com.tiantian.mybatis" />  

          13.    <context:property-placeholder location="classpath:config/jdbc.properties" />  

          14.    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  

          15.       destroy-method="close">  

          16.       <property name="driverClassName" value="${jdbc.driver}" />  

          17.       <property name="url" value="${jdbc.url}" />  

          18.       <property name="username" value="${jdbc.username}" />  

          19.       <property name="password" value="${jdbc.password}" />  

          20.    bean>  

          21.    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  

          22.       <property name="dataSource" ref="dataSource" />  

          23.       <property name="mapperLocations"value="classpath:com/tiantian/mybatis/mapper/*.xml" />  

          24.       <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />  

          25.    bean>  

          26.    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

          27.       <property name="basePackage" value="com.tiantian.mybatis.mapper" />  

          28.    bean>  

          29. beans>  

          有時候我們指定的基包下面的并不全是我們定義的Mapper接口,為此MapperScannerConfigurer還為我們提供了另外兩個可以縮小搜索和注冊范圍的屬性。一個是annotationClass,另一個是markerInterface。

          • annotationClass:當(dāng)指定了annotationClass的時候,MapperScannerConfigurer將只注冊使用了annotationClass注解標(biāo)記的接口。

          • markerInterface:markerInterface是用于指定一個接口的,當(dāng)指定了markerInterface之后,MapperScannerConfigurer將只注冊繼承自markerInterface的接口。

                如果上述兩個屬性都指定了的話,那么MapperScannerConfigurer將取它們的并集,而不是交集。即使用了annotationClass進(jìn)行標(biāo)記或者繼承自markerInterface的接口都將被注冊為一個MapperFactoryBean。

          現(xiàn)在假設(shè)我們的Mapper接口都繼承了一個SuperMapper接口,那么我們就可以這樣來定義我們的MapperScannerConfigurer。

          Xml代碼  收藏代碼
          1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

          2.   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  

          3.   <property name="markerInterface" value="com.tiantian.mybatis.mapper.SuperMapper"/>  

          4. bean>  


                如果是都使用了注解MybatisMapper標(biāo)記的話,那么我們就可以這樣來定義我們的MapperScannerConfigurer。

          Xml代碼  收藏代碼
          1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

          2.   <property name="basePackage" value="com.tiantian.mybatis.mapper" />  

          3.   <property name="annotationClass"value="com.tiantian.mybatis.annotation.MybatisMapper"/>  

          4. bean>  


                除了用于縮小注冊Mapper接口范圍的屬性之外,我們還可以指定一些其他屬性,如:

          • sqlSessionFactory:這個屬性已經(jīng)廢棄。當(dāng)我們使用了多個數(shù)據(jù)源的時候我們就需要通過sqlSessionFactory來指定在注冊MapperFactoryBean的時候需要使用的SqlSessionFactory,因為在沒有指定sqlSessionFactory的時候,會以Autowired的方式自動注入一個。換言之當(dāng)我們只使用一個數(shù)據(jù)源的時候,即只定義了一個SqlSessionFactory的時候我們就可以不給MapperScannerConfigurer指定SqlSessionFactory。

          • sqlSessionFactoryBeanName:它的功能跟sqlSessionFactory是一樣的,只是它指定的是定義好的SqlSessionFactory對應(yīng)的bean名稱。

          • sqlSessionTemplate:這個屬性已經(jīng)廢棄。它的功能也是相當(dāng)于sqlSessionFactory的,因為就像前面說的那樣,MapperFactoryBean最終還是使用的SqlSession的getMapper方法取的對應(yīng)的Mapper對象。當(dāng)定義有多個SqlSessionTemplate的時候才需要指定它。對于一個MapperFactoryBean來說SqlSessionFactory和SqlSessionTemplate只需要其中一個就可以了,當(dāng)兩者都指定了的時候,SqlSessionFactory會被忽略。

          • sqlSessionTemplateBeanName:指定需要使用的sqlSessionTemplate對應(yīng)的bean名稱。

          注意:由于使用sqlSessionFactory和sqlSessionTemplate屬性時會使一些內(nèi)容在PropertyPlaceholderConfigurer之前加載,導(dǎo)致在配置文件中使用到的外部屬性信息無法被及時替換而出錯,因此官方現(xiàn)在新的Mybatis-Spring中已經(jīng)把sqlSessionFactory和sqlSessionTemplate屬性廢棄了,推薦大家使用sqlSessionFactoryBeanName屬性和sqlSessionTemplateBeanName屬性。

          Xml代碼  收藏代碼
          1. xml version="1.0" encoding="UTF-8"?>  

          2. <beans xmlns="http://www.springframework.org/schema/beans"  

          3.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"  

          4.    xmlns:mvc="http://www.springframework.org/schema/mvc"  

          5.    xmlns:mybatis="http://www.mybatis.org/schema/mybatis"  

          6.    xsi:schemaLocation="http://www.springframework.org/schema/beans  

          7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  

          8.     http://www.springframework.org/schema/context  

          9.     http://www.springframework.org/schema/context/spring-context-3.0.xsd  

          10.     http://www.mybatis.org/schema/mybatis  

          11.     http://www.mybatis.org/schema/mybatis/mybatis-spring.xsd  

          12.     http://www.springframework.org/schema/mvc  

          13.     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">  

          14.  

          15.    <context:component-scan base-package="com.tiantian.mybatis" />  

          16.    <context:property-placeholder location="classpath:config/jdbc.properties" />  

          17.    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  

          18.       destroy-method="close">  

          19.       <property name="driverClassName" value="${jdbc.driver}" />  

          20.       <property name="url" value="${jdbc.url}" />  

          21.       <property name="username" value="${jdbc.username}" />  

          22.       <property name="password" value="${jdbc.password}" />  

          23.    bean>  

          24.    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  

          25.       <property name="dataSource" ref="dataSource" />  

          26.       <property name="mapperLocations"value="classpath:com/tiantian/mybatis/mapper/*.xml" />  

          27.       <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />  

          28.    bean>  

          29.    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  

          30.       <property name="basePackage" value="com.tiantian.mybatis.mapper" />  

          31.       <property name="markerInterface"value="com.tiantian.mybatis.mapper.SuperMapper"/>  

          32.       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>  

          33.    bean>  

          34. beans>  


          SqlSessionTemplate

                除了上述整合之后直接使用Mapper接口之外,Mybatis-Spring還為我們提供了一種直接使用SqlSession的方式。Mybatis-Spring為我們提供了一個實現(xiàn)了SqlSession接口的SqlSessionTemplate類,它是線程安全的,可以被多個Dao同時使用。同時它還跟Spring的事務(wù)進(jìn)行了關(guān)聯(lián),確保當(dāng)前被使用的SqlSession是一個已經(jīng)和Spring的事務(wù)進(jìn)行綁定了的。而且它還可以自己管理Session的提交和關(guān)閉。當(dāng)使用了Spring的事務(wù)管理機(jī)制后,SqlSession還可以跟著Spring的事務(wù)一起提交和回滾。

                使用SqlSessionTemplate時我們可以在Spring的applicationContext配置文件中如下定義:

             "sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

                "0" ref="sqlSessionFactory" />

             

                這樣我們就可以通過Spring的依賴注入在Dao中直接使用SqlSessionTemplate來編程了,這個時候我們的Dao可能是這個樣子:

          Java代碼  收藏代碼
          1. package com.tiantian.mybatis.dao;  

          2.  

          3. import java.util.List;  

          4. import javax.annotation.Resource;  

          5. import org.mybatis.spring.SqlSessionTemplate;  

          6. import org.springframework.stereotype.Repository;  

          7. import com.tiantian.mybatis.model.Blog;  

          8.  

          9. @Repository  

          10. publicclass BlogDaoImpl implements BlogDao {  

          11.  

          12.    private SqlSessionTemplate sqlSessionTemplate;  

          13.  

          14.    publicvoid deleteBlog(int id) {  

          15.       sqlSessionTemplate.delete("com.tiantian.mybatis.mapper.BlogMapper.deleteBlog", id);  

          16.    }  

          17.  

          18.    public Blog find(int id) {  

          19.      returnsqlSessionTemplate.selectOne("com.tiantian.mybatis.mapper.BlogMapper.selectBlog", id);  

          20.    }  

          21.  

          22.    public List find() {  

          23.       returnthis.sqlSessionTemplate.selectList("com.tiantian.mybatis.mapper.BlogMapper.selectAll");  

          24.    }  

          25.  

          26.    publicvoid insertBlog(Blog blog) {  

          27.      this.sqlSessionTemplate.insert("com.tiantian.mybatis.mapper.BlogMapper.insertBlog", blog);  

          28.    }  

          29.  

          30.    publicvoid updateBlog(Blog blog) {  

          31.      this.sqlSessionTemplate.update("com.tiantian.mybatis.mapper.BlogMapper.updateBlog", blog);  

          32.    }  

          33.    

          34.    public SqlSessionTemplate getSqlSessionTemplate() {  

          35.       returnsqlSessionTemplate;  

          36.    }  

          37.    

          38.    @Resource  

          39.    publicvoid setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {  

          40.       this.sqlSessionTemplate = sqlSessionTemplate;  

          41.    }  

          42.  

          43. }  

          注:

               本文是基于Mybatis3.2.1、Mybatis-Spring1.1.0和Spring3.1寫的。
          本文轉(zhuǎn)自:http://haoshenqi.blogchina.com/1533893.html



          posted on 2013-07-10 18:07 David1228 閱讀(21434) 評論(2)  編輯  收藏 所屬分類: Hibernate/ibatisSpring

          FeedBack:
          # re: Mybatis3.2.1整合Spring3.1
          2014-09-19 14:17 | deaec
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
          <property name="basePackage" value="com.arcln.mvndemo.mapper" />
          <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
          </bean>

          這樣配置了 還是讀不到 ${}  回復(fù)  更多評論
            
          # re: Mybatis3.2.1整合Spring3.1
          2014-11-17 14:44 | finvid@163.com
          BlogService 怎么寫  回復(fù)  更多評論
            

          <2013年7月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章檔案

          新聞分類

          新聞檔案

          相冊

          收藏夾

          Java

          Linux知識相關(guān)

          Spring相關(guān)

          云計算/Linux/虛擬化技術(shù)/

          友情博客

          多線程并發(fā)編程

          開源技術(shù)

          持久層技術(shù)相關(guān)

          搜索

          •  

          積分與排名

          • 積分 - 359229
          • 排名 - 154

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 闽清县| 清丰县| 伊春市| 措勤县| 台北县| 雷波县| 阿鲁科尔沁旗| 南雄市| 卓资县| 阳东县| 石家庄市| 遂宁市| 泽普县| 佳木斯市| 长宁区| 淅川县| 桂阳县| 古丈县| 鄂州市| 岳阳市| 桃源县| 古田县| 平山县| 临漳县| 拉萨市| 湖南省| 上饶县| 通渭县| 尉氏县| 阿荣旗| 巫山县| 彩票| 寻乌县| 台江县| 苏尼特右旗| 南充市| 吉木乃县| 诏安县| 新密市| 温泉县| 阳原县|