zoukankan      html  css  js  c++  java
  • Mybatis

    前言

    记录下最近项目中用到的Mybatis实体类与数据结果集的映射方式。


    测试用例

    • 查询商品及其子项信息
    • Table
    CREATE TABLE `product` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
      `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    
    CREATE TABLE `product_item` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `title` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
      `product_id` int(10) unsigned NOT NULL,
      `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
    
    • ProductController.java
    /**
     * 查询商品明细
     * @param id
     * @return
     */
    @GetMapping("/{id}/detail")
    public ProductDetailVo getDetail(@PathVariable(value = "id") Integer id) {
        return productService.getDetail(id);
    }
    
    • ProductService.java
    public ProductDetailVo getDetail(Integer id) {
        return productMapper.getDetail(id);
    }
    
    • ProductMapper.java
    /**
     * 查询明细
     * @param id
     * @return
     */
    ProductDetailVo getDetail(Integer id);
    
    • Product.java
    @Getter
    @Setter
    public class Product {
        private Integer id;
        private String title;
        private Date createTime;
    }
    
    • ProductDetailVo.java
    @Data
    public class ProductDetailVo extends Product {
        private List<String> itemTitleList;
    }
    

    映射方式

    resultType使用as指定别名

    • ProductMapper.xml
    <select id="getDetail" resultType="com.coisini.mybatislearn.vo.ProductDetailVo">
         select a.id as id, a.title as title, a.create_time as createTime
             from product a
         where id = #{id}
     </select>
    
    • 查询结果:

    在这里插入图片描述


    reusultMap对应实体

    • ProductMapper.xml
    <resultMap id="BaseResultMap" type="com.coisini.mybatislearn.model.Product">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="create_time" property="createTime"/>
    </resultMap>
    
    <!-- extends="BaseResultMap" 继承BaseResultMap的所有属性 -->
    <resultMap id="DetailResultMap" type="com.coisini.mybatislearn.vo.ProductDetailVo" extends="BaseResultMap">
    
    </resultMap>
    
    <!-- reusultMap对应实体 -->
    <select id="getDetail" resultMap="DetailResultMap">
        select * from product
            where id = #{id}
    </select>
    
    • 查询结果:

    在这里插入图片描述


    Collection集合映射

    • 上述示例都没有查询Item子项,productItem子项是一对多的关系,这种情况多在java代码中处理,这里我们用Collection集合映射来查询一下
    • ProductMapper.xml
    <resultMap id="BaseResultMap" type="com.coisini.mybatislearn.model.Product">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="create_time" property="createTime"/>
    </resultMap>
    
    <!-- 非同名转换 autoMapping 自动映射 -->
    <resultMap autoMapping="true" id="DetailResultMap" type="com.coisini.mybatislearn.vo.ProductDetailVo">
        <id column="id" property="id"/>
        <!-- property 模型中映射的字段名 ofType 模型中映射的字段类型 -->
        <collection property="itemTitleList" ofType="java.lang.String">
            <constructor>
                <!-- column 指定数据集的字段名 -->
                <arg column="item_title"></arg>
            </constructor>
        </collection>
    </resultMap>
    
    <select id="getDetail" resultMap="DetailResultMap">
        select a.id, a.title, a.create_time,
               b.title as item_title
            from product a
                left join product_item b on a.id = b.product_id
        where a.id = #{id}
    </select>
    
    • 如上所示,可通过collection标签将查询出来的数据集映射到指定的模型上,查询结果如下:

    在这里插入图片描述


    - End -
    梦想是咸鱼
    关注一下吧
    以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
    作者:Maggieq8324
    本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
  • 相关阅读:
    atitit.ntfs ext 文件系统新特性对比
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx
  • 原文地址:https://www.cnblogs.com/maggieq8324/p/15243348.html
Copyright © 2011-2022 走看看