1.如果映射的字段与对象属性一致,则可以省略不写 2.最好保留主键的字段信息3.关联封装中 - - - > 单独封装则使用 association 4.如果遇到关联封装,必须配置全部映射关系 (但是属性名和字段一致)可以自动映射 自动映射 autoMapping = “true” 自动映射的前提条件:关联查询,属性名和字段一致
1.2步骤如下:
2.子查询(一对一) 2.1思路如图: 2.2步骤如下: 3.子查询(一对多) 4.驼峰规则映射驼峰规则映射:
说明:因为字段名和属性经常不一样,通过驼峰映射,自动映射
全局配置 在核心配置文件中
1.如果开启驼峰命名规则 可以简化赋值过程
二、mybatis的缓存机制 1.什么是缓存机制?
说明:有效的降低访问服务器的次数,即问过的回答过的答案,存在缓存里,下次再问就不用访问服务器
扩展:
1.mybatis自身缓存:一级缓存/二级缓存
2.Redis缓存(现在主流) 存入了大量的数据,读取10万次/秒,写8.6万次/秒
概念说明:mybatis默认开启一级缓存,一级缓存可以在**同一个sqlsession(会话)**对象中查询相同的数据,可以实现数据共享的
说明:二级缓存mybatis默认是开启的,但是需要手动标识是否需要缓存,在同一个sqlsessionfactory内部有效,sqlsessionfactory是sqlsession(会话)的爸爸,即一级缓存的上级,范围更广
配置:全局配置和局部配置
二级缓存说明:sqlsession查询数据之后,会把查询后的数据保存到一级缓存中,但不会立即将缓存交给二级缓存sqlsessionfactory。此时作用域还在一级,所以解决办法是:必须将一级缓存执行成功之后,关闭一级缓存(表示会话正常执行用完且关闭)
对象关系映射,用于实现不同类型系统的数据库之间的转换
用对象操作数据库–封装对象操作数据库
- 对象与数据库对应–映射
- 对象的属性与表中的字段对应–映射
巴拉巴拉
1.2JDBC优点 :操作数据库最快的玩意
2.mybatis是啥:是基于orm思想的持久层框架,半自动orm
3.mybatis使用步骤: 3.1 导入jar包课堂使用的是springboot整合mybatis版本,所以在pom.xml 导入俩包,mybatis和JDBC
3.2 mysql的驱动版本驱动的配置巴拉巴拉 数据库的value是com.mysql.cj.jdbc.Driver (高版本多了个cj)
3.3 高版本数据库要搭载高版本maria 3.4 编辑核心文件- 数据库环境的配置
- Mapper接口与映射文件的配置
3.5 创建映射文件 == 接口的实现类
说明:接口要与映射文件一一对应
接口里的方法
3.5 咋用mybatis
动态生成SqlSessionFactory 通过SqlSessionFactoryBuilder().build(inputStream)生产数据库链接
String resource = "mybatis/mybatis-config.xml";
//通过io流 加载指定的配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//动态生成sqlsessionfactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//从SqlSessionFactory中获取sqlSession
//sqlsession 类比 成 数据库链接
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取mapper接口
DemoMapperUser demoMapperUser = sqlSession.getMapper(DemoMapperUser.class);
//获取服务器
List userList = demoMapperUser.finall();
System.out.println(userList);
//关闭资源
sqlSession.close();
3.6 简化mybatis操作
- 进阶思想:向上抽取“想象成功能”
- 学习了个新的注解:
@BeforeEach //测试api的工具方法 测试api中的注解 在执行@Test方法前,会提前调用
private SqlSessionFactory sqlSessionFactory;
@BeforeEach //测试api的工具方法 测试api中的注解 在执行@Test方法前,会提前调用
public void init()throws Exception{
//1.指定资源文件
String resource = "mybatis/mybatis-config.xml";
//2.获取映射文件中的sql语句
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream(resource));
}
3.7 常见封装策略
mybatis中只允许单值传参,所以引入封装对象
- 封装成对象
- 封装成集合
- 通过注解封装
以字段为参数时,一般使用${},但是这样的sql慎用,可能出现sql注入的问题
实现接口中的接口方法 id和接口中的方法对应
resultType 返回值结果类型 返回的是 list集合封装维对象
规则: sql语句不要添加多余的;号 Oracle数据库不能添加;号
Map<>集合
参数: 集合
规则:如果参数是一个map集合,则通过#{属性} 可以直接获取属性
通过注解 @Param("属性")参数类型 参数名称 方式修饰
则通过#{key} 可以直接获取属性
3.9 转义标签
使用#{}获取数据时,默认由于编译的效果,防止sql,默认为数据添加“”
xml文件中的转义字符 > 大于号>
< 小于号<
& 和 &
说明:如果sql中有大量的转义字符,建议使用转移标签体
万能转义标签 语法:
3.10 相同的属性如何封装?
用map map.put
list.set
3.12 模糊查询
mybatis的优化 1. 别名的配置
- 手动配置 指定具体类型的别名
- 别名包
- 别名的注解
select id,name,age,sex from demo_user
name=#{name}
and age=#{age}
and sex=#{sex}
4.2 chooose-when-otherwise
4.3 set
update demo_user
name=#{name},
age=#{age},
sex=#{sex}
where id=#{id}
4.3 switch
5.resultMap用法
6.关联关系 6.1一对一
逻辑:一个员工对应一个部门
association封装单个对象
public class emp implements Serializable {
private Integer id;
private String name;
private Integer age;
private Integer deptId;
//一对一需要在代码层进行表示,适用对象封装
private dept dept;
}
映射文件中:
6.2 一对多
用list集合封装
public class dept implements Serializable {
private Integer deptId;
private String deptName;
//关联关系:一个部门对应多个员工
private List emps;
}
映射文件中的封装:
一对多的封装说明:
7.缓存机制
7.1 一级缓存 sqlsession–会话
7.1 二级缓存 sqlsessionfactory
四、springboot和mybatis整合
五、项目入门CRUD前端后端联合调用


