失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > mybatis中解决属性名和字段名不一致的方法

mybatis中解决属性名和字段名不一致的方法

时间:2023-10-10 22:47:44

相关推荐

mybatis中解决属性名和字段名不一致的方法

1、在sql查询语句中,给字段起别名保持和实体类中的属性名一致

<select id="getAllEmpOld" resultType="Emp">select eid,emp_name empName,age,sex,email from t_emp</select>

2、设置全局配置,将_下划线自动映射为驼峰(在mybatis-config.xml中进行配置)

设置mybatis中的全局配置<settings><!--mapUnderscoreToCamelCase:将_自动映射为驼峰:emp_name -> empName--><!--这样就可以解决字段名和实体类属性名字不一致的问题--><setting name="mapUnderscoreToCamelCase" value="true"/></settings>

3、使用resultMap:设置自定义映射关系

<resultMap id="resultEmpMap" type="Emp"><!--resultMap:设置自定义映射关系type:设置映射关系中的实体类类型id 设置主键的映射关系 result普通字段的映射关系property:type设置中的实体类中属性的名字column:sql查询出来的字段名字--><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result></resultMap><!--List<Emp> getAllEmp();--><select id="getAllEmp" resultMap="resultEmpMap">select * from t_emp</select>

补充:解决多对一映射关系的三种方式

1、通过级联赋值的方式

<resultMap id="empAndDeptResultMapOne" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><result property="dept.did" column="did"></result><result property="dept.deptName" column="did_name"></result></resultMap><select id="getEmpAndDept" resultMap="empAndDeptResultMapOne">select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid = #{eid}</select>

2、通过association

<resultMap id="empAndDeptResultMapTwo" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><association property="dept" javaType="Dept"><!--先把查询出来的did dept_name和 javaType中设置的Dept类型进行映射然后将映射得到的Dept赋值给Emp中Dept属dept--><id property="did" column="did"></id><result property="deptName" column="dept_name"></result></association></resultMap><select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo">select * from t_emp left join t_dept on t_emp.did = t_dept.did where t_emp.eid = #{eid}</select>

3、通过分步查询(常用方式);

优点:可以实现延迟加载,但是必须在核心配置文件中开启lazyLoadingEnabled(延迟加载的全局开关,默认关闭false)设置全局配置信息,同时需要将aggressiveLazyLoading关闭(默认为false关闭,版本<=3.4.1默认为true开启);

EmpMapper

/*** 通过分布查询员工以及员工所对应的部门信息*//*** 分布查询第一步查询员工信息* @return*/Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);

EmpMapper.xml

<resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><!--设置分步查询的sql的唯一标识(namespace.SQLId或mapper接口的全类名.方法名column:设置分步查询的条件(第二步骤是根据第一步得到的员工信息中的did进行查询,所以这里的分布查询条件就是did然后第二步骤就根据第一步骤得到的did根据select中设置的唯一标识,找到对应的select语句然后进行相应的查询,得到部门信息)--><association property="dept"select="whut.zyf.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"column="did"></association></resultMap><!--Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);--><select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">select * from t_emp where eid = #{eid}</select>

DeptMapper

/*** 通过分步查询查询员工以及员工所对应的部门信息* 分布查询第二步:通过did查询员工所对应的部门信息*/Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);

DeptMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><mapper namespace="whut.zyf.mybatis.mapper.DeptMapper"><!--Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);--><!--因为在mybatis-config配置文件中已经设置了全局配置讲下划线转化为驼峰所以可以根据查询到的did 和 dept_name赋值给resultType中设置的Dept类型中对应的值--><select id="getEmpAndDeptByStepTwo" resultType="Dept">select * from t_dept where did = #{did}</select></mapper>

如果觉得《mybatis中解决属性名和字段名不一致的方法》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。