Mybatis 加载 Mapper配置的四种方式

Mybatis 加载 Mapper配置的四种方式

2017年06月10日 19:11:08

阅读数:16652

前言

Mybatis 的Mapper 是指Mybatis 执行数据库操作的接口类以及方法,在非注解模式下,还包含与类对应的 xml 配置文件。

第一种依据 Mapper 类 具体路径 配置 Mapper

这种情况下,如果是非注解模式的话xml配置文件必须和这个类在同一级目录,且与Mapper类同名

 
  1. <configuration>

  2. <mappers>

  3. <!-- class 级别的指定 -->

  4. <mapper class="com.bestcxx.stu.springmvc.mapper.UserModelMapper"/>

  5. <mapper class="com.bestcxx.stu.springmvc.mapper.UserModelTwoMapper"/>

  6. </mappers>

  7. </configuration>

在存在 xml 配置文件的情况下,文件结构如下,没有 xml 配置文件的情况下,只有 Mapper 类

第二种依据 Mapper 类所在的package包路径 配置 Mapper

这种情况下,如果是非注解模式的话xml配置文件必须也处于同一级 package 下,且与Mapper类同名

 
  1. <configuration>

  2. <mappers>

  3. <package name="com.bestcxx.stu.springmvc.mapper"/>

  4. </mappers>

  5. </configuration>

文件结构

第三种是把 Mapper 的xml配置文件单独放置到 resources 中,和Mapper 类分开了

这种方式的好处是便于统一管理 xml 配置文件,不好的的地方是无法使用注解模式了

 
  1. <configuration>

  2. <mappers>

  3. <!-- 使用这个方案,可以单独指定Mapper的位置 -->

  4. <mapper resource="mybatis/mappings/UserModelMapper.xml"/>

  5. <mapper resource="mybatis/mappings/UserModelTwoMapper.xml"/>

  6. </mappers>

  7. </configuration>

然后Mapper类还是呆在该在的位置

但是mapper 的 xml文件的位置如下

上面的配置在mybitas-config.xml(名字是可以自定义的)中集中管理,Mapper 的 xml 文件需要关联 

第一,是mybatis-config.xml 文件负责加载 Mapper的xml文件,即上面所说的配置是在这个mybatis-config.xml文件中

第二,mapper对应的xml 配置文件内部要指定对应的Mapper类

下面是单独测试mybatis的mybatas的配置文件的内容

 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE configuration

  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">

  5. <configuration>

  6. <!-- 元素首次出现必须符合下面的顺序 -->

  7. <!-- (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?) -->

  8.  
  9. <!-- 加载常量配置信息 -->

  10. <!-- 可以覆盖重写,用于解密-http://www.mybatis.org/mybatis-3/zh/configuration.html

  11. ·在 properties 元素体内指定的属性首先被读取。

  12. ·然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。

  13. ·最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。 -->

  14. <properties resource="config/jdbc.properties"/>

  15.  
  16. <!-- 为实体类定义别名 -->

  17. <typeAliases>

  18. <typeAlias alias="userModel" type="com.bestcxx.stu.springmvc.model.UserModel"/>

  19. <typeAlias alias="userModelTwo" type="com.bestcxx.stu.springmvc.model.UserModelTwo"/>

  20. </typeAliases>

  21. <!-- 使用 spring 配置数据库的时候,下面就可以注释掉了 -->

  22. <!-- 定义数据库信息,默认使用 development 数据库构建环境 -->

  23. <environments default="development">

  24. <environment id="development">

  25. <!-- 采用 jdbc 事务管理 -->

  26. <transactionManager type="JDBC"/>

  27. <!-- 配置数据库链接信息 -->

  28. <dataSource type="POOLED">

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

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

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

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

  33. </dataSource>

  34. </environment>

  35. </environments>

  36.  
  37. <!-- 定义映射器 -->

  38. <mappers>

  39. <!-- 使用这个方案,可以单独指定Mapper的位置 -->

  40. <!-- <mapper resource="mybatis/mappings/UserModelMapper.xml"/>

  41. <mapper resource="mybatis/mappings/UserModelTwoMapper.xml"/> -->

  42.  
  43. <!-- 使用下面两个个方法,Mapper.xml 文件位置必须在和其内部 <mapper namespace="">的类在一起,当然,使用注解模式的话,Mapper.xml文件就没有必要存在了 -->

  44.  
  45. <!-- 直接指定一个包去扫描-内保包含多个Mapper配置- -->

  46. <!-- <package name="com.bestcxx.stu.springmvc.mapper"/> -->

  47.  
  48. <!-- class 级别的指定 -->

  49. <mapper class="com.bestcxx.stu.springmvc.mapper.UserModelMapper"/>

  50. <mapper class="com.bestcxx.stu.springmvc.mapper.UserModelTwoMapper"/>

  51. </mappers>

  52. </configuration>


