0.maven依赖 和build配置 解析java目录下的xml
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
1.entity dao接口 和对应的mapper(对应接口信息,对应方法名,返回的entity,sql语句)
2.配置文件包含
- 引入外部文件(可选)
- 设置(日志实现)
- 类型别名
- 数据库连接信息
- 注册每个entity对应mapper
4.getSession
static SqlSession getSession() {
try {
return new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsStream("mybatis-config.xml"))
.openSession();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
4.使用
SqlSession session = MybatisUtils.getSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> allUsers = userDao.getAllUsers();
for (User user : allUsers) {
System.out.println(user);
}
session.close();
注意:
1.万一数据库字段名 跟entity字段名不一致 使用resultmap ,将返回的不匹配的数据库字段映射成对应的entity字段名,从而返回一个entity
2.接口对应的mapper.xml 可以由在接口上加注解代替,注意注册接口mapper
反射 实现的动态代理
@Select("select * from user ")
List<User> getAllUsers();
多对一 表 查询 1.子查询 2.连表查询
sql片段 应用
缓存
一级缓存: session 级别 DML会刷新缓存,回话关闭,一级缓存才会保存到二级缓存中
二级缓存 mapper级别 对应entity需要序列化 缓存保存在map里
<cache eviction="LRU" flushInterval="6000" size="512" readOnly="true"
缓存策略 :
LRU 默认,最近最少使用 移除长时间不被使用的
FIFO, 先进先出, 移除先进来的