获取自增主键
<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进行分步查询或者联查后的属性对应。
分步查询时可以用延迟加载,不使用到的数据先不查询。
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决