关于MyBatis的一些理解

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、缓存预热:在系统启动时,可以提前加载热点数据到缓存中,避免在高并发时导致缓存击穿和缓存雪崩问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值