映射器
- 映射器是mybatis中最强大的部分,也是我们使用得最多的部分。mybatis是针对映射器构造的sql构建的轻量级框架,并且通过配置生成对应的javabean返回给调用者。所谓的配置即映射器
- select元素
select 是我们使用最多也是最强大的SQL。id:和Mapper的命名空间组合起来唯一,提供给Mybatis调用
parameterType:类的全命名或者别名,可以选择javabean、map
parameterMap:即将废弃的元素,不做讨论
resultType:类的全路径,结果集通过javabean的规范映射,或者定义为int double float等参数。也可以用别名,不能和resultMap同时使用
resultMap:映射集的引用,最复杂的元素,可以配置映射规则、级联、typeHandler等
flushCache:它作用在调用SQL后,是否清空mybatis之前查询的本地缓存和二级缓存,默认为false
useCache: 启动二级缓存开关,要求mybatis将此次结果缓存,默认true
timeout:设置超时参数,超时抛出异常,单位秒
<select id="countFirstName" parameterType="string" resultType="int">
select count(*) as total from t_user where name like concat(#{firstName},'%')
</select>
自动映射,在settings元素中配置autoMappingBehavior属性来设置策略
NONE:取消自动映射
PARTIAL:只会自动映射,没有定义嵌套结果集映射的结果集
FULL,会自动映射任意复杂的结果集
默认PARTIAL,使用FULL是嵌套映射,在性能上会下降
POJO开启驼峰命名规则在mapUnderscoreToCamelCase为true(settings要写在properties标签后面,typeAliases前面,否则会报错)
- 传递多个参数Map 映射器里面参数类型为 parameterType=”map”简单易用但是业务关联性不强可读性下降。mybatis提供注解参数的形式
- 还可以使用注解的方式 @Param 来传参数。映射器里面无需写入传参类型
public List<Role> findRoleByAnnotation(@Param("roleName") String roleName,@Param("note")String note);
如果参数过多,可读性依旧不高,参数将复杂 使用javabean传参,通过getter,setter方法设置参数。
使用resultMap映射结果集
resultMap是映射器里面最复杂的元素
配置resultMap id,type定义哪个javabean
通过id元素定义主键insert元素
mybatis执行之后会返回一个整数,以表示进行操作后插入的记录数
主键回填和自定义。
keyProperty属性指定哪个是主键字段
useGeneratedKeys指定mybatis这个主键是否使用数据库内置策略生成如果我们取消了mysql的自增主键这种方式将会失效
解决方案
使用我们自己的规则生成主键
<insert id="insertRoleOutKeyUser" parameterType="role" useGeneratedKeys="true" keyProperty="id">
<selectKey keyProperty="id" resultType="long" order="BEFORE">
select if(max(id) is null,1,max(id)+1) as newId from t_role
</selectKey>
insert into t_role(id,role_name,note)
values (#{id},#{roleName},#{note})
</insert>
- update和delete元素
执行后返回一个整数表示影响记录条数 - sql元素
定义一段sql,其他sql语句引用他以减少工作量
<sql id="role_columns">
id,role_name,note
</sql>
select <include refid="role_columns"/> from t_role
级联
mybatis中级联分为三种,association、collection和discriminator
association:一对一。如中国公民和身份证号码属于一对一
collection:一对多。 班级和学生属于一对多。
discriminator:鉴别器。根据实际选择采用哪个类作为实例。允许特定条件去关联不同的结果集。association
- 3.