resultMap的写法
-
解决字段名和属性名不同的情况
- 在sql语句中起别名 select user_name username from user
- 配置下划线自动映射为驼峰
mybatis: configuration: map-underscore-to-camel-case: true
- 使用resultMap
<resultMap id="user" type="User"> <id column="id" property="id"/> <result column="user_name" property="userName"/> <result column="birthday" property="birthday"/> <result column="sex" property="userName"/> <result column="address" property="address"/> </resultMap>
一对一
Note: 当开启延迟加载,需要在实体类上加上@JsonIgnoreProperties(value = { “handler” })注解,否则异常<resultMap id="AccountResultMapStepByStep" type="Account"> <id column="id" property="id"></id> <result column="uid" property="uid"></result> <result column="money" property="money"></result> <association property="user" select="com.lxc.test.mapper.UserMapper.getUserById" column="uid" fetchType="lazy"> </association>
一对多:当使用join的时候必须用collection,因为user和account会合并,且会查询出来多条
当分步查询collection和association均可 因为在com.lxc.test.mapper.AccountMapper.getAccountByUserId查询出来的就是多条,但仅仅是account多条,user并没有多条,<resultMap id="userResultMapOneToManyStepByStep" type="User"> <id column="id" property="id"/> <result column="user_name" property="userName"/> <result column="birthday" property="birthday"/> <result column="sex" property="sex"/> <result column="address" property="address"/> <collection property="accounts" select="com.lxc.test.mapper.AccountMapper.getAccountByUserId" column="id" fetchType="lazy"> </collection> </resultMap> 或 <resultMap id="userResultMapOneToManyStepByStep" type="User"> <id column="id" property="id"/> <result column="user_name" property="userName"/> <result column="birthday" property="birthday"/> <result column="sex" property="sex"/> <result column="address" property="address"/> <association property="accounts" select="com.lxc.test.mapper.AccountMapper.getAccountByUserId" column="id" fetchType="lazy"> </association> </resultMap>