Mybatis的介绍、基本使用、高级使用

Mybatis介绍

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis免除了几乎所有的JDBC代码和手动设置参数以及获取查询结果集的过程。MyBatis可以使用XML或注解进行配置和映射,具有非常强的灵活性和可定制性。

Mybatis基本使用

环境搭建

Mybatis的使用需要在Java开发环境中使用Maven或Gradle添加相应的依赖和配置。以下是Maven中的配置方式:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

配置Mybatis

Mybatis的配置文件是mybatis-config.xml,定义了Mybatis的运行方式,包括数据库连接、映射文件的位置等,示例如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!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.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写Mapper

Mapper是用于与数据库交互的对象,可以使用注解或XML方式定义,示例如下:

public interface UserMapper {

    @Select("select * from user where id = #{id}")
    User getUserById(int id);

    @Select("select * from user")
    List<User> getAllUsers();

    @Insert("insert into user(name, age) values(#{user.name}, #{user.age})")
    void addUser(@Param("user") User user);

    @Update("update user set name = #{user.name}, age = #{user.age} where id = #{user.id}")
    void updateUser(@Param("user") User user);

    @Delete("delete from user where id = #{id}")
    void deleteUser(int id);
}

使用SqlSession

SqlSession是Mybatis操作数据库的核心,可以使用Mapper或自己写SQL语句进行CRUD操作,示例如下:

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession session = factory.openSession();

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

User user = userMapper.getUserById(1); // 根据id查询用户
List<User> userList = userMapper.getAllUsers(); // 查询所有用户

User newUser = new User();
newUser.setName("Tom");
newUser.setAge(20);
userMapper.addUser(newUser); // 添加用户

user.setName("Jerry");
user.setAge(22);
userMapper.updateUser(user); // 更新用户

userMapper.deleteUser(1); // 删除用户

session.commit(); // 提交事务

session.close(); // 关闭SqlSession

Mybatis高级使用

插件

Mybatis支持插件(Interceptor),插件可以拦截Executor(执行器)、StatementHandler(语句处理器)、ParameterHandler(参数处理器)和ResultSetHandler(结果集处理器)的方法调用。

插件的代码需要实现Interceptor接口,示例如下:

@Intercepts({
    @Signature(type = Executor.class, method = "query",
            args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class MyPlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // Do something before
        Object returnObject = invocation.proceed(); // 拦截目标方法
        // Do something after
        return returnObject;
    }

    @Override
    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // set properties
    }
}

Mybatis可以通过<plugins>标签配置插件,示例如下:

<plugins>
    <plugin interceptor="com.example.plugins.MyPlugin">
        <!-- properties -->
    </plugin>
</plugins>

缓存

Mybatis拥有一级缓存和二级缓存。

一级缓存是SqlSession级别的缓存,可以减少对数据库的访问。只有在同一个SqlSession中,同一个查询SQL和相同的参数才会使用同一个缓存数据。一级缓存默认开启,可以通过shutdownCache()方法关闭。

二级缓存是Mapper级别的缓存,能够在不同的SqlSession之间共享Mapper的查询结果。需要在Mapper的XML文件中设置<cache>标签,配置缓存策略。

<cache eviction="LRU" flushInterval="10000" size="512" readOnly="true"/>

动态SQL

Mybatis支持使用动态SQL生成灵活的查询语句,可以通过<if><choose><when><otherwise><foreach>等标签来实现。例如:

<select id="getUserByName" resultType="User">
    select * from user
    <where>
        <if test="name != null">
            and name = #{name}
        </if>
        <if test="age != null">
            and age = #{age}
        </if>
    </where> 
</select>

以上就是Mybatis的介绍、基本使用和高级使用的完整攻略。

示例一:使用注解方式查询用户信息

以下示例演示了如何使用注解方式查询用户信息:

public interface UserMapper {

    @Select("select * from user where id = #{id}")
    User getUserById(int id);
}
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession session = factory.openSession();

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

User user = userMapper.getUserById(1); // 根据id查询用户

session.commit(); // 提交事务
session.close(); // 关闭SqlSession

示例二:使用XML方式查询用户信息

以下示例演示了如何使用XML方式查询用户信息:

<mapper namespace="com.example.mapper.UserMapper">
  <select id="getUserById" resultMap="user">
      select * from user where id = #{id}
  </select>
  <resultMap id="user" type="User">
      <id property="id" column="id"/>
      <result property="name" column="name"/>
      <result property="age" column="age"/>
  </resultMap>
