学习资料
网页mybatis资料:https://mybatis.org/mybatis-3/zh/index.html
网页mybatis-spring资料:https://mybatis.org/spring/zh/
MyBatis-Plus:https://mp.baomidou.com/guide/page.html
视频面试题:https://www.bilibili.com/video/BV13J411P7Hu?from=search&seid=16748018485770429973
视频:https://www.bilibili.com/video/BV1mE411X7yp?from=search&seid=9893654318657041643
学习内容
三层框架
持久层技术解决方案
mybatis概述
ORM:Object Relational Mapping 对象关系映射
简单说就是把实体类的属性和数据库表字段对应起来,让我们可以操作实体类就是操作数据库。
安装
pom.xml中加入如下代码
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
mybatis环境搭建
一、domain目录中存放实体类,实体类中字段类型和数据库表中的字段类型保持一致。
创建字段的get set方法,创建toString方法
二、Dao目录中存放存放用户的持久层接口,
三、resources目标下存放mybatis.xml文件,该文件用于存放mybatis的配置信息
xml文件中的config的约束
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
// mybatis的主配置文件
<configuration>
//配置环境
<environments default="development">
//配置mysql的环境
<environment id="development">
//配置事务类型
<transactionManager type="JDBC"/>
// 配置数据源(连接池)
<dataSource type="POOLED">
//配置连接数据库的基本信息
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
// 指定映射文件的位置,映射文件是指每个dao独立的配置文件
// mapper.xml文件的路径在resources目录下
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
四、创建映射配置文件
映射文件的mapper约束
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
// namespace 指向IUserDao
<mapper namespace="org.mybatis.example.IUserDao">
// 编写sql,
// id的值和Dao接口中的方法名相同,
// resultType指明sql执行结果要封装到哪里去,可以配置实体类的全限定类名
<select id="selectBlog" resultType="Blog">
//可以不写分号
select * from Blog where id = #{id};
</select>
</mapper>
环境搭建注意事项
mybatis框架执行原理
一、读取配置文件
1、使用类加载器,它只能读取类路径的配置文件
2、使用ServletContext对象的getRealPath()
二、创建工厂 mybatis使用了构建者模式
构建者模式把对象的创建细节隐藏掉,使用者直接调用方法即可拿到对象
三、生产sqlSession使用了工厂模式
工厂模式的优势是解耦,降低类之间的依赖关系
四、session.getMapper()使用了代理模式
代理模式的优势是在不修改源码的基础上对已有方法进行增强
Dao层使用注解
MyBatis的CRUD-新增
MyBatis的CRUD-更新
MyBatis的CRUD-删除
Dao层只传了一个int类型的id,xml中的参数可以随便写,不受限制
MyBatis的CRUD-查询一个
MyBatis的CRUD-模糊查询
select * from User where username like ‘%
n
a
m
e
s
e
l
e
c
t
∗
f
r
o
m
U
s
e
r
w
h
e
r
e
u
s
e
r
n
a
m
e
l
i
k
e
c
o
n
c
a
t
(
′
s
e
l
e
c
t
∗
f
r
o
m
U
s
e
r
w
h
e
r
e
u
s
e
r
n
a
m
e
l
i
k
e
c
o
n
c
a
t
(
′
{name}%' 不常用 select * from User where username like concat ('%',#{name},'%') select * from User where username like concat ('%','
nameselect∗fromUserwhereusernamelikeconcat(′select∗fromUserwhereusernamelikeconcat(′{name}’,’%’)
MyBatis的CRUD-聚合查询,返回一行一列
MyBatis的CRUD-新增返回id值
Mybatis参数类型 paramentType
一、简单类型 int String
二、传递pojo对象,javabean
三、传递pojo包装对象
Mybatis的输出结果封装 resultType
一、简单类型
二、pojo对象
三、popjo列表
Mybatis的输出结果封装 resultMap
当实体类的属性名和mysql的字段名不一致时,可以使用配置查询结果的列名和实体类的属性名的对应关系
properties标签使用
使用一、在标签内部配置连接数据库的信息
使用二、通过resource属性引用外部配置文件信息,常用属性
将jdbc的链接信息单独放到resources目录的一个jdbcConfig.properties文件中
使用时使用resource 属性指定配置文件的位置,是按照类路径的写法来写的,并且必须存放在类路径下
使用三、使用url属性,使用不灵活
typeAliases标签
typeAliases可以配置domain中类的别名,指定别名后不再区分大小写
方法一
方法二
package标签在typeAliases中用于指定domain中要配置别名的包;在mapper标签中用于指定dao接口所在的包
连接池
我们在实际开发中都会使用连接池,使用连接池可以减少我们获取连接所消耗的时间。
连接池就是用于存储连接的一个容器
容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到同一个连接;该集合还必须实现队列的特性:先进先出
mybatis连接池
一、连接池配置位置
主配置文件SqlMapConfig.xml中的dataSource标签中的type属性
type属性表示采用何种连接池方式
二、mybatis连接池提供了三种方式的配置
POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
UNPOOLED 采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想
JNDI 采用服务器提供的JNDI技术实现 来获取DataSource对象,不同的服务器拿到的datasource是不一样的( 注意:如果不是web或者是maven的war工程,则不能使用)
mybatis中事务
mybatis中动态sql 语句-if标签
<if test="user.name!=null and user.name!=‘’">
and id=#{user.id}
</if>
mybatis中动态sql 语句-where标签
mybatis中动态sql 语句-foreach标签
select * from user where id in (1,2,3)
mybatis中动态sql 语句-抽取重复的语句
mybatis表之间的关系
mybatis多表查询
一对一查询-通过写子类的方式
使用不多
一对一查询-建立实体类关系的方式
一对多查询
多对多查询
延迟加载
一对一-实现延迟加载
一对多-实现延迟加载
mybatis中的缓存
Mybatis中的一级缓存
执行一次查询
执行两次查询
sqlSession.clearCache() 也可以清空缓存
触发清空一级缓存的情况
Mybatis中的二级缓存
注解开发CRUD
@Select
@Update
@Delete
@Insert
注解建立实体类属性和数据库表中列的对应关系
方法一