一.mybatis主配置文件SqlMapConfig.xml进阶配置
SqlMapConfig.xml中配置文件的内容和顺序如下:(数字代表层级)
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
(2)environment(环境子属性对象)
(3)transactionManager(事务管理)
(3)dataSource(数据源)
mappers(映射器)
标注粗体的个人认为比较重要,故在此记录。
1.properties属性:可以用来引用外部的属性配置文件,常见的有数据库信息的配置文件db.properties,引用如下:
2.typeAliases:类型别名,可以用来简化在SQL映射文件中输入输出参数的书写,且别名大小写不敏感。mybatis内置的支持别名列表如下:
别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
map Map
用户也可以自定义别名,语法如下:可以单个定义,可以使用扫描包的方式定义
第一种:
(后面两种在动态代理开发方式中使用,接下来讲解)
第二种:
第三种:
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。。
二.SQL映射文件进阶配置--动态SQL
1.If标签:可用来为多条件查询时做非空校验
2.SQL片段:可将重复的SQL抽取出来,使用时用include引用即可,以达到SQL重用的目的
FROM `user`
AND sex = #{sex}
AND username LIKE
'%${username}%'
id, username, birthday, sex, address
3.foreach标签:向sql传递数组或者list,mybatis使用foreach解析,例如:传入的queryVo具有一个id的list集合
三.Mybatis使用方式进阶--mapper动态代理接口方式
1.开发规范说明:Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
步骤一:重定义SQL映射文件,UserMapper.xml
步骤二:定义一个与SQL映射文件相对应的UserMapper接口
public interface UserMapper {
/**
* 根据id查询
*/
User queryUserById(int id);
}
步骤三:在主配置文件SqlMapConfig.xml文件中加载SQL映射文件
小结:使用动态接口开发具有很多的好处,mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。开发者直接通过接口调用方法即可。
mybatis官方提供了Mapper自动生成工具,可以通过配置generator.xml文件,根据数据库表自动生成pojo类和mapper映射文件,接口文件。配置文件定义如下
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
targetProject=".\src">
targetProject=".\src">
1. 逆向工程生成的代码只能做单表查询
2. 不能在生成的代码上进行扩展,因为如果数据库变更,需要重新使用逆向工程生成代码,原来编写的代码就被覆盖了。