spring集成mybatis

来源:互联网 发布:学琴屋软件怎么样 编辑:程序博客网 时间:2024/05/19 18:44

Spring集成MyBatis (方式一 使用Mapper映射器)

  • step1.导包。
    spring-webmvc,mybatis,mybatis-spring,spring-jdbc
    ojdbc,dbcp,junit。

  • step2.添加Spring配置文件
    MyBatis配置文件的内容变成了一个bean
    (SqlSessionFactoryBean)

<util:properties id="db" location="classpath:db.properties"/>        <!-- 配置数据库连接池 -->        <bean id="ds"         class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">            <property name="driverClassName"            value="#{db.driver}"/>            <property name="url"            value="#{db.url}"/>            <property name="username"            value="#{db.user}"/>            <property name="password"            value="#{db.pwd}"/>        </bean>        <!-- 配置SqlSessionFactoryBean -->        <!--             该bean的作用是用来代替MyBatis配置文件         -->         <bean           class="org.mybatis.spring.SqlSessionFactoryBean">             <!-- 指定连接池 -->             <property name="dataSource" ref="ds"/>             <!-- 指定映射文件位置 -->             <property name="mapperLocations"             value="classpath:entity/*.xml"/>         </bean>         <!-- 配置MapperScannerConfigurer -->         <!--              该bean会扫描指定包及其子包下面的所有的Mapper             映射器(接口),然后生成符合该接口要求的对象             (通过调用SqlSession的getMapper方法),接下来,             会将这些对象(即Mapper映射器的实现对象)添加到             Spring容器里面(默认的id是首字母小写之后的接口名)。          -->          <bean           class="org.mybatis.spring.mapper.MapperScannerConfigurer">                <!-- 指定要扫描的包 -->                <property name="basePackage" value="dao"/>                <!-- 指定只扫描带有该注解的接口 -->                <property name="annotationClass"                value="annotations.MyBatisRepository"/>          </bean>       </beans>
  • step3.实体类

  • step4.映射文件

<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"       "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"><mapper namespace="dao.EmployeeDAO">    <!--         id:每一条sql语句都有唯一的id,称之为sqlId。        parameterType:参数类型(如果是类,要写全限定名)     -->    <insert id="save" parameterType="entity.Employee">        INSERT INTO t_emp VALUES(t_emp_seq.nextval,        #{ename},#{salary},#{age})    </insert>    <!--         resultType: 返回类型(如果是类,要写全限定名)     -->    <select id="findAll"         resultType="entity.Employee">        SELECT * FROM t_emp    </select>    <!-- 返回Map类型的结果 -->    <!--         map是java.util.Map的简写形式。     -->    <select id="findById2" parameterType="int"     resultType="map">        SELECT * FROM t_emp WHERE id = #{id1}    </select>    <!--         设置字段名与实体类的属性名的对应关系。            只需要将不一致的列出来。     -->    <resultMap type="entity.Emp2" id="empResultMap">        <result property="empNo" column="id"/>        <result property="name" column="ename"/>    </resultMap>    <select id="findById3" parameterType="int"    resultMap="empResultMap">        SELECT * FROM t_emp WHERE id = #{id1}    </select>   </mapper>
  • step5.Mapper映射器
    和映射文件相对应的接口

  • step6.配置MapperScannerConfigurer
    该bean会扫描指定包及其子包下面的所有的Mapper映射器(接口),会调用SqlSession的getMapper方法返回Mapper映射器的实现对象,并且将这些对象添加到Spring容器里面。(默认的id是首字母小写之后的接口名)。

          <bean           class="org.mybatis.spring.mapper.MapperScannerConfigurer">                <!-- 指定要扫描的包 -->                <property name="basePackage" value="dao"/>                <!-- 指定只扫描带有该注解的接口 -->                <property name="annotationClass"                value="annotations.MyBatisRepository"/>          </bean>

只扫描带有特定注解的Mapper映射器

step1.开发一个注解。

package annotations;public @interface MyBatisRepository {}

step2.将注解添加到Mapper映射器上面。

@Repository("empDAO")@MyBatisRepositorypublic interface EmployeeDAO {}

step3.配置MapperScannerConfigurer。

Spring集成MyBatis (方式二 不使用Mapper映射器)

step1.导包。
spring-webmvc,mybatis,mybatis-spring,spring-jdbc
ojdbc,dbcp,junit。

step2.添加Spring配置文件
MyBatis配置文件的内容变成了一个bean
(SqlSessionFactoryBean)

        <util:properties         id="db" location="classpath:db.properties"/>        <!-- 配置数据库连接池 -->        <bean id="ds"         class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">            <property name="driverClassName"            value="#{db.driver}"/>            <property name="url"            value="#{db.url}"/>            <property name="username"            value="#{db.user}"/>            <property name="password"            value="#{db.pwd}"/>        </bean>        <!-- 配置SqlSessionFactoryBean -->        <!--             该bean的作用是用来代替MyBatis配置文件         -->         <bean  id="ssfb"         class="org.mybatis.spring.SqlSessionFactoryBean">             <!-- 指定连接池 -->             <property name="dataSource" ref="ds"/>             <!-- 指定映射文件位置 -->             <property name="mapperLocations"             value="classpath:entity/*.xml"/>         </bean>         <!-- 配置SqlSessionTemplate -->         <!--             SqlSessionTemplate封装了SqlSession的操作。          -->          <bean id="sst"           class="org.mybatis.spring.SqlSessionTemplate">                <!-- 指定SqlSessionFactoryBean -->                <constructor-arg index="0" ref="ssfb"/>          </bean>          <!-- 配置组件扫描 -->          <context:component-scan base-package="dao"/>      </beans>

step3.实体类

@Repository("empDAO")public class EmployeeDAOMyBatisImpl implements EmployeeDAO{    @Autowired    @Qualifier("sst")    private SqlSessionTemplate sst;    public void save(Employee emp) {        /*         * 不用考虑提交事务和关闭SqlSession,         * SqlSessionTemplate已经处理了。         */        sst.insert("dao.EmployeeDAO.save", emp);    }    public List<Employee> findAll() {        return sst.selectList("dao.EmployeeDAO.findAll");    }    public Employee findById(int id) {        return sst.selectOne("dao.EmployeeDAO.findById", id);    }    public void update(Employee e) {        sst.update("dao.EmployeeDAO.update", e);    }    public void delete(int id) {        sst.delete("dao.EmployeeDAO.delete", id);    }    public Map findById2(int id) {        return sst.selectOne(                "dao.EmployeeDAO.findById2", id);    }    public Emp2 findById3(int id) {        return sst.selectOne("dao.EmployeeDAO.findById3",id);    }}

step4.映射文件
namespace可以自定义。

step5.DAO接口方法名等不做要求。
step6.DAO实现类。

step7.配置SqlSessionTemplate
可以将SqlSessionTemplate注入到DAO,然后 调SqlSessionTemplate提供的方法即可。SqlSessionTemplate封装了SqlSession,我们不用去考虑如何获得SqlSession,如何关闭SqlSession。

 <bean id="sst"           class="org.mybatis.spring.SqlSessionTemplate">                <!-- 指定SqlSessionFactoryBean -->                <constructor-arg index="0" ref="ssfb"/>          </bean>          <!-- 配置组件扫描 -->          <context:component-scan base-package="dao"/>