zoukankan      html  css  js  c++  java
  • mybatis学习(resultMap的使用)(三)

    有时候有很多的情况下实体类与数据库中要查出来的数据不一致,那么这时候就可以使用mapper文件中的resultMap来处理。

    resultMap有很大的妙用,这里就简单介绍几种,

    (1)实体类与要查询的表中的字段不一致

    配置如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        
        
    <mapper namespace="TTest">
        <!-- 这个操作的处理是当没有dept的实体类时,用emp的实体来来承载dept表中的数据, -->
        <select id = "selectAll"  resultMap = "info">
                select deptno, dname from dept
        </select>
        
        <resultMap type="Emp" id="info"> <!-- id必须要和上面的resultMap相同    此处的Emp为别名,如果在配置文件中没有配置别名,就要使用Emp实体类的全路径名 
                              具体配置见我第一篇Mybatis的博客
    --> <!-- column属性是数据库中要查表的字段, property:是你这个实体类中相对应的属性 --> <!-- 一下为主键列的对应,主键列的注值要使用id --> <id column="deptno" property="empno"></id> <!-- 以下为普通字段的对应 --> <result column="dname" property="ename"/> </resultMap> </mapper>

    Emp的 实体类如下:

    package com.yc.mybatis;
    
    public class Emp {
        private int empno;
        private String ename;
        private int deptno;
    
        private Dept dept;
        @Override
        public String toString() {
            return "Emp [empno=" + empno + ", ename=" + ename + ", deptno=" + deptno + ", dept=" + dept + "]";
        }
    
        public int getEmpno() {
            return empno;
        }
        public void setEmpno(int empno) {
            this.empno = empno;
        }
        public String getEname() {
            return ename;
        }
    
        public void setEname(String ename) {
            this.ename = ename;
        }
    
        public int getDeptno() {
            return deptno;
        }
    
        public void setDeptno(int deptno) {
            this.deptno = deptno;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + deptno;
            result = prime * result + empno;
            result = prime * result + ((ename == null) ? 0 : ename.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Emp other = (Emp) obj;
            if (deptno != other.deptno)
                return false;
            if (empno != other.empno)
                return false;
            if (ename == null) {
                if (other.ename != null)
                    return false;
            } else if (!ename.equals(other.ename))
                return false;
            return true;
        }
    
        public Emp(int empno, String ename, int deptno, Dept dept) {
            super();
            this.empno = empno;
            this.ename = ename;
            this.deptno = deptno;
            this.dept = dept;
        }
    
        public Emp() {
            super();
        }
    
    
    
    
    }

    结果如下:

    2.通过一对一的关系来给实体类中dept属性来注值。使得dept这个属性不在为空,当然,要使注值不为空,必须要创建Dept的实体类

    Dept的实体类如下:

    package com.yc.mybatis;
    
    public class Dept {
    
        private int deptno;
        private String dname;
        private String loc;
        public int getDeptno() {
            return deptno;
        }
        public void setDeptno(int deptno) {
            this.deptno = deptno;
        }
        public String getDname() {
            return dname;
        }
        public void setDname(String dname) {
            this.dname = dname;
        }
        public String getLoc() {
            return loc;
        }
        public void setLoc(String loc) {
            this.loc = loc;
        }
        @Override
        public String toString() {
            return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
        }
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + deptno;
            result = prime * result + ((dname == null) ? 0 : dname.hashCode());
            result = prime * result + ((loc == null) ? 0 : loc.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Dept other = (Dept) obj;
            if (deptno != other.deptno)
                return false;
            if (dname == null) {
                if (other.dname != null)
                    return false;
            } else if (!dname.equals(other.dname))
                return false;
            if (loc == null) {
                if (other.loc != null)
                    return false;
            } else if (!loc.equals(other.loc))
                return false;
            return true;
        }
        public Dept(int deptno, String dname, String loc) {
            super();
            this.deptno = deptno;
            this.dname = dname;
            this.loc = loc;
        }
        public Dept() {
            super();
        }
        
        
        
        
    }
    Dept.java

     接下来使用mapper.xml文件来配置

    如下:

        <select id = "select02" resultMap="info02">
                select empno, ename, e.deptno, loc, dname from emp e, dept d where e.deptno = d.deptno
        </select>
                
        <resultMap type="Emp" id="info02" autoMapping="true"><!-- 一些表中的字段名和实体类中的属性名相同可以自匹配 -->
                <id column="empno" property="empno"></id> <!-- 主键必须要注值 -->
                <!-- 一个员工中只能有属于一个部门,从这个角度讲是属于一对一,使用association -->
                 <!-- 属性是emp实体类中要注值的属性 -->
                 <!-- javaType为dept的数据类型 -->
                <association property="dept" autoMapping="true" javaType="Dept" >
                    <id column="deptno" property="deptno"/><!-- 主键列的对应 -->
                </association>
        </resultMap>

    运行截图如下:

      

    resultMap的用处远远不止这些,不过核心就是使得实体类能够获得一些经过查询后处理的数据,而处理的过程,就是使用resultMap来映射。

  • 相关阅读:
    Android实现异步处理 -- HTTP请求
    死锁 android ANR
    查看死锁原因 /data/anr/traces.txt
    Android 实现在线程中联网
    Android有效解决加载大图片时内存溢出的问题
    Android的BUG(四)
    Path和ClassPath差异
    Zero Downtime Upgrade of Oracle 10g to Oracle 11g Using GoldenGate — 3
    不再年轻,尽管如此一遍
    javascript中间preventDefault与stopPropagation角色介绍
  • 原文地址:https://www.cnblogs.com/1998xujinren/p/11207805.html
Copyright © 2011-2022 走看看