Mybatis配置类别名
初学时
在我们一开始学习Mybatis的时候,每次编写一个select都要在返回类型里打一大串包名.类名来指定我们的实体类,就像这样:
<select id="getUserList" resultType="com.sanjin.pojo.User">
select * from user
</select>
如果每一条查询语句都要这么写,那真是十分的折磨,所以官方就给了我们几种设置别名的方法
配置别名
我们在官方文档的xml配置中,可以看到一个typeAliases(类型别名)
配置,这个配置是在mybatis的配置文件里使用的,一般这个配置文件我们都命名为 mybatis-config.xml
方法一
在配置文件(mybatis-config.xml或者是其他名字)中的正确位置加入以下代码
<typeAliases>
<typeAlias type="com.sanjin.pojo.User" alias="User"/>
</typeAliases>
里面的type
就是一开始我们用来指定位置的一大串玩意,alias
就是我们指定这玩意儿的别名
这样就可以把原先冗长的位置缩成一个单词了,这个别名不一定要和类名一样,但是为了好分辨还是不要太花里胡哨吧
设置别名后之前的select就可以改成
<select id="getUserList" resultType="User">
select * from user
</select>
如果你的别名是其他的,比如说baby
,那么resultType里也要用baby
才能对应
方法二
还有一种方法是通过包扫描的方式,指定一个包,它会自动扫描里面的类,然后使用时直接用类名就行了
<typeAliases>
<package name="com.sanjin.pojo"/>
</typeAliases>
像这样设置的意思就是扫描com.sanjin.pojo
这个包下的所有类
使用:
<select id="getUserList" resultType="user">
select * from user
</select>
那为什么User类要使用user呢?
这是官方文档推荐的,用这种方式的话类的开头字母要使用小写,但是使用User测试后其实也是可以的
使用了这种方法后看起来好像不能自定义其他名称了,只能类是什么名字就用什么,于是官方给出了一种基于包扫描配置下,可以通过注解来自定义别名的方法(注意:一定要使用方法二这种情况下,使用方法一时不能用注解法)
@Alias("abc")
public class User {
private int id;
private String username;
private String password;
...
这样别名就变成了abc
,这时使用User或者user都不行了,如果你这样设置后发现运行错误,发现异常里说的是User找不到,而不是abc,那么就要把mapper.xml里的所有使用到User或user
的地方改成abc
,这样程序就能正常运行了,比如:
<update id="updateUser" parameterType="User">
update user set username = #{username}, password = #{password} where id = #{id}
</update>
<select id="getUserListLikeUsername" parameterType="String" resultType="abc">
select * from user where username like #{username}
</select>
我打算使用getUserListLikeUsername
这个方法来测试别名是否可以使用,但是运行时异常。可以看到update里用的还是User
,这时我们就要把User改成abc,以此类推,把其他也改了,就行了,感觉还是方法一比较稳,不会有这么多奇奇怪怪的事
注意事项
mybatis的配置十分注重位置
我们配置时一定要遵循官网里给出的这个顺序,不然就会报错标红,更多细节也可以直接去看官方文档