工作原理
映射器概述
元素名称 | 描述 | 备注 |
---|---|---|
select | 自定义参数、返回集 | |
insert | 有keyProperty属性:返回值将作为该属性的值;如:keyProperty=“uid”; useGeneratedKeys:该属性将使MyBatis使用JDBC的getGeneratedKeys()方法获取由数据库内部生产的主键,如MySQL、SQL Server等自动递增的字段,其默认值为false。 | 返回插入的行数这个整数 |
update | 返回更新的行数 | |
delete | 返回删除的行数 | |
sql | 定义一部分SQL,可多次引用 | <sqld="">SQL语句< /sql>;引用:< include refid=“”/> |
resultMap | 描述从数据库结果集中加载对象 | 提供映射规则 |
属性 | 描述 |
---|---|
id | |
parameterType | 传入SQL语句的参数类型:(mapj接口传参)map,(model对象传参)类路径 |
resultType | SQL语句执行后返回的类型 |
resultMap | 和resultType一样 |
flushCache | 调用SQL是否清空之前的本地缓存和二级缓存,默认false |
useCache | 默认true,查询结果存入二级缓存中 |
timeout | 超时参数 |
fetchSize | 获取记录的总条数 |
statementType | 使用哪个JDBC的Statement:STATEMENT,PREPARED,CALLABLE |
resultSetType | ResultSet接口取值:FORWOAD_ONLY(只向前访问),SCROLL_SENSITIVE(双向滚动不及时更新),SCROLL_INSENSITIVE(双向滚动及时更新) |
自定义主键:
1需要这条新增数据的主键
mybatis可以将insert的数据的主键返回,直接拿到新增数据的主键,以便后续使用;keyProperty与数据库的id列同名。
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
2 如果数据库不支持主键自动递增
解决方法用MyBatis的< selectKey> 先定义主键,在定义SQL语句
<insert>
<selectKey keyProperty="uid" resultType="Integer" order="BEFORE">
selsect if(max(uid) is null,1,max(uid)+1)as uidfrom user
</selectKey>
insert into user (uid,uname,usex) values(#{uid},#{uname},#{usex})
</insert>
其中order 表示执行顺序;before 在插入前执行,after在插入后执行。
结果映射集
定义映射规则、级联更新、定义类型转换器。
<resultMap type="Model类路径" id="">
<constructor><!-- 类在实例化时,用来注入结果到构造方法 -->
<idArg/><!-- ID参数,结果为ID -->
<arg/><!-- 注入到构造方法的一个普通结果 -->
</constructor>
<id/><!-- 用于表示哪个列是主键 -->
<result property="类中属性" column="数据库列名"/><!-- 注入到字段或JavaBean属性的普通结果 -->
<association property=""/><!-- 用于一对一关联 -->
<collection property