為什么要給實(shí)體類配置別名惫搏?
- 目的是為了在引用實(shí)體類時可以使用實(shí)體類的別名來代替實(shí)體類,達(dá)到簡寫的目的
配置的方法(都是在mybatis的配置xml文件中進(jìn)行配置)
- 第一種方法硅则,給單獨(dú)的某個實(shí)體類配置別名,如同下面的形式
<!--為實(shí)體類com.demo.dao.User配置一個別名User-->
<typeAliases>
<typeAlias type="com.demo.dao.User" alias="User"/>
</typeAliases>
- 第二種方法,批量為某個包下的所有實(shí)體類設(shè)置別名星持,配置形式如下
<!-- 為com.demo.dao包下的所有實(shí)體類配置別名抢埋,
MyBatis默認(rèn)的設(shè)置別名的方式就是去除類所在的包后的簡單的類名,
比如com.demo.dao.User這個實(shí)體類的別名就會被設(shè)置成User
-->
<typeAliases>
<package name="com.demo.dao"/>
</typeAliases>
代碼例子說明
- 沒有配置前的mapper文件夾的xml文件:如UserDao對應(yīng)的UserMapper.xml文件如下
<?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="com.demo.dao.UserDao">
<select id="findUserById" resultType="com.demo.entity.User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="com.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,password,age) values(#{name},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="com.demo.entity.User">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
從這個配置文件中,我們可以看到<select>督暂、<insert>和<update>三個標(biāo)簽元素的resultType都是User對象揪垄,需要設(shè)置這個User對象的類全限定名,即packname.classname逻翁。
我們發(fā)現(xiàn)一個問題饥努,那就是這個類名,我們需要寫多次八回,如果要改這個類名的話酷愧,我們需要在多個地方進(jìn)行修改驾诈。很明顯,這樣配置的話很容易造成修改上的遺漏溶浴,同時也書寫上也比較麻煩乍迄。因此,MyBatis為我們提供了一個簡單方便的配置方法士败,那就是使用<typeAliases>標(biāo)簽元素闯两,給實(shí)體類設(shè)置一個別名。
<?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 resource="mysql.properties">
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<typeAlias alias="User" type="com.demo.entity.User"/>
</typeAliases>
<!-- 和spring整合后 environments配置將廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務(wù)管理 -->
<transactionManager type="JDBC" />
<!-- 數(shù)據(jù)庫連接池 -->
<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>
<mapper resource="com\demo\resource\mapper\UserMapper.xml" />
</mappers>
</configuration>
如上所示谅将,我們在原來的mybatis配置文件中增加了<typeAliases>標(biāo)簽漾狼,并將com.demo.dao.User這個實(shí)體類重命名為User,然后我們在mapper配置文件中就可以如下使用了饥臂。
備注:這里需要注意的是逊躁,typeAliases配置需要放置在settings之后,否則會出異常S缥酢;骸!
<?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="com.demo.dao.UserDao">
<select id="findUserById" resultType="User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,password,age) values(#{name},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="User">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
這樣即使實(shí)體類名修改了猛们,所需要修改的地方也只有一處念脯,便于集中管理.
在具體項(xiàng)目中,實(shí)體類是非常多的弯淘,所有更多時候我們需要批量為某個包下的所有實(shí)體類設(shè)置別名,所以只要在上面配置單個實(shí)體類的別名的地方吉懊,改成批量配置別名的方式即可庐橙,如下圖
<typeAliases>
<!-- 為實(shí)體類com.demo.entity.User配置一個別名User -->
<!-- <typeAlias type="com.demo.entity.User" alias="User"/> -->
<!-- 為com.demo.entity包下的所有實(shí)體類配置別名,MyBatis默認(rèn)的設(shè)置別名的方式就是去除類所在的包后的簡單的類名
比如com.demo.entity.User這個實(shí)體類的別名就會被設(shè)置成User
-->
<package name="com.demo.entity"/>
</typeAliases>
參考了此處的文章:
https://blog.csdn.net/majinggogogo/article/details/71503263