MyBatis-Spring整合示例

今日公司新项目计划采用MyBatis与Spring3,网上搜索一圈,发现了MyBatis提供了一个支持Spring3容器的jar包,于是取下用之,大概的写了一个小例子,供大家参考,不足之处,还望指出。
web.xml
Java代码   收藏代码
  1. <servlet>  
  2.     <servlet-name>Dispatcher</servlet-name>  
  3.     <servlet-class>  
  4.         org.springframework.web.servlet.DispatcherServlet  
  5.     </servlet-class>  
  6.     <init-param>  
  7.         <param-name>contextConfigLocation</param-name>  
  8.         <param-value>  
  9.             classpath:spring_config/applicationContext-mvc.xml  
  10.         </param-value>  
  11.     </init-param>  
  12. </servlet>  
  13. <servlet-mapping>  
  14.     <servlet-name>Dispatcher</servlet-name>  
  15.     <url-pattern>*.do</url-pattern>  
  16. </servlet-mapping>  
<servlet>
    <servlet-name>Dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:spring_config/applicationContext-mvc.xml
        </param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>Dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

Spring配置
Java代码   收藏代码
  1. <!--   
  2.     使用SqlSessionFactoryBean工厂产生SqlSessionFactory对象,  
  3.      方便后期注入Dao   
  4. -->  
  5. <bean id="sqlSessionFactory"    
  6.       class="org.mybatis.spring.SqlSessionFactoryBean">  
  7.     <property name="dataSource" ref="dataSource" />  
  8.     <property name="configLocation"   
  9.               value="classpath:mybatis_config/Configuration.xml">  
  10.     </property>  
  11. </bean>  
  12.   
  13. <!-- 会自动将basePackage中配置的包路径下的所有带有@Mapper标注的Dao层的接口生成代理,替代原来我们的Dao实现。-->  
  14. <bean         
  15.      class="org.mybatis.spring.annotation.MapperScannerPostProcessor">  
  16.     <property name="sqlSessionFactoryBeanName"   
  17.               value="sqlSessionFactory" />  
  18.     <property name="basePackage" value="com.demo.dao" />  
  19. </bean>  
  20.   
  21. <bean name="transactionManager"   
  22.       class="org.springframework.jdbc.  
  23.              datasource.DataSourceTransactionManager">     
  24.     <property name="dataSource" ref="dataSource"></property>  
  25. </bean>  
  26.   
  27. <!--Spring AOP 2.0 的方式配置事务,这个就不用多解释了吧!-->  
  28. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  29.     <tx:attributes>  
  30.         <tx:method name="delete*"   
  31.                    propagation="REQUIRED" read-only="false"   
  32.               rollback-for="java.lang.Exception"   
  33.                    no-rollback-for="java.lang.RuntimeException"/>  
  34.         <tx:method name="find*"   
  35.                    propagation="SUPPORTS"/>  
  36.     </tx:attributes>  
  37. </tx:advice>  
  38.       
  39. <aop:config>  
  40.     <aop:pointcut id="pc"   
  41.          expression="execution(* *.*.*(..))" />  
  42.     <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />  
  43. </aop:config>  
<!-- 
    使用SqlSessionFactoryBean工厂产生SqlSessionFactory对象,
     方便后期注入Dao 
-->
<bean id="sqlSessionFactory"  
      class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" 
              value="classpath:mybatis_config/Configuration.xml">
    </property>
</bean>

<!-- 会自动将basePackage中配置的包路径下的所有带有@Mapper标注的Dao层的接口生成代理,替代原来我们的Dao实现。-->
<bean       
     class="org.mybatis.spring.annotation.MapperScannerPostProcessor">
    <property name="sqlSessionFactoryBeanName" 
              value="sqlSessionFactory" />
    <property name="basePackage" value="com.demo.dao" />
</bean>

