Mybatis 加载 Mapper配置的四种方式

来源:互联网 发布:夜间灯光数据 编辑:程序博客网 时间:2024/06/08 05:03

前言

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


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

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

<configuration><mappers><!-- class 级别的指定 --><mapper class="com.bestcxx.stu.springmvc.mapper.UserModelMapper"/><mapper class="com.bestcxx.stu.springmvc.mapper.UserModelTwoMapper"/></mappers></configuration>
在存在 xml 配置文件的情况下,文件结构如下,没有 xml 配置文件的情况下,只有 Mapper 类

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

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

<configuration><mappers><package name="com.bestcxx.stu.springmvc.mapper"/></mappers></configuration>
文件结构



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

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

<configuration><mappers><!-- 使用这个方案,可以单独指定Mapper的位置 --><mapper resource="mybatis/mappings/UserModelMapper.xml"/><mapper resource="mybatis/mappings/UserModelTwoMapper.xml"/></mappers></configuration>
然后Mapper类还是呆在该在的位置


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



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

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

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

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

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 元素首次出现必须符合下面的顺序 --><!-- (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?) --><!-- 加载常量配置信息 --><!-- 可以覆盖重写,用于解密-http://www.mybatis.org/mybatis-3/zh/configuration.html·在 properties 元素体内指定的属性首先被读取。·然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。·最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。 --><properties resource="config/jdbc.properties"/><!-- 为实体类定义别名 --><typeAliases><typeAlias alias="userModel"  type="com.bestcxx.stu.springmvc.model.UserModel"/><typeAlias alias="userModelTwo"  type="com.bestcxx.stu.springmvc.model.UserModelTwo"/></typeAliases><!-- 使用 spring 配置数据库的时候,下面就可以注释掉了 --><!-- 定义数据库信息,默认使用 development 数据库构建环境 --><environments default="development"><environment id="development"><!-- 采用 jdbc 事务管理 --><transactionManager type="JDBC"/><!-- 配置数据库链接信息 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driverClassName}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 定义映射器 --><mappers><!-- 使用这个方案,可以单独指定Mapper的位置 --><!-- <mapper resource="mybatis/mappings/UserModelMapper.xml"/><mapper resource="mybatis/mappings/UserModelTwoMapper.xml"/> --><!-- 使用下面两个个方法,Mapper.xml 文件位置必须在和其内部 <mapper namespace="">的类在一起,当然,使用注解模式的话,Mapper.xml文件就没有必要存在了 --><!-- 直接指定一个包去扫描-内保包含多个Mapper配置- --><!-- <package name="com.bestcxx.stu.springmvc.mapper"/> --><!-- class 级别的指定 --><mapper class="com.bestcxx.stu.springmvc.mapper.UserModelMapper"/><mapper class="com.bestcxx.stu.springmvc.mapper.UserModelTwoMapper"/></mappers></configuration>

mapper的xml 配置文件的内容

注意

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


<?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="com.bestcxx.stu.springmvc.mapper.UserModelMapper"><!-- 表字段显式 --><sql id="userModelColumns">u.userName AS "userName",u.passWord AS "passWord",u.createDate AS "createDate",u.intNum AS "intNum",u.decimalNum AS "decimalNum"</sql><!-- 根据 userName 查询 --><select id="getUserModel" resultType="userModel">SELECT<include refid="userModelColumns" />FROMuserModel uWHEREu.userName = #{userName}</select><!-- 插入 --><insert id="addUserModel" parameterType="userModel" useGeneratedKeys="true" keyProperty="userName">INSERT INTO userModel (passWord,createDate,intNum,decimalNum)VALUES (#{passWord},#{createDate},#{intNum},#{decimalNum})</insert><!-- 搜索多条,返回List<userModel>-入参为111,222,333 格式 --><select id="getUserModelListByStrs" parameterType="string" resultType="userModel">SELECT <include refid="userModelColumns" />FROM userModel uWHEREu.userName in (${userNames})</select><!-- 搜索多条,返回 List<HashMap<String,Object>>,入参为list--><select id="getHashMapListByList" parameterType="list" resultType="map">SELECT <include refid="userModelColumns" />FROM userModel uWHEREu.userName in <foreach item="item" collection="userNamelist" open="(" separator="," close=")" >    #{item} </foreach></select><update id="update">UPDATE userModel uSETu.passWord=#{passWord},u.createDate=#{createDate}WHEREu.userName=#{userName}</update></mapper> 


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


在sqlSessionFactory中设定 mybitas的xml和aliases

<!-- MustConfigPoint MyBatis begin --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="typeAliasesPackage" value="实体类包路径" /><property name="typeAliasesSuperType" value="实体类顶级包路径" /><property name="mapperLocations" value="classpath:/mybatis/mappings/**/*.xml" /><property name="configLocation" value="classpath:/mybatis/mybatis-config.xml"></property></bean>

设置Mapper类

<!-- MustConfigPoint 扫描basePackage下所有以@MyBatisDao注解的接口 --><bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="mapper类的包路径" /><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /><property name="annotationClass" value="com.msyd.framework.common.persistence.annotation.MyBatisDao" /></bean>







原创粉丝点击