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底层原理
索引
索引优化