IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mybatis中动态Sql标签库和ResultMap -> 正文阅读

[大数据]mybatis中动态Sql标签库和ResultMap

RESULTMAP

?作用:自定义映射关系,一般当表字段与实体类属性不一样时使用(例如 Emp实体类和表t_emp)

package com.atchengdu.mybatis.dao;

public class Emp {
    private  Integer eid;
    private String ename;
    private  Integer age;
    private  String  sex;
    private String email;
    private Integer did;
    private Dept dept;

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public Emp(Integer eid, String ename, Integer age, String sex, String email, Integer did) {
        this.eid = eid;
        this.ename = ename;
        this.age = age;
        this.sex = sex;
        this.email = email;
        this.did = did;
    }

    public Emp() {

    }

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getDid() {
        return did;
    }

    public void setDid(Integer did) {
        this.did = did;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                ", did=" + did +
                ", dept=" + dept +
                '}';
    }
}

?上面两个表的字段有一处不对应,在执行sql的时候如果不设置关系默认返回值:null

?

<?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">
<!--SQL标签-->
<mapper namespace="com.atchengdu.mybatis.mapper.Empmapper">
<!-- List<Emp>getallEmp();-->
    <select id="getallEmp" resultType="emp">
        select eid,e_name ename,age,sex,email,did from t_emp;
    </select>

    <!--List<Emp>getallEmpmap();-->
    <resultMap id="empmap" type="emp">
        <!--id设置主键关系-->
        <id property="eid" column="eid"></id>
        <!--result设置字段关系-->
        <result property="ename" column="e_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="did" column="did"></result>
    </resultMap>
    <select id="getallEmpmap" resultMap="empmap">
       select *from t_emp;
    </select>
   <!-- Emp getempanddept(Integer eid);-->
    <resultMap id="empmapanddept" type="emp">
        <!--id设置主键关系-->
        <id property="eid" column="eid"></id>
        <!--result设置字段关系-->
        <result property="ename" column="e_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="did" column="did"></result>
<!--        <result property="dept.did" column="did"></result>
        <result property="dept.dname" column="d_name"></result>-->
        <association property="dept" javaType="Dept">
            <id property="did" column="did"></id>
            <result property="dname" column="d_name"></result>
        </association>
    </resultMap>

    <select id="getempanddept" resultMap="empmapanddept">
     select *from  t_emp left join t_dept on t_emp.did =t_dept.did where t_emp.eid=#{eid};
    </select>


  <!--  Emp getempbystepone(Integer eid);-->
    <resultMap id="getempbystep" type="emp">
        <!--id设置主键关系-->
        <id property="eid" column="eid"></id>
        <!--result设置字段关系-->
        <result property="ename" column="e_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="did" column="did"></result>
        <association property="dept"  select="com.atchengdu.mybatis.mapper.Deptmapper.getDeptbystetwo"
               fetchType="eager"       column="did">
        </association>
        <!-- fetchType 设置是否延迟加载  select:执行的sql的方法名  column:条件  -->
    </resultMap>
    <select id="getempbystepone" resultMap="getempbystep">
        select *from t_emp where eid=#{eid};
    </select>

  <!-- List<Emp> getEmpbydid(@Param("did")Integer did);-->

    <select id="getEmpbydid" resultMap="empmap">
        select  *from t_emp where  did=#{did};
    </select>

</mapper>
package com.atchengdu.mybatis.mapper;

import com.atchengdu.mybatis.dao.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface Empmapper {
    //查询所有的信息
    List<Emp>getallEmp();
    List<Emp>getallEmpmap();

    //查询员工信息和部门信息
    Emp getempanddept(Integer eid);

    //分布查询
    Emp getempbystepone(@Param("eid") Integer eid);
    //查询员工信息
    List<Emp> getEmpbydid(@Param("did")Integer did);

}

动态SQL标签库(实现批量操作与多条件查询)

package com.atchengdu.mybatis.mapper;

import com.atchengdu.mybatis.dao.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface Dynaminmapper {
  //实现多条件查询
  List<Emp>getEmpbycondition(Emp emp);
  //测试chose when otherwise
  List<Emp>getEmpbychose(Emp emp);

  //实现批量删除
  void deleteEmpbyArray( @Param("eids") Integer [] eids);

  //实现批量添加的功能
  void insertmorebylist(@Param("emps") List<Emp>emps);
}
<?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">
<!--SQL标签-->
<mapper namespace="com.atchengdu.mybatis.mapper.Dynaminmapper">
   <!-- List<Emp>getEmpbycondition(Emp emp);-->
    <resultMap id="empmap" type="emp">
        <!--id设置主键关系-->
        <id property="eid" column="eid"></id>
        <!--result设置字段关系-->
        <result property="ename" column="e_name"></result>
        <result property="age" column="age"></result>
        <result property="sex" column="sex"></result>
        <result property="email" column="email"></result>
        <result property="did" column="did"></result>
    </resultMap>

    <!--动态Sql就是mybatis中的判断标签-->
  <!--  <select id="getEmpbycondition" resultMap="empmap">
        select  *from t_emp where 1=1
         <if test="ename!=null and ename!=''">
             e_name=#{ename}
         </if>
        <if test="age!=null and age!=''">
           and  age=#{age}
        </if>
        <if test="email!=null and email!=''">
            and  email=#{email}
        </if>
    </select>-->
       <!--where标签 当if条件有一个满足时就会生成where标签
          但是where标签不能将and写在条件后面
         -->
<!--    <select id="getEmpbycondition" resultMap="empmap">
        select  *from t_emp
        <where>
            <if test="ename!=null and ename!=''">
               and  e_name=#{ename}
            </if>
            <if test="age!=null and age!=''">
                and  age=#{age}
            </if>
            <if test="email!=null and email!=''">
                and  email=#{email}
            </if>
            <if test="did!=null and did!=''">
                or  did=#{did}
            </if>
        </where>
    </select>-->
    <select id="getEmpbycondition" resultMap="empmap">
        select  *from t_emp
        <trim prefix="where" suffixOverrides="and|or">
            <if test="ename!=null and ename!=''">
                  e_name=#{ename} and
            </if>
            <if test="age!=null and age!=''">
                  age=#{age} and
            </if>
            <if test="email!=null and email!=''">
                 email=#{email} and
            </if>
            <if test="did!=null and did!=''">
                 did=#{did}   or
            </if>
        </trim>
    </select>

  <!--  List<Emp>getEmpbychose(Emp emp);-->
    <select id="getEmpbychose" resultMap="empmap">
        select *from t_emp
        <where>
            <choose>
                <when test="ename!=null and ename !=''">
                    e_name=#{ename}
                </when>
                <when test="age!=null and age !=''">
                    age=#{age}
                </when>
                <when test="sex!=null and sex !=''">
                    sex=#{sex}
                </when>
                <when test="email!=null and email !=''">
                    email=#{email}
                </when>
                <otherwise>
                   did=#{did}
                </otherwise>
            </choose>
        </where>
    </select>

    <!--void deleteEmpbyArray(Integer [] eids);-->
    <delete id="deleteEmpbyArray">
        delete  from t_emp where eid in
          <foreach collection="eids" item="eid" separator="," open="(" close=")">
              #{eid}
    </foreach>
    </delete>
    <!--void insertmorebylist( List<Emp>emps);-->
    <insert id="insertmorebylist">
        insert  into t_emp values
         <foreach collection="emps" item="emp" separator=",">
             (null,#{emp.ename},#{emp.age},#{emp.sex},#{emp.email},#{emp.did})
         </foreach>
    </insert>
</mapper>

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:27:35  更:2022-03-16 22:31:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:20:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码