【mybatis 和 mybatis-plus 的解释】

要全面掌握 MyBatisMyBatis-Plus 的使用方法,确实需要一个系统的学习过程,包含它们的基本用法、高级用法、各种配置及优化方式。我将为你提供详细的介绍,分成两个部分:

  1. MyBatis 的详细使用
  2. MyBatis-Plus 的详细使用

一、MyBatis 的详细用法

1.1 MyBatis 配置文件

MyBatis 的配置文件通常是 mybatis-config.xml,用于全局配置 MyBatis 的行为。

<configuration>
    <!-- 全局配置 -->
    <settings>
        <!-- 配置缓存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 配置延迟加载 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 配置映射器的自动查找 -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
    </settings>

    <!-- 数据源配置 -->
    <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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射器配置 -->
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
  • settings:全局配置,例如缓存、懒加载等。
  • environments:配置数据源及事务管理方式。
  • mappers:配置 SQL 映射文件。
1.2 MyBatis 映射文件(Mapper XML)

MyBatis 使用 XML 文件来写 SQL,并将查询结果映射到 Java 对象。

<mapper namespace="com.example.mapper.UserMapper">
    <!-- 查询用户 -->
    <select id="findById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <!-- 插入用户 -->
    <insert id="insertUser">
        INSERT INTO user(name, age)
        VALUES(#{name}, #{age})
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

常用的标签:

  • <select>:查询语句,支持 idresultType(返回类型),resultMap(返回映射)等。
  • <insert>:插入语句。
  • <update>:更新语句。
  • <delete>:删除语句。
  • <if>:条件判断,常用于动态 SQL。
  • <choose>:类似 if-else 的判断语句。
1.3 动态 SQL(<if><choose><foreach> 等)
<select id="findUsers" resultType="User">
    SELECT * FROM user
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="age != null">AND age = #{age}</if>
    </where>
</select>

<select id="findUsersByIds" resultType="User">
    SELECT * FROM user WHERE id IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
1.4 Mapper 接口
public interface UserMapper {
    // 使用 @Select 注解(如果不使用 XML 配置)
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Long id);

    int insertUser(User user);
    int updateUser(User user);
    int deleteUser(Long id);
}
1.5 MyBatis 分页插件

MyBatis 本身并没有内置分页功能,但你可以使用第三方分页插件(例如 PageHelper)来实现分页功能。

<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="dialect" value="mysql"/>
    </plugin>
</plugins>
1.6 MyBatis 配置缓存(Cache)

MyBatis 支持二级缓存,允许跨 Session 共享缓存。

<cache/>
  • <cache>:启用 MyBatis 的二级缓存。
  • 可以在 <mapper> 文件中进行自定义缓存配置。

二、MyBatis-Plus 的详细用法

2.1 MyBatis-Plus 配置

MyBatis-Plus 是 MyBatis 的增强工具,提供了更多的自动化操作功能,如 CRUD 操作、分页、Wrapper 等。

2.1.1 添加依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
2.1.2 配置 application.properties
mybatis-plus.mapper-locations=classpath:/mappers/*.xml
mybatis-plus.global-config.db-config.id-type=auto
2.2 MyBatis-Plus 核心功能
2.2.1 自动生成 CRUD 方法

只要继承 BaseMapper,MyBatis-Plus 就会为你自动生成常见的 CRUD 方法。

public interface UserMapper extends BaseMapper<User> {
    // 你可以自定义额外的查询方法
}

常用方法:

  • selectById():查询单条记录。
  • insert():插入数据。
  • updateById():根据 ID 更新数据。
  • deleteById():根据 ID 删除数据。
  • selectList():查询多条记录。
2.2.2 分页查询

MyBatis-Plus 提供了简单的分页查询功能,使用 Page 对象来进行分页。

Page<User> page = new Page<>(1, 10); // 页码1,每页10条记录
Page<User> userPage = userMapper.selectPage(page, null);

你也可以通过 QueryWrapper 自定义条件:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25);
Page<User> userPage = userMapper.selectPage(page, queryWrapper);
2.2.3 条件构造器(QueryWrapper

QueryWrapper 用于构建 SQL 条件,可以方便地进行动态查询。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").gt("age", 18);
List<User> users = userMapper.selectList(queryWrapper);
2.2.4 Lambda 表达式查询

LambdaQueryWrapper 通过 Lambda 表达式来构建查询条件,避免了硬编码字段名。

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getName, "John").gt(User::getAge, 18);
List<User> users = userMapper.selectList(queryWrapper);
2.2.5 批量操作

MyBatis-Plus 支持批量插入、批量更新等操作。

// 批量插入
List<User> users = Arrays.asList(new User("Tom", 20), new User("Jerry", 22));
userMapper.insertBatchSomeColumn(users);
2.2.6 自动填充字段(AutoFill)

MyBatis-Plus 提供了自动填充字段的功能,如自动填充创建时间和更新时间等。

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
2.2.7 逻辑删除

MyBatis-Plus 提供了逻辑删除的功能,只需要在实体类上标注 @TableLogic 注解。

@TableLogic
private Integer deleted;  // 1 表示删除,0 表示存在

使用时:

userMapper.deleteById(1L);  // 这会将 deleted 字段设置为 1,而不是物理删除
2.2.8 自定义 SQL

你可以在 Mapper 中自定义 SQL 查询,MyBatis-Plus 支持与 MyBatis XML 配合使用。

@Select("SELECT * FROM user WHERE age = #{age}")
List<User> findUsersByAge(@Param("age") Integer age);
2.3 其他功能
  • 全局配置:MyBatis-Plus 提供了全局配置

,用于配置全局行为,如 ID 策略、逻辑删除字段等。

  • Wrapper 构造器QueryWrapperUpdateWrapper 等支持链式操作,简化代码。
2.4 高级用法
  • 乐观锁:MyBatis-Plus 提供了对乐观锁的支持,可以自动处理并发更新。
  • 性能分析插件:MyBatis-Plus 提供了性能分析插件,可以帮助你查看 SQL 执行性能。
@Bean
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor interceptor = new PerformanceInterceptor();
    interceptor.setMaxTime(1000); // 设置 SQL 最大执行时间
    interceptor.setFormat(true); // 格式化 SQL
    return interceptor;
}

结语

通过学习 MyBatis 和 MyBatis-Plus,你将能够高效地进行数据库操作,并且能根据需求选择使用 MyBatis 或 MyBatis-Plus。

  • MyBatis:更适合于复杂的 SQL 查询和对 SQL 的完全控制,适合需要高度定制化的场景。
  • MyBatis-Plus:提供了大量自动化的功能,可以快速开发,减少样板代码,适合常见的 CRUD 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值