前の記事「
Mybatis配置の<properties>属性構成要素の詳細 」では、ラベル要素の配置と使用方法について説明しました。
この文章の中で、私達は「typeAliases」というタグ要素を言いますが、この元素は主にタイプを別名でコントロールするために使われています。具体的にはどういう意味ですか?私たちは次の例で説明します。見たら分かりますよ。
ここに以前のUserDao対応のmapperファイルを貼り付けます。
以下の通りです
<?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.majing.learning.mybatis.dao.UserDao">
<select id="findUserById" resultType="com.majing.learning.mybatis.entity.User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="com.majing.learning.mybatis.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.majing.learning.mybatis.entity.User">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
このプロファイルからは、
ととの三つのタグ要素のresultTypeがUserオブジェクトであり、このUserオブジェクトのクラスのフルネーム、つまりpackname.classnameを設定する必要があります。私たちは一つの問題を発見しました。つまり、このクラス名は何度も書く必要があります。このクラス名を変えるなら、私たちは多くのところで修正しなければなりません。明らかに、このように配置すると修正の漏れが発生しやすく、同時に書くのも面倒くさいです。したがって、MyBatisは簡単で便利な配置方法を提供してくれました。それは<typeAliases>タグ要素を使って、エンティティ類に別名を設定します。
<?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/mybatis?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<typeAlias alias="User" type="com.majing.learning.mybatis.entity.User"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<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>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>以上のように、私たちは元のmybatisプロファイルにタグを追加し、comp.majing.learning.mybatis.entity.Userというエンティティ類をUserと命名しました。注:ここで注意したいのは、typeAliasesの設定はsettingsの後に置く必要があります。そうでないと異常が発生します。
<?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.majing.learning.mybatis.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>このように実体類名が修正されても、修正が必要なところは一つしかなく、集中的に管理しやすいです。もし実体類が多いならどうすればいいですか?まだ多くの実体類と別名、NO、NO、NOを配置するのではありません。他の配置方法を紹介します。
<?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/mybatis?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<package name="com.majing.learning.mybatis.entity"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<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>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>ここでは、「typeAliases」タグの下で「typeAliase」ではなく、「package」タグを使用して、当該パケットの名義をスキャンするすべての種類(インターフェースと匿名の内部類を除く)を表しています。類名に注釈がある場合は、別名として注釈で指定された名称を使用します。comp.majing.learning.mybatis.entity.Userという類は@Alias注解が設定されていないと、この時はuserという別名に関連します。したがって、上の構成によって、実体類を調整する必要があります。次の2つの方法で示します。(1)実体類に@Aliasコメントを追加する
package com.majing.learning.mybatis.entity;
import org.apache.ibatis.type.Alias;
@Alias(value="User")
public class User {
private int id;
private String name;
private String password;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]";
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}(2)実体類に注釈を付けない場合mapperファイルで引用するタイプの別名を修正し、小文字に変更します。以下の通りです。
<?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.majing.learning.mybatis.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>最後に、mybatisは私達のために多くの別名を実現しました。多くのよくあるJavaタイプの中にそれぞれのタイプの別名を建てました。いずれも大文字と小文字のどちらも敏感ではないので、基本タイプの名前の重複による特殊な処理に注意が必要です。エイリアスマップのタイプ_。bytebyte_。longlong_。ショート?トショート?ト_。要点要点_。インテグ要点_。ドビードビー_。floatfloat_。bollanbollanストリングスStringbyteByttelongLongショート?トShot要点インテグインテグインテグドビーDoublefloatFloatbollanボロアダテDatedecimalBig DecimalbigdecimalBig DecimalobjectObjectmapMaphashmaphashMapリストListarraylistArayListコレクションコレクションiteratorIteratorこれで、別名の全部の使い方についてここで紹介します。簡単ですか?Mybatis別名の配置(2つの方法)mapperに対するマッピングxmlファイルsql文にはレスリングTypeがあります。修正前:受け入れエンティティ類のフルネームを書きました。mybatisのプロファイルに追加します。位置はconfigtionのラベルの下に追加する必要があります。
<configuration>
<typeAliases>
<typeAlias type="com.uu.bean.News" alias="jj"/>
</typeAliases>
変更後:追加後、mapperのマッピングファイルにフルネームで配置のシンプルな別名に変更します。第二の方法:コード内:
import org.apache.ibatis.type.Alias;
@Alias("jj")
public class News {
設定ファイルで:
<configuration>
<typeAliases>
<package name="com.uu.bean"/>
</typeAliases>
配置での名声と同じ効果が得られます。以上は個人の経験ですので、参考にしていただければと思います。