Java学习-MyBatis学习(四)

代码下载

解决字段名与属性名不一致
  • ①使用别名emp_name empName解决字段名和属性名不一致
xml 复制代码
<select id="getAllEmpOld" resultType="Emp">
        <!--①使用别名emp_name empName解决字段名和属性名不一致-->
        select eid,emp_name empName,age,sex,email from t_emp;
    </select>
  • ②在全局配置文件中添加全局配置
xml 复制代码
<settings>
        <!-- 将_自动映射为驼峰,emp_name:empName-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
  • ③使用resultMap
xml 复制代码
<!--
         resultMap:设置自定义映射关系
         id:唯一标识
         type:设置映射关系中的实体类类型
         id:设置主键
         属性:
         property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名
         column:设置映射关系中的字段名,必须是SQL语句查询出的字段名
     -->
    <resultMap id="empResultMap" type="Emp">
        <id property="eid" column="eid"/>
        <id property="empName" column="emp_name"/>
        <id property="age" column="age"/>
        <id property="sex" column="sex"/>
        <id property="email" column="email"/>
    </resultMap>
    <!--③使用resultMap解决字段名和属性名不一致-->
    <select id="getAllEmp" resultMap="empResultMap">
        select * from t_emp;
    </select>
多对一映射关系
  • ①级联属性赋值
xml 复制代码
 <resultMap id="empAndDeptResultMapOne" type="Emp">
        <id property="eid" column="eid"/>
        <id property="empName" column="emp_name"/>
        <id property="age" column="age"/>
        <id property="sex" column="sex"/>
        <id property="email" column="email"/>
        <id property="dept.did" column="did"/>
        <id property="dept.deptName" column="dept_name"/>
    </resultMap>
    <!--Emp getEmpAndDept(@Param("eid") Integer eid);-->
    <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>
  • ②使用association
xml 复制代码
<resultMap id="empAndDeptResultMapTwo" type="Emp">
        <id property="eid" column="eid"/>
        <id property="empName" column="emp_name"/>
        <id property="age" column="age"/>
        <id property="sex" column="sex"/>
        <id property="email" column="email"/>
        <!-- 
        association:处理多对一的映射关系
        javaType:该属性的类型
        -->
        <association property="dept" javaType="Dept">
            <id property="did" column="did"/>
            <id property="deptName" column="dept_name"/>
        </association>
    </resultMap>
    <!--Emp getEmpAndDept(@Param("eid") Integer eid);-->
    <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>
<mapper namespace="com.lotus.mybatis.mapper.DeptMapper">
    <!--Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);-->
    <select id="getEmpAndDeptByStepTwo" resultType="Dept">
        select * from t_dept where did=#{did}
    </select>
</mapper>
  • ③分步查询
xml 复制代码
<resultMap id="empAndDeptByStepResultMap" type="Emp">
        <id property="eid" column="eid"/>
        <id property="empName" column="emp_name"/>
        <id property="age" column="age"/>
        <id property="sex" column="sex"/>
        <id property="email" column="email"/>
        <!--
        select:设置分步查询的SQL唯一标识(namespace,SQLID或mapper接口的全类名.方法名)
        column:设置分步查询的条件
        fetchType(eager|lazy):当开启全局延迟加载后,通过此属性手动控制延迟加载的效果,eager表示立即加载
        -->
        <association property="dept" select="com.lotus.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
                     column="did" fetchType="eager"></association>
    </resultMap>
    <!-- Emp getEmpAndDeptByStepOne(); -->
    <select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">
        select * from t_emp where eid=#{eid}
    </select>
java 复制代码
public interface EmpMapper {
/**
     * 通过分步查询查询员工以及员工所对应部门信息
     * 第一步,查询员工信息
     */
  Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);
  }
  public interface DeptMapper {
    /**
     * 通过分步查询查询员工以及员工所对应部门信息
     * 第一步,通过did查询员工对应的部门信息
     */
    Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);
}
一对多映射关系
  • ①使用collection标签
xml 复制代码
 <resultMap id="deptAndEmpResultMap" type="Dept">
        <id property="did" column="did"/>
        <id property="deptName" column="dept_name"/>

        <collection property="emps" ofType="Emp">
            <id property="eid" column="eid"/>
            <id property="empName" column="emp_name"/>
            <id property="age" column="age"/>
            <id property="sex" column="sex"/>
            <id property="email" column="email"/>
        </collection>
    </resultMap>
    <!--Dept getDeptAndEmp(@Param("did") Integer did);-->
    <select id="getDeptAndEmp" resultMap="deptAndEmpResultMap">
        select * from t_dept left join t_emp on t_dept.did = t_emp.did where t_dept.did=#{did}
    </select>
java 复制代码
/**
     * 获取部门及部门中所有员工信息
     */
    Dept getDeptAndEmp(@Param("did") Integer did);
//测试代码
 @Test
    public void testGetDeptAndEmp() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmp(1);
        System.out.println(dept);
    }
  • ②使用分步查询
xml 复制代码
<!---DeptMapper.xml>
<resultMap id="deptAndEmpByStepResultMap" type="Dept">
        <id property="did" column="did"/>
        <result property="deptName" column="dept_name"/>
        <collection property="emps"
                    select="com.lotus.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo"
                    column="did"></collection>
    </resultMap>
    <!--Dept getDeptAndEmpByStepOne(@Param("did") Integer did);-->
    <select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpByStepResultMap">
        select * from t_dept where did=#{did}
    </select>
<!-- EmpMapper.xml -->
<!--List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);-->
    <select id="getDeptAndEmpByStepTwo" resultType="Emp">
        select * from t_emp where did=#{did}
    </select>
java 复制代码
//----DeptMapper
/**
     * 分步查询①查询部门信息
     */
    Dept getDeptAndEmpByStepOne(@Param("did") Integer did);
//----EmpMapper
/**
     * 分步查询②根据did查询员工信息
     */
List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did);

//测试代码
 @Test
    public void testGetDeptAndEmpStep() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
        Dept dept = mapper.getDeptAndEmpByStepOne(1);
        System.out.println(dept);
    }
相关推荐
李慕婉学姐3 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆5 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin5 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20055 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉5 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国5 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882486 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈6 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_996 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹6 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理