后端方向进阶——Mybatis框架

本文详细介绍了MyBatis框架的核心概念、配置、基本用法,包括MapperXML映射、数据模型、动态SQL、参数传递、结果映射,以及如何与Spring集成和利用缓存机制,帮助开发者提升数据库操作效率。
摘要由CSDN通过智能技术生成

各位帅哥美女,编辑不易,动动发财小手,来个三连加关注,后续会有更加优秀的推文推出~

学会编写基本的mapper对数据进行CRUD操作,掌握一对多和多对一的关系,会编写动态SQL(工作中编写mapper对数据的查询操作较多,特别是对多表进行查询操作能极大的提高效率,一定要掌握)

目录

1. 介绍MyBatis

2. MyBatis核心概念

2.1 映射文件(Mapper XML)

2.2 数据模型(Model)

2.3 映射接口(Mapper Interface)

2.4 配置文件

3. MyBatis基本用法

3.1 配置文件加载

3.2映射文件

3.3. 数据模型

3.4. 配置文件加载

3.5 获取Mapper对象

3.6 执行SQL语句

3.7 提交事务

3.8 关闭SqlSession

4. 参数传递与结果映射

4.1 参数传递

4.2 结果映射

5. 动态SQL

6. MyBatis插件

7. MyBatis与Spring集成

8. 缓存机制

9. 动态代理

10. 总结


1. 介绍MyBatis

MyBatis 是一个开源的持久层框架,它简化了数据库操作和SQL语句的处理。相较于传统的JDBC,MyBatis更加灵活,并提供了一种将Java对象和数据库中的数据进行映射的方式。

2. MyBatis核心概念

2.1 映射文件(Mapper XML)

MyBatis通过映射文件定义了SQL语句以及将数据库字段映射到Java对象的规则。一个典型的Mapper XML文件包含了数据库表的各种操作,如查询、插入、更新、删除等。

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

2.2 数据模型(Model)

数据模型是Java对象,用于映射数据库表中的数据。在MyBatis中,模型对象的字段和数据库表的列一一对应。

// User.java
public class User {
    private int id;
    private String username;
    private String email;
    // 省略getter和setter方法
}

2.3 映射接口(Mapper Interface)

映射接口定义了数据库操作的方法,通过注解或XML方式指定SQL语句。MyBatis会动态生成接口的实现类。

// UserMapper.java
public interface UserMapper {
    User getUserById(int id);
}

2.4 配置文件

MyBatis的配置文件包含了框架的全局配置信息,如数据库连接、映射文件的位置、插件等。

<!-- mybatis-config.xml -->
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="username"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3. MyBatis基本用法

3.1 配置文件加载

首先,需要创建 MyBatis 的配置文件,通常是一个 XML 文件,其中包含数据库连接信息、映射文件的位置等配置。

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.2映射文件

映射文件定义了 SQL 语句和 Java 对象之间的映射关系。每个映射文件对应一个数据模型(Java 对象)。

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.mapper.UserMapper">
    <!-- 查询用户信息 -->
    <select id="getUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

3.3. 数据模型

数据模型是 Java 对象,用于映射数据库表中的数据。

public class User {
    private int id;
    private String username;
    private String email;
    // 省略 getter 和 setter 方法
}

3.4. 配置文件加载

在代码中加载 MyBatis 的配置文件,构建 SqlSessionFactory

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisExample {
    public static void main(String[] args) {
        try {
            // 加载 MyBatis 配置文件
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);

            // 构建 SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            // 使用 SqlSessionFactory 创建 SqlSession
            // TODO: 进行数据库操作...

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.5 获取Mapper对象

SqlSession 中获取映射器(Mapper)对象,用于执行 SQL 语句。

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

3.6 执行SQL语句

通过映射器对象执行 SQL 语句。

User user = userMapper.getUserById(1);

3.7 提交事务

在进行数据库操作后,需要提交事务并关闭 SqlSession

sqlSession.commit();

3.8 关闭SqlSession

sqlSession.close();

4. 参数传递与结果映射

4.1 参数传递

MyBatis支持多种参数传递方式,包括基本类型、POJO对象、Map等。

<!-- UserMapper.xml -->
<select id="getUserByUsernameAndEmail" parameterType="map" resultType="com.example.model.User">
    SELECT * FROM users WHERE username = #{username} AND email = #{email}
</select>

4.2 结果映射

MyBatis可以将查询结果映射到Java对象,支持自动映射和手动映射。

<!-- UserMapper.xml -->
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
    SELECT * FROM users WHERE id = #{id}
</select>

5. 动态SQL

MyBatis提供了强大的动态SQL功能,可以根据条件动态生成SQL语句。

<!-- UserMapper.xml -->
<select id="getUserByCondition" parameterType="map" resultType="com.example.model.User">
    SELECT * FROM users
    <where>
        <if test="username != null">AND username = #{username}</if>
        <if test="email != null">AND email = #{email}</if>
    </where>
</select>
// UserMapper.java
User getUserByCondition(Map<String, String> condition);

6. MyBatis插件

MyBatis允许通过插件方式扩展其功能,例如自定义拦截器。

// MyPlugin.java
@Intercepts({
    @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
})
public class MyPlugin implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 在方法执行前进行拦截处理
        return invocation.proceed();
    }

    @Override
    public Object plugin(Object target) {
        // 包装目标对象,返回一个代理对象
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 设置插件的属性
    }
}

7. MyBatis与Spring集成

MyBatis可以与Spring框架集成,通过Spring提供的事务管理等功能简化开发流程。

<!-- applicationContext.xml -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.example.mapper.UserMapper"/>
    <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>

8. 缓存机制

MyBatis提供了一级缓存和二级缓存机制,可以提高查询性能。

<!-- UserMapper.xml -->
<select id="getUserById" parameterType="int" resultType="com.example.model.User" useCache="true">
    SELECT * FROM users WHERE id = #{id}
</select>

9. 动态代理

MyBatis使用动态代理技术生成Mapper接口的实现类。

// UserMapperProxy.java
public class UserMapperProxy implements InvocationHandler {
    private SqlSession sqlSession;

    public UserMapperProxy(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 通过动态代理调用SqlSession的方法
        return sqlSession.selectOne(method.getDeclaringClass().getName() + "." + method.getName(), args[0]);
    }
}

10. 总结

MyBatis作为一款优秀的持久层框架,提供了丰富的功能和灵活的配置,使得Java开发者能够更轻松地与数据库进行交互。从基本的配置、映射到高级的动态SQL、插件和缓存机制,本篇博客对MyBatis的技术全面介绍。希望读者通过学习MyBatis,能够更加高效地进行数据库访问,提升项目的开发效率。

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 愿景我们的愿景是成为 MyBatis 超好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。 特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作 我们将通过理论与实操的方式来阐述 MyBatis-Plus 的强大功能,体验和学习MyBatis-Plus技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小羊一定要努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值