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方法!!

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


  • 相关阅读:
    Windows 7 任务计划程序
    '7z' 不是内部或外部命令,也不是可运行的程序
    [转]国外人气最旺的软件测试网站
    AutoIT查找文件内容并修改保存
    BUG 太少
    excel表格数据导入sqlserver数据库
    RoR常见问题
    [转]漫画:程序员的一生
    [转]RubyInstaller: Getting Started with Rails and SQLite3
    [转]C#多线程学习(一) 多线程的相关概念
  • 原文地址:https://www.cnblogs.com/a1111/p/12816327.html
Copyright © 2011-2022 走看看