MyBatis 筆記(三)——優化配置
阿新 • • 發佈:2019-01-06
在之前的講解中,不難發現 MyBatis 的配置有些笨重,這一節就講 MyBatis 的配置優化。毫無疑問,主要是兩方面:
1. 優化 MyBatis 基礎配置檔案。
2. 優化 MyBatis 對映檔案。
優化 MyBatis 基礎配置檔案
在 MyBatis 基礎配置檔案中,之前的資料庫配置都是在這個檔案中完成的。實際上,資料庫配置是可以抽出去的,如 db.properties:
DRIVER=com.mysql.cj.jdbc.Driver
URL=jdbc:mysql://127.0.0.1:3306/test?useSSL=true
USERNAME=root
PASSWORD=123456
然後,在 MyBatis 的基礎配置檔案中的 configuration 標籤裡配置如下:
<!-- 引用db.properties配置檔案 -->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${DRIVER}"/>
<property name="url" value="${URL}"/>
<property name="username" value="${USERNAME}"/>
<property name="password" value="${PASSWORD}"/>
</dataSource>
</environment>
</environments >
優化 MyBatis 對映檔案
在 MyBatis 對映檔案中,之前對於資料庫實體類的引用都是通過全類名(包名+類名)對映,這無疑產生了很多的冗餘。為了解決這個問題,可以在 MyBatis 基礎配置檔案中,為每個實體類起一個別名。例如給實體類 edu.wzm.mybatis.domain.Person 別名為 Person,然後在對映檔案中就可以直接用 Person 映射了:
<!-- 為實體類edu.wzm.mybatis.domain.Person配置一個別名_User -->
<typeAlias type="edu.wzm.mybatis.domain.Person" alias="Person"/>
當然,如果為每一個實體類都起別名顯然也是很費事的,所以,可以以包為單位為每個類起一個別名,其中類的別名就是類名。這樣就需要在 MyBatis 基礎配置檔案中,配置如下:
<!--
為edu.wzm.mybatis.domain包下的所有實體類配置別名,MyBatis預設的設定別名的方式就是去除類所在的包後的簡單的類名。
例如:edu.wzm.mybatis.domain.Person這個實體類的別名就會被設定成Person
-->
<typeAliases>
<package name="edu.wzm.mybatis.domain"/>
</typeAliases>
完整的 MyBatis 基礎配置檔案:
<?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>
<!-- 引用db.properties配置檔案 -->
<properties resource="db.properties"/>
<!-- 為實體類edu.wzm.mybatis.domain.Person配置一個別名_User -->
<!-- <typeAlias type="edu.wzm.mybatis.domain.Person" alias="Person"/> -->
<!--
為edu.wzm.mybatis.domain包下的所有實體類配置別名,MyBatis預設的設定別名的方式就是去除類所在的包後的簡單的類名。
例如:edu.wzm.mybatis.domain.Person這個實體類的別名就會被設定成Person
-->
<typeAliases>
<package name="edu.wzm.mybatis.domain"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${DRIVER}"/>
<property name="url" value="${URL}"/>
<property name="username" value="${USERNAME}"/>
<property name="password" value="${PASSWORD}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 基於XML配置檔案 -->
<mapper resource="edu/wzm/mybatis/mapping/PersonMapper.xml"/>
<!-- 基於註解 -->
<!--<mapper class="edu.wzm.mybatis.mapper.PersonMapper"/>-->
</mappers>
</configuration>
完整的 MyBatis 對映檔案:
<?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,namespace的值習慣上設定成包名+sql對映檔名,這樣就能夠保證namespace的值是唯一的
例如:namespace="edu.wzm.mybatis.mapping.PersonMapper"(userMapper.xml檔案去除字尾)
-->
<mapper namespace="edu.wzm.mybatis.mapping.PersonMapper">
<!--
在select、insert、update、delete標籤中編寫查詢的SQL語句, 設定標籤的id屬性值必須是唯一的,不能夠重複。使用parameterType屬性
指明查詢時,使用的引數型別。resultType屬性指明查詢返回的結果集型別,resultType="edu.wzm.mybatis.domain.Person"就表示將查詢
結果封裝成一個Person類的物件返回,Person類就是person表所對應的實體類。
-->
<insert id="insert" parameterType="Person">
insert into person(name, age) values(#{name}, #{age})
</insert>
<select id="getById" resultType="Person">
select *
from person
where id = #{id}
</select>
<select id="getAll" resultType="Person">
select * from person;
</select>
<update id="update" parameterType="edu.wzm.mybatis.domain.Person">
update person set age = #{age} where id = #{id}
</update>
<delete id="delete" parameterType="int">
delete from person where id = #{id}
</delete>
</mapper>