Mybatis 載入 Mapper配置的四種方式
前言
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 configuration
PUBLIC "-//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" />
FROM
userModel u
WHERE
u.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 u
WHERE
u.userName in (${userNames})
</select>
<!-- 搜尋多條,返回 List<HashMap<String,Object>>,入參為list-->
<select id="getHashMapListByList" parameterType="list" resultType="map">
SELECT
<include refid="userModelColumns" />
FROM
userModel u
WHERE
u.userName in
<foreach item="item" collection="userNamelist" open="(" separator="," close=")" >
#{item}
</foreach>
</select>
<update id="update">
UPDATE userModel u
SET
u.passWord=#{passWord},u.createDate=#{createDate}
WHERE
u.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>