zoukankan      html  css  js  c++  java
  • mybatis关联配置(一对多配置)

          mybatis框架的关联配置:

        首先假设我们数据库中有两个表,一个表示move,另一个是moveType,move里面有一个字段typeid,与moveType表里面的id相对应。相信大家已经看出来了,一个moveType对应多个move,我们查询move字段的时候,必要的时候得显示moveType的内容,比如我的move的name是:《A计划》,那么对应的我的moveType就是动作片,而不是直接显示的id,有人说这不就是sql的内连接查询么?非也,你用sql的内连接是显示不出来MoveType里面的name的,那么,对于这种情况我们该怎么查询呢?怎么配置呢?

         别急,听我娓娓道来。

    为了不让大家迷糊,我还是写全吧,从最基本的实体类开始:

          首先我们创建一个Move的实体类,与数据库中的move表相对应,代码如下:

    public class Move {
    	private Long id;               //电影id
    	private MoveType type;         //电影类型
    	private String name;           //电影名称
    	private String actor;          //电影主演
    	private String director;       //电影导演
    	private Integer price;         //电影价格
    }

          在这里我们省略getter和setter方法,直接在创建一个实体类,MoveType,此类与数据库中的moveType表相对应,代码如下:

    public class MoveType {
    	private Integer  	id;
    	private String		typeName;
    }

          同样我们省略getter和setter方法,咱们在去建一个dao接口,IMoveDao,与Move类相对应,代码如下:

     

    public interface IMoveDao {
    	/**
    	 * 
    	* @Title: saveMove
    	* @Description: 添加电影
    	* @param @param move
    	* @param @return    设定文件
    	* @return int    返回类型
    	* @throws
    	 */
    	public int  saveMove(Move move);
    	/**
    	 * 
    	* @Title: queryMoveByTerm
    	* @Description: 动态查询电影
    	* @param @param mt
    	* @param @return    设定文件
    	* @return List<Move>    返回类型
    	* @throws
    	 */
    	public List<Move> queryMoveByTerm(MoveTerm mt);
    }

               接着在创建个IMoveTypeDao接口类,与实体类MoveType相对应:

    public interface IMoveTypeDao {
    	/**
    	 * 
    	* @Title: getAllMoveTypes
    	* @Description: 查询全部的电影类型
    	* @param @return    设定文件
    	* @return List<MoveType>    返回类型
    	* @throws
    	 */
    	public List<MoveType>  getAllMoveTypes();
    }
    

            光有了实体类和dao接口还远远不够,正儿八经的配置还没开始呢。

            我们先配置MoveDaoMapper.xml的映射文件,同样,此映射文件对应的是IMoveDao接口,这个比较复杂,咱们慢慢的来,代码如下:

        (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">

       (2)映射Move实体类的字段属性

    <!-- 映射Move实体类的字段属性 -->
    	<!-- type="move" 等价于type="org.entity.Move"-->
    	<resultMap type="move" id="moveMapper">
    		<id property="id" column="id"/>
    		<result property="name" column="name"/>
    		<result property="actor" column="actor"/>
    		<result property="director" column="director"/>
    		<result property="price" column="price"/>
    <!-- 关联MoveType实体类, -->
            <!-- type:实体类Move中的type对象 -->
            <!-- typeid:数据表Move的typeid -->
            <!-- selectMoveType:映射的是实体类MoveType -->
            <association property="type" column="typeid"
            select="selectMoveType" />
    </resultMap>
    

       (3)映射实体类MoveType

    <!-- 映射实体类MoveType -->
    	<!-- type="moveType" 等价于type="org.entity.MoveType"一样  -->
    	<resultMap id="moveTypeMapper"  type="moveType" >
    			<id property="id" column="id"/>
    			<result property="typeName" column="typename"/>
    	</resultMap>

       (4)对应的moveType的映射

    <!-- selectMoveType与上面MoveType实体类的select相对应 -->
    	<!-- moveTypeMapper与上面映射实体类MoveType的id相对应 -->
    	<select id="selectMoveType"  resultMap="moveTypeMapper">
    		select * from movetype where id=#{typeid}
    	</select>

       (5)下面就是咱们在Dao层里面方法的sql实现了

    	<!-- 添加电影 -->
    	<insert id="saveMove" parameterType="move">
    		insert into 
    		move
    		(id,typeId,name,actor,director,price)
    		values
    		(#{id},#{type.id},#{name},#{actor},#{director},#{price})
    	</insert>
    	
    	<!-- 动态查询电影 -->
    	<select id="queryMoveByTerm" 
    	parameterType="hashmap" 
    	resultMap="moveMapper">
    		select 
    		id,
    		typeid,
    		name
    		,actor
    		,director
    		,price
    		 from move 
    		  <where>
    			<if test="typeid!=null "> and typeid=#{typeid}</if>
    			<if test="name!=null"> and name=#{name}</if>
    			<if test="actor!=null"> and actor=#{actor}</if>
    			<if test="director!=null"> and director=#{director}</if>
    			<if test="smallPrice!=null"> and price between #{smallPrice}  and #{bigPrice}</if>
    		</where> 
    	</select>

       最后记得用<mapper></mapper>把上面的配置包起来。

    到此,我们的MoveDaoMapper.xml的配置就结束了,下面我们来配置一下MoveTypeDaoMapper.xml,请看代码:

    <?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="moveTypeDao">
    	<select id="getAllMoveTypes" resultType="moveType">
    		select * from movetype 
    	</select>
    </mapper>

          这里面只有一个查询所有电影类型的方法,所以比较简单,重点和难点还是都在MoveDaoMapper.xml里面,最后我在附加一个动态查询的条件类吧:

    public class MoveTerm {
    	private Long id;             //电影id
    	private MoveType type;      //电影类型
    	private String name;        //电影名称
    	private String actor;       //主演
    	private String director;    //导演
    	private Integer smallPrice; //最低价格
    	private Integer bigPrice;   //最高价格
    }
    

    省略getter和setter方法!!

         好了,配置到此结束,有意见的评论区交流,评论区见!!


  • 相关阅读:
    OPPO R9sPlus MIFlash线刷TWRP Recovery ROOT详细教程
    OPPO R11 R11plus系列 解锁BootLoader ROOT Xposed 你的手机你做主
    努比亚(nubia) M2青春版 NX573J 解锁BootLoader 并进入临时recovery ROOT
    华为 荣耀 等手机解锁BootLoader
    青橙 M4 解锁BootLoader 并刷入recovery ROOT
    程序员修炼之道阅读笔03
    冲刺8
    典型用户模板分析
    学习进度八
    冲刺7
  • 原文地址:https://www.cnblogs.com/a1111/p/7459757.html
Copyright © 2011-2022 走看看