我们在开始编辑Mybatis代码的时候,会用到很多类的全限定名来进行限定,但是这在很多地方是十分不方便的,而且还容易出现错误,因为是字符串,在编译阶段一般是检查不出来其中的错误,只有到执行的时候才会暴露出来,一是为了提高效率,而是为了减少错误,我们对这些类的全限定名来起一个简单的别名,是十分必要的。
配置别名
观察前面的代码:
<select id="findEmpById" parameterType="int" resultType="com.yht.bean.Emp">
select id, name, age,birthday, salary FROM emp WHERE id = #{id}
</select>
<select id="findAllEmp" resultType="com.yht.bean.Emp">
select id, name, age,birthday, salary FROM emp
</select>
我们在进行查询语句的时候,一定要用到全限定名,如果使用mapper模式进行开发,那么就会更多的使用全限定名,所以我们就是为了这些来进行配置别名的。
别名的配置就是利用上篇介绍mybatis-config.xml配置文件中的 typeAliases配置:
下面是Mybatis文档中推荐的格式:
在进行配置添加:
<typeAliases>
<typeAlias alias="Emp" type="com.yht.bean.Emp" />
</typeAliases>
然后再mapper配置文件中进行更改:
<select id="findEmpById" parameterType="int" resultType="Emp">
select id, name, age,birthday, salary FROM emp WHERE id = #{id}
</select>
执行:
这里是不区分带小写的:
比如这样:
<select id="findEmpById" parameterType="int" resultType="eMp">
select id, name, age,birthday, salary FROM emp WHERE id = #{id}
</select>
运行:
依旧也是可以的。
还有一种配置方式为:
<typeAliases>
<package name="com.yht.bean"/>
</typeAliases>
就是把存储实体类的包名给设置一下,然后这里默认的下面的所有的类都可以直接使用类名来当做别名,同样忽略大小写。
依旧可以成功。
当然,我们也可以进行自定义,自定义方式为,在bean类的类上面利用注解来进行声明别名。(配合上面package的别名设置方式)
@Alias("MyEmp")
public class Emp {
private int id ;
private String name ;
private int age ;
private Date birthday ;
private BigDecimal salary ;
}
<select id="findEmpById" parameterType="int" resultType="MyEmp">
select id, name, age,birthday, salary FROM emp WHERE id = #{id}
</select>
也依旧可以成功!
另外,Mybatis中还设置了很多的别名使用:
比如我们在进行这样的查询语句:
<select id="findEmpCount" resultType="java.lang.Integer">
select count(*) from emp
</select>
我们的查询结果为int型,但是这种类型众多,我们每次使用的时候都自己去设置别名太过于麻烦和降低效率,所以Mybatis给我们内置了别名:
其中上面八种基本数据类中都是前面加上下划线,后面的都是开头大小字母变为小写,只有 BigDecimal是更改了格式。
还有Integer有两个别名。
我们再次去程序里尝试:
<select id="findEmpCount" resultType="_int">
select count(*) from emp
</select>
测试类:
@Test
public void testFindEmpCount(){
SqlSession sqlSession = MybatisUtil.getSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
int count = empMapper.findEmpCount();
System.out.println(count);
}
其实对于Int型参数,因为比较常用,所以在使用的时候,对于使用的时候,参数和结果是int ,_int ,Integer,任何都可以,都可以自动转换
总结来说,就是Mybatis给了我们给类的自定义别名的方法,利用typeAliases配置来进行设置别名。
第一种方式是利用 typeAlias来对单个类来进行别名。
第二种方式是利用 package来对整个包的类来进行别名设置,下面的所有类都可以默认使用类名作为别名直接使用,还可以在类中利用@Alias注解方式进行自定义别名设置。
还有对常用数据类型的内建别名使用。