</mapper>
public interface UserMapper {

    User getUserById(int id);
}
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession session = factory.openSession();

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

User user = userMapper.getUserById(1); // 根据id查询用户

session.commit(); // 提交事务
session.close(); // 关闭SqlSession

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis的介绍、基本使用、高级使用 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL 合并记录

    SQL合并记录是指将一张表中的多条记录进行合并,使得其中的一些列的值合并成一条记录。常见的应用场景包括数据清洗、数据统计等。下面我将为你讲解SQL合并记录的完整攻略,包含两条实例。 1. 使用GROUP BY语句合并记录 GROUP BY语句是SQL合并记录的常用语句之一,它可以将一张表按照指定的列进行分组,并对每个分组中的记录进行统计。以下是一个例子。 假…

    database 2023年3月27日
    00
  • Shell脚本实现监控MySQL主从同步

    下面我将为你详细讲解Shell脚本实现监控MySQL主从同步的攻略,主要分以下几个步骤: 1. 安装必要的工具 在开始之前,我们需要安装几个工具,包括:MySQL客户端、邮件发送工具(比如mailx或者sendemail),以及cron定时任务工具。安装命令如下(以Debian/Ubuntu系统为例): # 安装MySQL客户端 sudo apt-get i…

    database 2023年5月22日
    00
  • MySQL数据库多表操作通关指南(外键约束和多表联合查询)

    MySQL数据库多表操作通关指南 当你开始处理大量的数据时,数据库中的单个表可能无法满足你的需要。这时候,多表操作就成为了必要的技能。本文将为你介绍 MySQL 数据库中的外键约束和多表联合查询,并提供实际的示例。 外键约束 为了在相关的表之间建立关系,MySQL 数据库提供了外键约束的功能。外键是一个表的列,它与另一个表的主键相关联。外键可以将数据分布在两…

    database 2023年5月22日
    00
  • SQL 判断含有字母和数字的字符串

    SQL中判断含有字母和数字的字符串的方法,可以使用正则表达式(REGEXP)实现。 在MySQL中,使用REGEXP可以匹配包含指定字母或字符串的文本。其中[[:digit:]]表示数字,[[:alpha:]]表示字母,利用这两者进行匹配,即可得到包含数字和字母的字符串。 以下是两个实例: 匹配包含数字和字母的字符串 假设有以下数据表tb_test,其中te…

    database 2023年3月27日
    00
  • docker Compose部署springboot+vue前端端分离

    下面是完整攻略: 1. 前置条件 在进行 Docker Compose 部署 Spring Boot + Vue 前端后端分离前,需要确保已经具备一下前置条件: 熟悉 Docker 和 Docker Compose 的基本使用方法 已经安装好 Docker 和 Docker Compose 环境 已经有 Spring Boot 和 Vue 的项目代码,并能正…

    database 2023年5月22日
    00
  • Linux下为Node.js程序配置MySQL或Oracle数据库的方法

    下面是“Linux下为Node.js程序配置MySQL或Oracle数据库的方法”的完整攻略。 1. 安装MySQL或Oracle数据库 在Linux上为Node.js程序配置MySQL或Oracle数据库,第一步就是在服务器上安装对应的数据库软件。在这里,我将以MySQL为例,介绍安装的方法。 1.1 安装MySQL 在终端中输入以下命令进行安装: sud…

    database 2023年5月22日
    00
  • SpringBoot启动遇到的异常问题及解决方案

    下面是关于SpringBoot启动遇到的异常问题及解决方案的完整攻略。 1.异常问题及解决方案 1.1 异常问题 SpringBoot启动过程中可能会出现各种异常,如以下几类: 未找到相关依赖 没有配置正确的数据库信息 端口被占用 配置文件错误 代码中逻辑错误等等 1.2 解决方案 针对不同的异常,我们需要采取不同的解决方案。下面针对几类常见的异常问题,提供…

    database 2023年5月21日
    00
  • Quartz集群原理以及配置应用的方法详解

    Quartz集群原理以及配置应用的方法详解 概述 Quartz是一个轻量级的、开源的、基于Java的调度框架,提供了很多调度的功能,比如创建多个定时任务、按照特定的规则执行任务、支持持久化、集群等。其中,Quartz集群支持多个应用实例共同组成一个调度集群,提高任务的可用性和可靠性。 Quartz集群原理 Quartz集群通过基于JDBC的持久化机制实现了数…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部