mapper的xml 配置文件的内容

注意

<mapper namespace="com.bestcxx.stu.springmvc.mapper.UserModelMapper">
 
  1. <?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE mapper

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

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

  5. <mapper namespace="com.bestcxx.stu.springmvc.mapper.UserModelMapper">

  6.  
  7. <!-- 表字段显式 -->

  8. <sql id="userModelColumns">

  9. u.userName AS "userName",

  10. u.passWord AS "passWord",

  11. u.createDate AS "createDate",

  12. u.intNum AS "intNum",

  13. u.decimalNum AS "decimalNum"

  14. </sql>

  15.  
  16.  
  17. <!-- 根据 userName 查询 -->

  18. <select id="getUserModel" resultType="userModel">

  19. SELECT

  20. <include refid="userModelColumns" />

  21. FROM

  22. userModel u

  23. WHERE

  24. u.userName = #{userName}

  25. </select>

  26.  
  27. <!-- 插入 -->

  28. <insert id="addUserModel" parameterType="userModel" useGeneratedKeys="true" keyProperty="userName">

  29. INSERT INTO userModel (

  30. passWord,

  31. createDate,

  32. intNum,

  33. decimalNum

  34. )

  35. VALUES (

  36. #{passWord},

  37. #{createDate},

  38. #{intNum},

  39. #{decimalNum}

  40. )

  41.  
  42. </insert>

  43.  
  44. <!-- 搜索多条,返回List<userModel>-入参为111,222,333 格式 -->

  45. <select id="getUserModelListByStrs" parameterType="string" resultType="userModel">

  46. SELECT

  47. <include refid="userModelColumns" />

  48. FROM

  49. userModel u

  50. WHERE

  51. u.userName in (${userNames})

  52. </select>

  53.  
  54. <!-- 搜索多条,返回 List<HashMap<String,Object>>,入参为list-->

  55. <select id="getHashMapListByList" parameterType="list" resultType="map">

  56. SELECT

  57. <include refid="userModelColumns" />

  58. FROM

  59. userModel u

  60. WHERE

  61. u.userName in

  62. <foreach item="item" collection="userNamelist" open="(" separator="," close=")" >

  63. #{item}

  64. </foreach>

  65. </select>

  66.  
  67. <update id="update">

  68. UPDATE userModel u

  69. SET

  70. u.passWord=#{passWord},u.createDate=#{createDate}

  71. WHERE

  72. u.userName=#{userName}

  73. </update>

  74.  
  75. </mapper>

第四种,直接在spring中配置Mapper的路径,但是mybatis.xml还是必不可少的

在sqlSessionFactory中设定 mybitas的xml和aliases

 
  1. <!-- MustConfigPoint MyBatis begin -->

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

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

  4. <property name="typeAliasesPackage" value="实体类包路径" />

  5. <property name="typeAliasesSuperType" value="实体类顶级包路径" />

  6. <property name="mapperLocations" value="classpath:/mybatis/mappings/**/*.xml" />

  7. <property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"></property>

  8. </bean>


设置Mapper类

 
  1. <!-- MustConfigPoint 扫描basePackage下所有以@MyBatisDao注解的接口 -->

  2. <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">

  3. <property name="basePackage" value="mapper类的包路径" />

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

  5. <property name="annotationClass" value="com.msyd.framework.common.persistence.annotation.MyBatisDao" />

  6. </bean>

猜你喜欢

转载自blog.csdn.net/f45056231p/article/details/81255247
今日推荐