1.在上面的案例中,我们使用到的mapper映射文件只要一个,在配置文件中也是单独引入mapper文件的,而在实际开发环境中,往往需要写多个映射文件,所以这就需要在配置文件中来批量扫描引入mapper。
在进行批量扫描时,要遵循的一点是:确保mapper文件与mapper接口在同一目录下,且二者前缀名称是一致的,如下图:
在框架配置文件中配置批量扫描:
<mappers>
<package name="mapper"/>
</mappers>
2.Mapper代理开发方法中的selectOne和selectList
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。
3.在mybatis的配置文件中使用全局配置标签<settings>
在<settings>标签中可以配置框架的全局设置,比如缓存、懒加载模式等:
<settings>
<setting name="" value=""/>
</settings>
4.在mybatis的配置文件中使用typeAliases标签来进行类的别名定义,比如:
<typeAliases>
<typeAlias type="mapper.UserMapper" alias="user"/>
</typeAliases>
alias="user"/>
</typeAliases>
这样配置后,在mapper映射文件中的输入参数类型或者返回值类型如果是一个pojo,那么就不需要写该pojo的全限定名称了,而是可以用这个别名来代替它,
设置别名后:
<select id="findUserById" parameterType="java.lang.Integer" resultType="user">
select * from user where id=#{id}
</select>
resultType="user">
select * from user where id=#{id}
</select>
上面代码中的resultType使用别名代替。
此外,我们还可以进行批量定义别名,而在批量定义的时候,会默认以类名的小写来定义该类的别名:
<typeAliases>
<package name="mapper"/>
</typeAliases>
针对于mapper目录下的批量定义,默认以类名的小写来定义该类的别名。
5.mybatis的自动别名
上面我们在mapper映射文件中写sql时,凡是涉及到输入/输出类型时,都是写类型的全限定名的,其实针对于一些数据类型,mybatis是支持自动别名转换的,如下表:
所以在涉及到以上数据类型的输入输出参数时,并不需要我们去写全限定名,比如:
<select id="findUserByName" parameterType="string" resultType="model.User">
select * from user where uname like '%${value}%'
</select>
parameterType="string" resultType="model.User">
select * from user where uname like '%${value}%'
</select>
可以将java.lang.String替换为string