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日

相关文章

  • linux whatis与whatis database 使用及查询方法(man使用实例)

    下面我将详细讲解“linux whatis与whatis database 使用及查询方法(man使用实例)”的完整攻略。 一、什么是whatis与whatis database whatis是一个功能强大的命令行工具,可以用来查找某个命令的手册页(文档)及其详细描述。这个命令是由Unix系统上的whatis数据库提供支持的,这个数据库在安装软件包时自动构建…

    database 2023年5月22日
    00
  • FLASH与ASP通信入门教程——做真正属于自己的留言本第5/5页

    FLASH与ASP通信入门教程——做真正属于自己的留言本 1. 前言 在本篇教程中,我们将学习如何使用FLASH和ASP进行通信,并使用这个技术制作一个简单的留言本。通过这个实例,我们可以学到如下知识: 使用FLASH实现数据文件的读取和写入。 基于ASP的服务器端数据处理和存储。 使用FLASH和ASP进行数据的双向通信。 2. 准备工作 在开始这个实例前…

    database 2023年5月21日
    00
  • C++异常处理方式实例详解(超级详细!)

    C++异常处理方式实例详解(超级详细!) 异常处理方式简介 在C++中,当程序发生意外情况时,可以通过异常处理方式来进行处理。异常处理方式可以使程序在发生异常时,从当前执行流程中跳转到异常处理流程中去。 异常处理流程由 try/catch 语句块构成。try 语句块用于包含可能抛出异常的代码,而 catch 语句块则用于捕捉并处理异常,从而避免程序崩溃或未预…

    database 2023年5月21日
    00
  • PHP7安装Redis扩展教程【Linux与Windows平台】

    以下是详细的“PHP7安装Redis扩展教程【Linux与Windows平台】”攻略: Linux平台安装Redis扩展 前置条件 已安装PHP7 已安装Redis服务端 已安装PHP7的pecl扩展 步骤一:下载Redis扩展 使用pecl命令下载Redis扩展,执行命令: pecl install redis 步骤二:安装Redis扩展 在完成下载Red…

    database 2023年5月22日
    00
  • redis连接被拒绝的解决方案

    下面是针对“redis连接被拒绝的解决方案”的完整攻略。 一、背景 在开发过程中,我们经常会使用Redis缓存来提升网站的访问速度,而在使用Redis时,有时候会出现“Redis连接被拒绝”的情况。这种情况通常是由于Redis服务未正常启动所致。 二、解决方案 1. 检查Redis服务是否正常启动 第一步需要检查Redis服务是否正常启动。可以通过以下命令来…

    database 2023年5月22日
    00
  • Mysql时间轴数据 获取同一天数据的前三条

    针对这个问题,我可以给出以下攻略: 获取同一天数据的前三条 1.利用MySQL中的DATE()函数 如果我们想获取同一天的数据,我们就需要对 MySQL 中的数据进行一定的筛选。这里我们可以使用 MySQL 中自带的日期函数 DATE(),将原始时间戳转化为日期格式进行筛选,然后再对结果进行截取,获取前三条记录。 SELECT * FROM `table_n…

    database 2023年5月22日
    00
  • mysql datetime查询异常问题解决

    MySQL Datetime查询异常问题解决攻略 问题描述 在MySQL数据库中,当进行datetime类型的时间范围查询时,有可能出现查询结果不正确的情况,例如查询某一段时间内的订单数据时,结果出现缺失或重复的情况。 这种问题的原因在于datetime类型的字段存储的是指定的时间和日期信息,如果不加以限定,查询会默认使用当前时区进行计算,导致查询结果不正确…

    database 2023年5月21日
    00
  • Linux下MySQL5.7.18二进制包安装教程(无默认配置文件my_default.cnf)

    Linux下MySQL5.7.18二进制包安装教程 介绍 MySQL是一种流行的关系型数据库管理系统,被广泛应用于互联网、企业内部等各种场景。本文将介绍如何在Linux系统下安装MySQL 5.7.18二进制包,并在安装过程中注重一些细节。 步骤 步骤1:下载MySQL 5.7.18二进制包 从MySQL官方网站下载MySQL 5.7.18的二进制包,建议下…

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