• mybatis 高级映射


    方法一 连接表查询

    案例:查询所有订单信息及订单下的订单明细信息。
    订单信息与订单明细为一对多关系。
    使用resultMap实现如下:

    • Sql语句:
    SELECT 
      orders.*,
      user.username,
      user.address,
      orderdetail.id orderdetail_id,
      orderdetail.items_id,
      orderdetail.items_num
    FROM
      orders,user,orderdetail
    WHERE orders.user_id = user.id 
    AND orders.id = orderdetail.orders_id
    
    
    • 定义po类
      在Orders类中加入User属性。
      在Orders类中加入List orderdetails属性

    • Mapper.xml

    <select id="findOrdersDetailList" resultMap="userorderdetailmap">
    	SELECT
    	orders.*,
    	user.username,
    	user.address,
    	orderdetail.id orderdetail_id,
    	orderdetail.items_id,
    	orderdetail.items_num
    	FROM orders,user,orderdetail
    	WHERE orders.user_id = user.id
    	AND orders.id = orderdetail.orders_id
    </select>
    
    
    • 定义resultMap

    collection部分定义了查询订单明细信息。
    collection:表示关联查询结果集
    property="orderdetails":关联查询的结果集存储在cn.itcast.mybatis.po.Orders上哪个属性。
    ofType="cn.itcast.mybatis.po.Orderdetail":指定关联查询的结果集中的对象类型即List中的对象类型。
    的意义同一对一查询。

    方法二 使用子查询

    案例:查询所有动态以及对应的图片。
    动态与图片为一对多关系。

    使用resultMap实现如下:

    • Sql语句:
    SELECT t_dynamics .dynamics_id "dynamicsId", t_dynamics .type "type", t_dynamics .title "title", t_dynamics .text "text", t_dynamics .pure_text "pureText", t_dynamics .origin "origin", t_dynamics .add_user "addUser", t_dynamics .add_date "addDate", t_dynamics .sort "sort" 
    FROM t_dynamics 
    WHERE 1=1 AND t_dynamics .type = ? 
    ORDER BY add_date ASC LIMIT 0,10 
    
    SELECT * 
    FROM t_attachment 
    WHERE content_id=? 
    
    
    • 定义po类
      在DynamicsCustom类中加入List images属性

    • 数据库表

    CREATE TABLE `t_dynamics` (
      `dynamics_id` varchar(50) NOT NULL COMMENT '动态表',
      `type` int(11) DEFAULT NULL COMMENT '类别(1.校园动态 2.捐赠动态)',
      `images` text COMMENT '图片url',
      `title` varchar(50) DEFAULT NULL COMMENT '标题',
      `text` text COMMENT '正文',
      `origin` varchar(50) DEFAULT NULL COMMENT '来源',
      `add_user` varchar(50) DEFAULT NULL COMMENT '添加人',
      `add_date` datetime DEFAULT NULL COMMENT '添加时间',
      `sort` int(11) DEFAULT NULL COMMENT '用于排序',
      `pure_text` text COMMENT '纯文本',
      PRIMARY KEY (`dynamics_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    CREATE TABLE `t_attachment` (
      `attachment_id` varchar(50) NOT NULL COMMENT '附件表',
      `content_id` varchar(50) DEFAULT NULL,
      `file_path` varchar(200) DEFAULT NULL COMMENT '文件路径',
      `narrow_image_path` varchar(200) DEFAULT NULL COMMENT '压缩图路径',
      `file_type` varchar(11) DEFAULT NULL COMMENT '文件类型: 头像:0;商品图片:1;捐赠物品图片:2;首页轮播图:3',
      PRIMARY KEY (`attachment_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    
    • Mapper.xml
        <sql id="findDynamicsSql">
            SELECT
            <include refid="FieldAlias"/>
            FROM <include refid="tableName"/>
        </sql>
        <!-- 按要求查找 1.校园动态 2.捐赠动态-->
        <select id="findDynamicsByQueryCondition" resultMap="loadImagesByContentId" parameterType="QueryCondition">
            <include refid="findDynamicsSql"/>
            WHERE 1=1
            <if test="type != null and type != '' and type != 'all' ">
                AND <include refid="tableName"/>.${type} = #{queryValue}
            </if>
            <if test="secondType != null and secondType != '' and secondType != 'all' ">
                AND <include refid="tableName"/>.${secondType} = #{secondQueryValue}
            </if>
            <if test="secondType != null and secondType != '' and secondType != 'all' ">
                AND <include refid="tableName"/>.`title` like CONCAT(CONCAT('%', #{indistinctField}),'%')
            </if>
            <if test="orderBy != null and orderBy != '' ">
                ORDER BY ${orderBy} ${order}
            </if>
            LIMIT ${index},${size}
        </select>
    
        <!-- 查找 com.usedmarket.dao.AttachmentDao.findByContentId -->
        <select id="findByContentId" resultType="Attachment">
            SELECT * FROM
            <include refid="tableName"></include>
            WHERE content_id=#{contentId}
        </select>
    
    
    • 定义resultMap
        <resultMap id="loadImagesByContentId" type="DynamicsCustom" autoMapping="true">
            <id column="dynamicsId" property="dynamicsId"/>
            <collection property="images" javaType="ArrayList" ofType="Attachment" autoMapping="true" column="dynamicsId" select="com.usedmarket.dao.AttachmentDao.findByContentId">
                <id column="attachment_id" property="attachmentId"/>
            </collection>
        </resultMap>
    
    
  • 相关阅读:
    如何阅读论文(译)
    Linux运维小知识
    认识Linux分区
    如何获取离线安装Chrome扩展程序的包
    Centos 7.4 下初探Zabbix安装
    尝试在Linux上部署Asp.net Core应用程序
    Centos 7.3下图文安装SQL Server
    Asp.net MVC Razor常见问题及解决方法
    轻量级高性能ORM框架:Dapper高级玩法
    Asp.net MVC 如何对所有用户输入的字符串字段做Trim处理
  • 原文地址:https://www.cnblogs.com/huangmp1024/p/6131140.html
Copyright © 2020-2023  润新知