mybatis中的关联查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中的关联查询相关的知识,希望对你有一定的参考价值。

1》在实体映射层中引入关联对象

package com.jinglin.hotelsup.model;

import java.io.Serializable;

public class Goodsinfo implements Serializable{
       private Integer goodsid;
       private Integer companyid;
       private Integer goodstypeid;
       private Integer unitid;
       private String createuser;
       private String updateuser;
       private String commdityid;
       private String commdityname;
       private String describeit;
       private String createtime;
       private String updatetime;
       private String remark;
       private String ifdelete;
       //关联查询
       private Unit unit;
       private Goodstype goodstype;
       private Company company;
       
    public Unit getUnit() {
        return unit;
    }
    public void setUnit(Unit unit) {
        this.unit = unit;
    }
    public Goodstype getGoodstype() {
        return goodstype;
    }
    public void setGoodstype(Goodstype goodstype) {
        this.goodstype = goodstype;
    }
    public Company getCompany() {
        return company;
    }
    public void setCompany(Company company) {
        this.company = company;
    }
    public Integer getGoodsid() {
        return goodsid;
    }
    public void setGoodsid(Integer goodsid) {
        this.goodsid = goodsid;
    }
    public Integer getCompanyid() {
        return companyid;
    }
    public void setCompanyid(Integer companyid) {
        this.companyid = companyid;
    }
    public Integer getGoodstypeid() {
        return goodstypeid;
    }
    public void setGoodstypeid(Integer goodstypeid) {
        this.goodstypeid = goodstypeid;
    }
    public Integer getUnitid() {
        return unitid;
    }
    public void setUnitid(Integer unitid) {
        this.unitid = unitid;
    }
    public String getCreateuser() {
        return createuser;
    }
    public void setCreateuser(String createuser) {
        this.createuser = createuser;
    }
    public String getUpdateuser() {
        return updateuser;
    }
    public void setUpdateuser(String updateuser) {
        this.updateuser = updateuser;
    }
    public String getCommdityid() {
        return commdityid;
    }
    public void setCommdityid(String commdityid) {
        this.commdityid = commdityid;
    }
    public String getCommdityname() {
        return commdityname;
    }
    public void setCommdityname(String commdityname) {
        this.commdityname = commdityname;
    }
    public String getDescribeit() {
        return describeit;
    }
    public void setDescribeit(String describeit) {
        this.describeit = describeit;
    }
    public String getCreatetime() {
        return createtime;
    }
    public void setCreatetime(String createtime) {
        this.createtime = createtime;
    }
    public String getUpdatetime() {
        return updatetime;
    }
    public void setUpdatetime(String updatetime) {
        this.updatetime = updatetime;
    }
    public String getRemark() {
        return remark;
    }
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getIfdelete() {
        return ifdelete;
    }
    public void setIfdelete(String ifdelete) {
        this.ifdelete = ifdelete;
    }      
}

2》在同目录下的GoodsinfoMapper下配置查询结果集

3》编写关联查询语句

