zoukankan      html  css  js  c++  java
  • 4月9日

    11、一对多处理

    一个老师多个学生;

    对于老师而言,就是一对多的关系;

    1. 环境搭建

    实体类

    @Data
    public class Student {
       private int id;
       private String name;
       private int tid;
    }
    123456
    @Data
    public class Teacher {
       private int id;
       private String name;

       //一个老师拥有多个学生
       private List<Student> students;
    }
    12345678

    2. 按照结果嵌套嵌套处理

    <!--按结果嵌套查询-->
    <select id="getTeacher" resultMap="StudentTeacher">
      SELECT s.id sid, s.name sname,t.name tname,t.id tid FROM student s, teacher t
      WHERE s.tid = t.id AND tid = #{tid}
    </select>
    <resultMap id="StudentTeacher" type="Teacher">
       <result property="id" column="tid"/>
       <result property="name" column="tname"/>
       <!--复杂的属性,我们需要单独处理 对象:association 集合:collection
       javaType=""指定属性的类型!
       集合中的泛型信息,我们使用ofType获取
       -->
       <collection property="students" ofType="Student">
           <result property="id" column="sid"/>
           <result property="name" column="sname"/>
           <result property="tid" column="tid"/>
       </collection>
    </resultMap>
    123456789101112131415161718

    小结

    1. 关联 - association 【多对一】

    2. 集合 - collection 【一对多】

    3. javaType & ofType

      1. JavaType用来指定实体类中的类型

      2. ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型

    注意点:

    • 保证SQL的可读性,尽量保证通俗易懂

    • 注意一对多和多对一,属性名和字段的问题

    • 如果问题不好排查错误,可以使用日志,建议使用Log4j

    面试高频

    • Mysql引擎

    • InnoDB底层原理

    • 索引

    • 索引优化

    12、动态SQL

    什么是动态SQL:动态SQL就是根据不同的条件生成不同的SQL语句

    所谓的动态SQL,本质上还是SQL语句,只是我们可以在SQL层面,去执行一个逻辑代码


    动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

    搭建环境

    CREATE TABLE `mybatis`.`blog` (
    `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '博客id',
    `title` varchar(30) NOT NULL COMMENT '博客标题',
    `author` varchar(30) NOT NULL COMMENT '博客作者',
    `create_time` datetime(0) NOT NULL COMMENT '创建时间',
    `views` int(30) NOT NULL COMMENT '浏览量',
    PRIMARY KEY (`id`)
    )
    12345678

    创建一个基础工程

    1. 导包

    2. 编写配置文件

    3. 编写实体类

      @Data
      public class Blog {
         private int id;
         private String title;
         private String author;

         private Date createTime;// 属性名和字段名不一致
         private int views;
      }
      123456789
    4. 编写实体类对应Mapper接口和Mapper.xml文件

    IF

    <select id="queryBlogIF" parameterType="map" resultType="blog">
      select * from blog
       <where>
           <if test="title!=null">
              and title = #{title}
           </if>
           <if test="author!=null">
              and author = #{author}
           </if>
       </where>
    </select>
    1234567891011

    choose (when, otherwise)

    trim、where、set

    SQL片段

    有的时候,我们可能会将一些功能的部分抽取出来,方便服用!

    1. 使用SQL标签抽取公共部分可

      <sql id="if-title-author">
         <if test="title!=null">
            title = #{title}
         </if>
         <if test="author!=null">
            and author = #{author}
         </if>
      </sql>
    2. 在需要使用的地方使用Include标签引用即可

      <select id="queryBlogIF" parameterType="map" resultType="blog">
        select * from blog
         <where>
             <include refid="if-title-author"></include>
         </where>
      </select>

    注意事项:

    • 最好基于单标来定义SQL片段

    • 不要存在where标签

    动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了

    建议:

      • 先在Mysql中写出完整的SQL,再对应的去修改成我们的动态SQL实现通用即可

  • 相关阅读:
    php 日期处理 DateTime
    http范围请求
    fiddle扩展
    汉字编码 (GB2312 GBK GB18030)
    Navicat http 通道增加验证
    vim 支持 nginx配置文件 语法高亮
    composer 使用
    剖析nsq消息队列(三) 消息传输的可靠性和持久化[一]
    剖析nsq消息队列(二) 去中心化源码解析
    剖析nsq消息队列(一) 简介及去中心化实现原理
  • 原文地址:https://www.cnblogs.com/ldy2396/p/14909246.html
Copyright © 2011-2022 走看看