MyBatis 一对多映射

昨天自己完成了一个Mybatis 的数据库一堆多映射,特此记录,以免忘记。

首先数据库如下:

Table Command

Table Command_Content

为了达到范式要求,我将数据库分为了两个,一个是Command:里面记录了Command的ID和NAME等信息,其中ID为主键;另一个是Command_Content,里面记录了COMMAND_CONTENT的ID,内容,以及以其关联的Command的COMMAND_ID,其中ID为主键。(如上图所有内容都是指向Command 1 的所以,COMMAND_ID为1)。

接下来为MyBatis 配置SQL XML:

CommandContent.xml

<?xml version="1.0" encoding="UTF-8"?>


<mapper namespace="CommandContent">

  <resultMap type="bean.CommandContent" id="Content">
    <id column="ID" jdbcType="INTEGER" property="id"/>
    <result column="CONTENT_ID" jdbcType="VARCHAR" property="contentId"/>
    <result column="CONTENT" jdbcType="VARCHAR" property="content"/>
  </resultMap>

  


</mapper>

主要实现了类CommandContent里面变量与数据库列的映射关系。

Command.xml

<mapper namespace="Command">

  <resultMap type="bean.Command" id="Command">
    <id column="C_ID" jdbcType="INTEGER" property="id"/>
    <result column="NAME" jdbcType="VARCHAR" property="name"/>
    <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/>
    <collection property="contentList" resultMap="CommandContent.Content"/>
  </resultMap>

   <select id="queryCommandList" parameterType="bean.Command" resultMap="Command">
    SELECT a.ID C_ID,a.NAME,a.DESCRIPTION,b.ID,b.CONTENT,b.COMMAND_ID
    FROM command a left join command_content b
    on a.ID=b.COMMAND_ID
    <where>
      	<if test="name!=null &amp;&amp; !&quot;&quot;.equals(name.trim())">and a.NAME=#{name}</if>
    	<if test="description!=null &amp;&amp; !&quot;&quot;.equals(description.trim())">and a.DESCRIPTION like '%' #{description} '%'</if>
    </where>
  
  </select>


</mapper>

ResultMap 里面不仅包含了类Command变量与数据库的映射关系。还有一个<collection/>标签去关联需要包含的子集合也就是上面XML实现的CommandContent(因为我在类Command定义了包含关系如下图)。

下面是SQL语句: 

SELECT a.ID C_ID,a.NAME,a.DESCRIPTION,b.ID,b.CONTENT,b.COMMAND_ID
FROM command a left join command_content b
on a.ID=b.COMMAND_ID

注意为了防止在ResultMap 的column歧义,给相同数据名其中一个起了别名用来为MyBatis区别。对于Sql 语句来说,使用left join 将两个表一起select了条件是设计表时候的Command表的ID等于Command_Content表的COMMAND_ID。

下面的Where 里面加了if,是前面业务逻辑的需要,这里不过多赘述。

完成后别忘了在数据库配置XML里面映射这两个Sql配置。

其他的就由代码逻辑完成了。

猜你喜欢

转载自blog.csdn.net/puzimengya/article/details/82630915