zoukankan      html  css  js  c++  java
  • MyBatis3与Spring3无缝集成-从iBatis平滑过渡

    从2010开始接触iBatis到现在,一直到现在把iBatis作为数据访问层ORM。为了演示一个Web应用,今天又搭了个SpringMVC应用,由于应用比较简单,Spring版本直接用最新版本3.2.4.RELEASE,结果惊讶的发现,Spring已经不推荐使用iBatis了,SqlMapClientDaoSupport类已经加上了@deprecated as of Spring 3.2, in favor of the native Spring support in the Mybatis follow-up project (http://code.google.com/p/mybatis/)注解。于是乎,简单的学习了下MyBatis3,在这里把学习笔记记录下来,希望能对和我一样,在从iBatis转入到MyBatis的网友一些参考。

    1、增加Maven依赖
    由于要整合Spring和MyBatis,所以至少需要spring/springmvc和mybatis-spring的Maven依赖,和Spring一样,直接使用最新版本:

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>3.2.4.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.2.4.RELEASE</version>
    </dependency>
    
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.3</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.1</version>
    </dependency>

    2、增加MyBatis的配置文件
    和iBatis的SqlMapConfig配置一样,MyBatis也有一个总配置文件,本应用中为mybatis-config.xml,其内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <typeAliases>
    <typeAlias alias="UserDO" type="com.github.obullxl.jeesite.dal.dto.UserDO" />
    </typeAliases>
    
    <mappers>
    <mapper resource="mybatis/mappers/atom-user-mapper.xml" />
    </mappers>
    </configuration>

    在该文件中,增加一个类型别名,类型别名的目的是避免多次输入过长的类路径;同时有一个映射文件,它和iBatis的sqlmapping文件一样,里面是动态SQL内容;熟悉iBatis的朋友会发现,其实MyBatis和iBatis的思路其实差不多的。

    3、增加映射文件
    从中配置文件和结合iBatis的SqlMap文件可以得出,SQL也是需要映射文件,本应用为atom-user-mapper.xml,其内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="ATOM-USER">
    <resultMap id="UserMap" type="UserDO">
    <id property="id" column="id" />
    <result property="uname" column="uname" />
    <result property="passwd" column="passwd" />
    <result property="uemail" column="uemail" />
    <result property="gmt_create" column="gmtCreate" />
    <result property="gmt_modify" column="gmtModify" />
    </resultMap>
    
    <select id="findAll" resultMap="UserMap" fetchSize="1">
    SELECT * FROM atom_user
    </select>
    
    <select id="count" resultType="int">
    SELECT COUNT(*) FROM atom_user;
    </select>
    </mapper>

    大家发现,和sqlmapping文件非常的相似,其中ResultMap的class用type代替,由于我们的中配置文件中,已经定义了UserDO的别名,所以这里直接用UserDO就行了,无需包含包名称。

    4、增加Spring配置文件
    在Spring配置文件中,定义MyBatis相关的Bean,本应用为mybatis-context.xml,其内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/osnode?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
    <property name="username" value="osnode" />
    <property name="password" value="site" />
    <property name="maxActive" value="10" />
    <property name="maxIdle" value="30" />
    <property name="maxWait" value="500" />
    <property name="defaultAutoCommit" value="true" />
    </bean>
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
    </bean>
    
    <bean id="abstractDAO" abstract="true">
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean>
    <bean id="userDAO" parent="abstractDAO" class="com.github.obullxl.jeesite.dal.mybatis.MyBatisUserDAO" />
    
    <bean id="userService" class="com.github.obullxl.jeesite.service.impl.UserServiceImpl" />
    </beans>

    5、DAO类
    接口定义如下:

    public interface UserDAO {
    public int count();
    public List<UserDO> findAll();
    }

    默认实现如下:

    public class MyBatisUserDAO extends SqlSessionDaoSupport implements UserDAO {
    
    /** 
    * @see com.github.obullxl.jeesite.dal.dao.UserDAO#count()
    */
    public int count() {
    return this.getSqlSession().selectOne("ATOM-USER.count");
    }
    
    /** 
    * @see com.github.obullxl.jeesite.dal.dao.UserDAO#findAll()
    */
    public List<UserDO> findAll() {
    return this.getSqlSession().selectList("ATOM-USER.findAll");
    }
    
    }

    6、测试应用
    到目前为止,我们的MyBatis和Spring就整合完成了,写一个简单的Java类看看:

    public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/mybatis-context.xml");
    UserService service = context.getBean(UserService.class);
    
    int count = service.count();
    logger.warn("Count value is:{}", count);
    
    List<UserDO> users = service.findAll();
    logger.warn("All users:
    {}", users);
    }

    哈哈,可以看到我们所希望的结果,有了基本的框架,接下来就是补充应用其他内容了……

    7、源代码
    本博客中,代码只涉及到部分重点代码,其他代码我就不在贴出来了,请移步到GitHub:https://github.com/obullxl/atom-jeesite

    8、关于本博客
    博客园地址:http://www.cnblogs.com/obullxl/p/mybatis-integration-with-spring.html
    百度引擎地址:http://obullxl.duapp.com/topic-blog-17.html
    红帽引擎地址:https://obullxl-osnode.rhcloud.com/topic-blog-4.html

  • 相关阅读:
    36_Cache Aside Pattern缓存+数据库读写模式的分析
    35_亿级流量商品详情页的多级缓存架构以及架构中每一层的意义
    34_redis阶段性总结:1T以上海量数据+10万以上QPS高并发+99.99%高可用
    33_redis在实践中的一些常见问题以及优化思路(包含linux内核参数优化)
    正则表达式全部符号解释
    如何正确学习JavaScript
    2015阿里校招前端笔试题
    前端面试总结2
    前端面试总结
    通俗易懂的来讲讲DOM
  • 原文地址:https://www.cnblogs.com/obullxl/p/mybatis-integration-with-spring.html
Copyright © 2011-2022 走看看