2020-08-12 Mybatis执行流程、注解增删改查、Lombok、复杂查询、多对一、一对多

Mybatis执行流程

先通过Resources获取全局核心配置文件
然后实例化SqlsessionFactoryBuilder
解析文件流-----------如果核心配置文件出错,在这里发现
SqlsessionFactory实例化
transactional—事务管理
Executor对象–执行器
创建Sqlsession—实现CRUD

注解增删改查

SqlsessionFactory的OpenSqlsession方法可以带一个参数,设置事务自动提交,不用再专门去提交了

关于@Param()注解:如果是基本类型参数,必须要在接口中加上
取值-#{}、${},其实是#{}是会防止SQL注入

练习:使用注解进行增删改查的操作

Lombok

第三方工具
首先是IDEA中安装Lombok插件----------如果不在Pluging里安装插件,即使导了包也无法使用lombok
导入相关依赖:

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
    <scope>provided</scope>
</dependency>

实体类中加注解
@Data
@AllArgsConstructor
@NoArgsConstructor
生成全部的无参构造、get、set、toString、HashCode、Equals方法

复杂查询

测试环境搭建:
1.导入lobbok
2.新建实体类Teacher、Student
3.建立Mapper接口
4.建立Mapper.xml文件
5.核心配置文件中绑定注册Mapper接口或者XML文件
6.测试查询是否能够成功

多对一

多对一查询的流程,首先是在Mapper.xml中(这是根据结果映射!):

    <select id="getStudent" resultMap="student">
        select s.id sid,s.name sname,t.name tname from mybatis.student s,mybatis.teacher t where s.tid=t.id
    </select>

    <resultMap id="student" type="Student">
        <result property="id" column="sid" />
        <result property="name" column="sname" />
        <association property="teacher" javaType="Teacher">
            <result property="name" column="tname" />
        </association>
    </resultMap>

如果过程中报错找不到类,记住去看一下核心配置文件中的别名是否取对

一对多

接口定义方法:

       Teacher getTeacher(@Param("tid") int id);

Mapper.xml中写:

    <select id="getTeacher" resultMap="TeacherStudent">
        select t.id tid,t.name tname,s.id sid,s.name sname from mybatis.teacher t,mybatis.student s where t.id=s.tid and t.id=#{tid}
    </select>

    <resultMap id="TeacherStudent" type="Teacher">
        <result property="id" column="tid" />
        <result property="name" column="tname" />
        <collection property="students" ofType="Student">
            <result property="id" column="sid" />
            <result property="name" column="sname" />
        </collection>
    </resultMap>

一定要注意,在一对多中,由于学生对象的第三个参数是一个老师对象,所以要用assosiate标签来进行定义
而在多对一当中使用collection ,而且,集合中所放的元素,使用ofType来进行定义即可
测试方法忽略

总结:
association :多个关联一个
collection :一个里存了多个值
ofType:用来指定映射到List或者集合中的pojo对象,泛型中的约束

重点:
Mysql引擎
InnoDB底层原理
索引
索引优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值