<bean name="transactionManager" 
      class="org.springframework.jdbc.
             datasource.DataSourceTransactionManager">   
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!--Spring AOP 2.0 的方式配置事务,这个就不用多解释了吧!-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" 
                   propagation="REQUIRED" read-only="false" 
	          rollback-for="java.lang.Exception" 
                   no-rollback-for="java.lang.RuntimeException"/>
        <tx:method name="find*" 
                   propagation="SUPPORTS"/>
    </tx:attributes>
</tx:advice>
	
<aop:config>
    <aop:pointcut id="pc" 
         expression="execution(* *.*.*(..))" />
    <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />
</aop:config>

最后看一下我的Dao的接口的写法
Java代码   收藏代码
  1. /** 
  2.  * 这里的@Mapper就是上面所讲的Mapper扫描器中所需要的配置,会自动生成代理对象。 
  3.  * 注意,接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样,因为生成的 
  4.  * 动态代理,会根据这个匹配相应的Sql语句执行。另外就是方法的参数和返回值也需要注 
  5.  * 意。接口中的方法如何定义,对应的MyBatis映射文件就应该进行相应的定义。 
  6.  * 最后,标注中的userDao是用来作为Spring的Bean的id(或name)进行使用的,方便我  
  7.  * 们在Service层进行注入使用。 
  8. */  
  9. @Mapper("userDao")  
  10. public interface UserDao {  
  11.     public void insertUser(User user);  
  12.     public void updateUser(User user);  
  13.     public void deleteUser(Long uid);  
  14.     /** 
  15.      * 进行模糊查询 
  16.      */  
  17.     public List<User> getAllUser(Map<String,Object> likeCondition);  
  18.     public User getUser(Long uid);  
  19. }  
/**
 * 这里的@Mapper就是上面所讲的Mapper扫描器中所需要的配置,会自动生成代理对象。
 * 注意,接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样,因为生成的
 * 动态代理,会根据这个匹配相应的Sql语句执行。另外就是方法的参数和返回值也需要注
 * 意。接口中的方法如何定义,对应的MyBatis映射文件就应该进行相应的定义。
 * 最后,标注中的userDao是用来作为Spring的Bean的id(或name)进行使用的,方便我 
 * 们在Service层进行注入使用。
*/
@Mapper("userDao")
public interface UserDao {
    public void insertUser(User user);
    public void updateUser(User user);
    public void deleteUser(Long uid);
    /**
     * 进行模糊查询
     */
    public List<User> getAllUser(Map<String,Object> likeCondition);
    public User getUser(Long uid);
}

至此,使用MyBatis-Spring包的基本配置就结束了。
有什么表述不清的地方还望大家指出,如有需要更多信息,请留言,谢谢!

更新:上传相关工程附件,具体演示使用方法。。。。。。。。。

12年1月30日上传DEMO示例,附件中的bigdt.rar
一级相关jar包,附件中的other.zip和spring_iBATIS.zip

分享到:
评论
8 楼 c__06 2011-12-26   引用
把整个工程放上来!
7 楼 qq308560726 2011-07-15   引用
不能跑啊大大在在大八22222222222222222
6 楼 zhouxianglh 2011-06-22   引用
就算不配AOP,UserDao 也会被事务管理,AOP配了,也不能管理事务.如何才能上AOP来管理事务呢?
5 楼 wq611403 2011-05-05   引用
有相应的LIB吗
4 楼 Rong_it 2011-01-21   引用
SQL mapper 不同 如果里面映射的SQL 对应标签ID重复 必须用到namespace namespace怎么加到映射中啊?
3 楼 yanxunjian 2010-12-09   引用
怎么没有 LIB 呢?
2 楼 lunzuo 2010-12-08   引用
有代码没   我配置后  dao  空指针啊
1 楼 yaogaoyu 2010-12-03   引用
能更详细一点吗?比如ibatis的配置文件,映射文件,映射类等。。
posted on 2012-02-10 00:46  lexus 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/lexus/archive/2012/02/10/2344737.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值