<?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="com.jinglin.hotelsup.dao.imp.GoodsinfoMapper">
    <!-- 表示关联表的查询 -->
    <sql id="getsql">
        select t.* from 
          (Select rownum as rn,gs.*,
                gp.goodstypename,
                c.companyname,c.address,
                u.code
                From goodsinfo gs inner join goodstype gp
                on gs.goodstypeid = gp.goodstypeid
                inner join company c 
                on gs.companyid = c.companyid
                inner join unit u
                on gs.unitid = u.unitid
            where gs.ifdelete=N)t
    </sql>
    <select id="getmodel" resultMap="goodsinfo">
      <include refid="getsql"></include>
       where t.ifdelete=N and t.goodsid=#{id}
    </select>
    <!-- 配置结果集 -->
    <resultMap type="Goodsinfo" id="goodsinfo">
        <!-- 配置主键 -->
        <id column="goodsid" property="goodsid"></id>
        <result column="goodstypeid" property="goodstypeid"></result>
        <result column="companyid " property="companyid "></result>
        <result column="unitid" property="unitid"></result>
        <result column="createuser" property="createuser"></result>
        <result column="updateuser" property="updateuser"></result>
        <result column=" commdityid" property="commdityid"></result>
        <result column="commdityname" property="commdityname"></result>
        <result column="describeit" property="describeit"></result>
        <result column="createtime" property="createtime"></result>
        <result column="updatetime" property="updatetime"></result>
        <result column="remark" property="remark"></result>
        <result column="ifdelete" property="ifdelete"></result>
        <!-- 配置关联实体数据 -->
        <association property="goodstype" javaType="Goodstype">
          <id property="goodstypeid" column="goodstypeid"></id>
          <result property="goodstypename" column="goodstypename"/>
          <result property="ifdel" column="ifdel"/>
        </association>
        <association property="company" javaType="Company">
          <id column="companyid" property="companyid"></id>
          <result column="companyname" property="companyname"/>
          <result column="address" property="address"/>
          <result column="ifdel" property="ifdel"></result>
        </association>
        <association property="unit" javaType="Unit">
          <id column="unitid" property="unitid"/>
          <result column="code" property="code"/>
          <result column="ifdel" property="ifdel"/>
        </association>
    </resultMap>
    
    <!-- 查询所有的数据 -->
    <select id="getlist" resultMap="goodsinfo">
        <include refid="getsql"></include>
          where t.ifdelete=N
    </select>
    
    <!-- 查询带分页和查询条件的 -->
    <select id="getgoodslistbypage" resultMap="goodsinfo">
        <include refid="getsql"></include>
         where t.ifdelete=N
         <if test="goodsinfo.goodsid!=null">
             and t.goodsid=#{goodsInfo.goodsid}
         </if>
         <if test="goodsinfo.commdityname!=null and goodsinfo.commdityname!=‘‘">
             and t.commdityname like %${goodsInfo.commdityname}%
         </if>
         <!-- 查询时间 -->
         <if test="goodsinfo.createtime!=null and goodsinfo.createtime!=‘‘">
             and t.createtime like %${goodsInfo.createtime}%
         </if>
          <![CDATA[
             and t.rn>=#{startindex}
             and t.rn<=#{endindex}
          ]]>
    </select>
    
    <!-- 数据的插入操作 -->
    <insert id="additem" useGeneratedKeys="true" keyColumn="goodsid"  keyProperty="goodsid" parameterType="GoodsInfo">
         insert into goodsinfo(goodsid,companyid,goodstypeid,unitid,
createuser,updateuser,commdityid,
commdityname,describeit,createtime,
updatetime,remark)
         values(userseq.nextval,#{companyid},#{goodstypeid},#{unitid},
#{createuser},#{updateuser},#{commdityid},
#{commdityname},#{describeit},#{createtime},
#{updatetime},#{remark})
    </insert>
    <!-- 数据的删除 -->
    <update id="deleteitem">
         update goodsinfo set ifdelete=Y where goodsid=#{id}
    </update>
    <!-- 数据的更新 -->
    <update id="updateitem" parameterType="Goodsinfo">
         update goodsinfo
         <set>
             <if test="companyid!=null">
                companyid=#{companyid},
             </if>
             <if test="goodstypeid!=null">
                goodstypeid=#{goodstypeid},
             </if>
             <if test="unitid!=null">
                unitid=#{unitid},
             </if>
             <if test="createuser!=null">
                createuser=#{createuser},
             </if>
             <if test="updateuser!=null">
                updateuser=#{updateuser},
             </if>
             <if test="commdityid!=null">
                commdityid=#{commdityid},
             </if>
             <if test="commdityname!=null">
                commdityname=#{commdityname},
             </if>
             <if test="describeit!=null">
                describeit=#{describeit},
             </if>
             <if test="createtime!=null">
                createtime=#{createtime},
             </if>
             <if test="updatetime!=null">
                updatetime=#{updatetime},
             </if>
             <if test="remark!=null">
                remark=#{remark},
             </if>
             <if test="ifdelete!=null">
                ifdelete=#{ifdelete}
             </if>
         </set>
            where goodsid=#{goodsid}
    </update>
</mapper>

ps:rownum as rn是为了做分页查询

          <![CDATA[
             and t.rn>=#{startindex}
             and t.rn<=#{endindex}
          ]]>
第一行代码和第四行是为了向程序解释>=和<=是逻辑表达式而不是标签

此为多对一的查询,若一对多,则配置结果集的标签为
<collection property="" ofType=""></collection>





以上是关于mybatis中的关联查询的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis

Mybatis--02

MyBatis学习11MyBatis中的延迟加载

mybatis中的关联查询

MyBatis学习11MyBatis中的延迟加载

mybatis第二天——大纲待更新