1、先了解他是用来干什么的
简介:MyBatis 是一个流行的 Java 半自动的持久化框架,它通过简单的 XML 或注解与 SQL 语句映射,使得数据库交互变得容易。
直白一点:他是一个框架,用来与数据库交互的(交互的意思:数据库与Java后端连接的桥梁)
对简介分析
1、半自动:需要自己写部分代码
那与全自动(Hiternate)的区别:Mybatis操作数据库更细致,方便优化
2、容易
封装了JDBC
3、持久化框架:
将数据库中的表映射成Java对象
4、怎么使用:通过XML或者注解
MyBatis包含了什么
Mapper接口
XML映射文件:Mapper XML 文件定义了 SQL 语句和结果映射
MyBatis配置文件:数据库连接信息、事务管理器、环境配置、映射器等
SqlSession
一些常用的设置:eg:
-
mapUnderscoreToCamelCase
,用于开启驼峰命名自动转换。- 使用
useGeneratedKeys="true"
和keyProperty
来获取自增主键的值。
参数说明:使用注解@Param来命名参数
与Spring的集成
利用 Spring 的依赖注入管理 MyBatis 的 SqlSession。
2、举例
1、实体类
@Data
public class User {
private Integer id;
private String username;
private String password;
}
2、创建Mapper接口
//增删改查
public interface UserMapper {
User selectUserById(Integer id);
void insertUser(User user);
}
3、XML的映射文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="UserResultMap" type="com.example.domain.User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="password" property="password" />
</resultMap>
<select id="selectUserById" parameterType="java.lang.Integer" resultMap="UserResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.domain.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
</mapper>
4、配置文件:一般包括数据库连接信息,事务管理器,环境配置,映射器
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/yourdatabase"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
3、MyBatis的一些问法
1、你怎么理解ORM框架
先解释一下ORM
MyBatis:半自动(自己写SQL实现)
Hibernate:全OPM,确实灵活度
ORM框架还提供了一些高级功能,如缓存管理、事务管理、数据校验等,进一步简化了数据库操作。但是没有提高数据库操作性能
2、谈谈JDBC、JdbcTemplate和MyBatis的区别
3、怎么提高数据库操作的性能
1、从库表来说:分库分表,合理设计表结构
2、索引:索引优化
3、查询优化:避免全表扫描
4、缓存机制
5、批量操作
6、数据库连接池:避免频繁地创建和销毁数据库连接,提高数据库的连接效率。
4、缓存机制
一级缓存,默认打开,SqlSession级别
二级缓存,默认关闭,SqlSessionFactory级别,在配置文件添加cache
MyBatis 的缓存机制是基于对象的缓存,缓存的是查询结果对象而不是查询结果集。
5、缓存击穿、缓存雪崩
击穿:热点数据没了(过期、删除),导致大量的请求直接击穿缓存,直接访问数据库,造成数据库压力过大的情况
雪崩:大量的数据没了,
如何避免:
1、设置合适的缓存过期时间
2、分布式锁
3、对于一些热点数据,可以设置为永不过期的缓存,避免缓存击穿和缓存雪崩问题。
4、缓存预热:在系统启动时,可以提前加载热点数据到缓存中,避免在高并发时导致缓存击穿和缓存雪崩问题。