获取自增主键

<insert id="func" useGeneratedKeys="true" keyProperty="id">

useGeneratedKeys表示获取自增主键

keyProperty表示放到哪里,一般放到传过来的实体类对应的属性中,所以执行前为null的主键对应属性,执行之后会被赋值为主键当前的值

如果keyProperty填的对应的属性不是对应的,也会将自增的主键填入该属性

 

对于对一或对多关系的处理:

在实体类中,对一就加一个单个的实体类属性,对多就加一个集合的实体类属性

 

自定义映射resultMap解决字段名与属性名不一致问题

1.给字段起别名

select emp_id empId,emp_name empName,age,gender from user

2.数据库中以下划线起名属性中以驼峰起名且严格对应时

可以在mybatis-config.xml文件中添加设置

<settings>

  <setting name="mapUnderscoreToCamelCase" value="true"/>

</settings>

 

3.自定义resultMap

在select标签中使用resultMap="mapId"代替resultType=“实体类”

需要在其之前自定义标签

<resultMap id="mapId" type="实体类">

  <id column="abc_def" property="abcDef"/>

  <result column="ghi_jkl property="ghiJkl"/>

</resultMap>

主键使用id标签,其他字段使用result标签

 

多对一映射关系

多表查询时

1.级联方式

<result column="dept_id" property="dept.deptId"/>

用点来对应属性内层的属性

 

2.association标签

association处理多对一映射关系(处理实体类类型的属性)

javaType设置要处理的属性的类型

 

<association property="dept" javaType="Dept">

  <id column="" property=""/>

  <result column="" property=""/>

</association>

association标签与外面的字段标签同级,在里面的子级别设置内部属性对应关系

 

3.分步查询

resultMap中使用association标签可以自动调用其他的函数

<association property="dept" select="查询函数的唯一标识比如(com.darkpar.DeptMapper.getDept)" column="字段名">

select自动调用下一个函数查出对应属性的结果并赋值

column选择已经查到的字段放入被select的函数中作为参数传递过去

 

<association property=

      select=

      column=

/>

 

分步查询的优势

延迟加载

开启后先查询被直接调用的函数获取的信息,如果访问到其他信息才会继续向后查询

<settings>

  <setting name="lazyLoadingEnabled" value="true"/>

  <setting name="aggressiveLazyLoading" value="false"/>

</settings>

 

按需加载:aggressiveLazyLoading

 

在association标签中有fetchType属性可以设置是否延迟加载eager|lazy

 

一对多映射关系

在resultType中使用collection标签,和association类似

<collection property="集合属性名" ofType"集合属性内的实体类名">

  <id>

  <result>

</collection>

 

collection也可以延迟加载

collection也可以分步查询

<collection property=

     select=

     column=

/>

 

注意的事

命名不同对应不上,要设置map去映射或者配置文件设置下划线转驼峰。

resultMap中可以使用association或collection进行分步查询或者联查后的属性对应。

分步查询时可以用延迟加载,不使用到的数据先不查询。