文档 github MybatisApplication.java
可使用java注解定义mapper,仅能提供简易的功能
基本使用: annotation 文档
可使用xml定义mapper,提供完整的功能
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="...">
</mapper>
NOTE:
- xml与java接口目录层级需一样,但是xml根目录为
resources
, java接口根目录为java
- namespace(命名空间)为java接口引用,必须指定, 这样可以进行接口绑定
默认,采用名称读写枚举
采用Enum.ordinal()
读写枚举,需指定javaType
- xml UserMapper.xml
参数:
结果:
#{user.gender,javaType=com.example.base.Gender,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
<result column="gender" property="gender" javaType="com.example.base.Gender" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
- java UserMapper.java
参数: 同xml
结果:
@Results(@Result(javaType = Gender.class, typeHandler = EnumOrdinalTypeHandler.class, column = "gender", property = "gender"))
insert、update、delete进行写操作。
其中返回内容为变更行数。
useGeneratedKeys: (仅适用于insert和update)这会令MyBatis使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键(比如:像MySQL和SQL Server这样的关系型数据库管理系统的自动递增字段),默认值:false。 keyProperty: (仅适用于insert和update)指定能够唯一识别对象的属性,MyBatis会使用getGeneratedKeys的返回值或insert语句的selectKey子元素设置它的值,默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。 keyColumn: (仅适用于insert和update)设置生成键值在表中的列名,在某些数据库(像PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。
使用@Options
定义属性,内容同mapper.xml
select进行读操作。
其中返回内容为读取内容。
<constructor/>
: 构造方法, 将会调用相同参数的构造方法创建返回对象<idArg/>
: 同<id/>
<arg/>
: 同<result/>
<id/>
: 显示标记出作为id的元素可提高性能<result/>
: 一般字段<association/>
: 对象映射<collection/>
: 集合映射<discriminator/>
: 泛型映射: 根据列值进行不同的结果映射<case/>
: 判断类型
执行另一个select查询获取结果
- column: 原查询的字段, 可使用
{prop1=col1,prop2=col2}
语法传递多个值及设置参数名称 - select: 使用的
<select/>
查询的id - fetchType: lazy-懒加载,eager-积极加载
从当前结果集中选取字段映射, 标签内元素同resultMap
- resultMap: 引用的resultMap
- columnPrefix: 字段前缀
<discriminator javaType="int" column="u_gender">
<case value="0" resultMap="man"/>
<case value="1" resultMap="woman"/>
</discriminator>
当u_gender
为0
时使用id为man
的resultMap
当u_gender
为1
时使用id为woman
的resultMap
NOTE: 使用鉴别器时,该resultMap的其他标签将会忽略
基本使用: PluginMain.java 插件: Plugin.java
@Intercepts({
@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class Plugin implements Interceptor{
@Override
public Object intercept(Invocation invocation) throws Throwable {
// TODO
return invocation.proceed();
}
}
- 创建类实现
org.apache.ibatis.plugin.Interceptor
接口,实现intercept
处理具体逻辑 - 添加
org.apache.ibatis.plugin.Intercepts
注解 - 在
org.apache.ibatis.plugin.Intercepts
注解添加org.apache.ibatis.plugin.Signature
注解,表示需要拦截的方法- type为具体类,可选值为:
org.apache.ibatis.executor.Executor
、org.apache.ibatis.executor.parameter.ParameterHandler
、org.apache.ibatis.session.ResultHandler
、org.apache.ibatis.executor.statement.StatementHandler
- method为方法名称,args为参数。两者共同确定拦截的方法
- type为具体类,可选值为:
- Spring注册该类为bean