为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis入门教程:轻松掌握数据库操作

标签:
Java SSM 数据库
概述

Mybatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射,简化了数据库操作,提供了灵活的配置方式。本文介绍了Mybatis的主要特点、与其他ORM框架的比较、适用场景,以及环境搭建和基本操作等内容。Mybatis通过简单的API和配置,能够轻松执行数据库操作,提高开发效率。

Mybatis入门教程:轻松掌握数据库操作
Mybatis简介

Mybatis的概念和特点

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,MyBatis 可以通过简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

MyBatis 的主要特点包括:

  1. 简化了数据库操作:提供了简单的 API,避免了原始 JDBC 编码的复杂性。
  2. 支持自定义 SQL:允许用户编写原始的 SQL 语句,支持存储过程。
  3. 灵活的映射:通过 XML 或注解的方式进行配置,将 Java 对象和数据库记录进行映射。
  4. 强大的类型处理器:提供了丰富的类型处理器,可以处理常见的数据类型。
  5. 支持缓存:支持一级缓存和二级缓存,可以提高查询效率。
  6. 与 Spring 集成良好:可以方便地与 Spring 框架配合使用,实现依赖注入等特性。

Mybatis与其他ORM框架的比较

Mybatis 与 Hibernate、Spring Data JPA 等 ORM 框架相比,有以下区别:

  1. SQL 执行方式:Hibernate 和 Spring Data JPA 使用的是纯 ORM 方式,将对象映射为数据库表,执行 SQL 语句时直接通过对象进行操作。而 Mybatis 需要编写 SQL 语句,提供了 SQL 执行的灵活性。

    比如,使用 Hibernate 对于一个简单的数据库查询操作,可以这样写:

    Session session = sessionFactory.openSession();
    String hql = "FROM User WHERE name = :name";
    Query query = session.createQuery(hql);
    query.setParameter("name", "张三");
    List<User> users = query.list();

    而使用 Mybatis,配置 XML 文件如下:

    <select id="selectUserByName" resultMap="userResultMap">
       SELECT * FROM user WHERE name = #{name}
    </select>

    然后通过 Java 代码执行:

    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.selectUserByName("张三");
  2. SQL 控制:Hibernate 和 Spring Data JPA 自动生成 SQL 语句,开发者无法直接控制 SQL 语句。Mybatis 允许开发者直接编写 SQL 语句,提供了更细致的 SQL 控制。
  3. 执行效率:Mybatis 执行效率较高,因为它直接执行 SQL 语句,不需要对象的转换。Hibernate 和 Spring Data JPA 的执行效率相对较低,因为它们需要进行对象的转换。
  4. 学习曲线:Mybatis 的学习曲线较陡,因为它需要编写 SQL 语句。Hibernate 和 Spring Data JPA 的学习曲线较平缓,因为它们提供了一种面向对象的方式来操作数据库。

Mybatis的适用场景

Mybatis 适用于以下场景:

  1. 复杂 SQL 语句:当应用中需要执行复杂的 SQL 语句时,Mybatis 提供了 SQL 执行的灵活性。
  2. 数据库操作频繁:当应用中数据库操作频繁时,Mybatis 的执行效率较高。
  3. 性能要求高:当应用对性能要求较高时,Mybatis 的执行效率较高。
  4. 需要控制 SQL 执行:当应用需要控制 SQL 语句的执行时,Mybatis 提供了 SQL 执行的灵活性。
Mybatis环境搭建

Mybatis的下载与安装

Mybatis 是一个 Java 库,不需要安装,只需要将其依赖添加到项目中即可。以下是 Mybatis 的下载与安装步骤:

  1. 下载 Mybatis 源码:可以从 Mybatis 官方网站下载 Mybatis 源码。也可以通过 Maven 或 Gradle 的依赖管理来获取 Mybatis 库。
  2. 解压下载的源码:如果下载的是压缩包,则需要解压压缩包。
  3. 将 Mybatis 库添加到项目的依赖中:在项目的构建工具配置文件中添加 Mybatis 依赖。以下是 Maven 项目的 pom.xml 文件示例:
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
</dependencies>

Maven项目中引入Mybatis依赖

在 Maven 项目中引入 Mybatis 依赖的步骤如下:

  1. 确保项目中已经安装了 Maven。
  2. 在项目的 pom.xml 文件中添加 Mybatis 依赖。具体配置如下:
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
</dependencies>
  1. 在项目的类路径下创建 Mybatis 的配置文件 mybatis-config.xml,该文件用于配置 Mybatis 的全局配置信息。例如,配置数据库连接信息、配置映射文件的位置等。
<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/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

数据库连接配置

数据库连接配置是 Mybatis 中非常重要的一步。以下是数据库连接配置的步骤:

  1. 在项目的类路径下创建 Mybatis 的配置文件 mybatis-config.xml。
  2. 在 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/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>
  1. 在项目的资源文件夹中创建 Mapper XML 文件。例如,创建 UserMapper.xml 文件,该文件用于定义 SQL 语句和映射关系。
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
  1. 创建 Java 类来使用配置文件中的信息。例如,创建如下 Java 类:
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
Mybatis核心概念

SqlSessionFactory和SqlSession

SqlSessionFactory 是 Mybatis 中用于创建 SqlSession 的工厂类。SqlSessionFactory 的创建由 Mybatis 的配置文件 mybatis-config.xml 控制。SqlSession 是 Mybatis 中用于执行 SQL 语句的接口。SqlSession 可以通过 SqlSessionFactory 的 openSession 方法创建。

InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
  1. 使用 SqlSession 来执行一些基本操作,例如查询所有用户:
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAllUsers();

Mapper接口与Mapper XML文件

Mapper 接口是 Mybatis 中用于定义 SQL 语句的接口。Mapper 接口中的方法与 Mapper XML 文件中的 SQL 语句一一对应。Mapper XML 文件是 Mybatis 中用于定义 SQL 语句和映射关系的文件。Mapper XML 文件中的 SQL 语句和映射关系与 Mapper 接口中的方法一一对应。

// Mapper 接口
public interface UserMapper {
    List<User> selectUsers();
}

// Mapper XML 文件
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUsers" resultType="com.example.entity.User">
        SELECT * FROM user
    </select>
</mapper>

{}和${}参数传递的区别

Mybatis 中提供了两种参数传递方式:#{} 和 ${}。

  • #{}:预编译参数,Mybatis 会将 SQL 语句中的参数标记为预编译参数,防止 SQL 注入攻击。例如,#{id} 表示将参数 id 作为预编译参数传递给 SQL 语句。

    <select id="selectUserById" resultType="com.example.entity.User">
      SELECT * FROM user WHERE id = #{id}
    </select>
  • ${}:字符串替换,Mybatis 会将 SQL 语句中的参数标记为字符串替换参数,不进行预编译。例如,${id} 表示将参数 id 作为字符串替换参数传递给 SQL 语句。

    <select id="selectUserById" resultType="com.example.entity.User">
      SELECT * FROM user WHERE id = ${id}
    </select>
Mybatis基本操作

CRUD操作(增删改查)

CRUD 操作是 Mybatis 中最基本的数据库操作。以下是 CRUD 操作的示例代码:

// 插入操作
User user = new User();
user.setId(1);
user.setName("张三");
user.setAge(18);
sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);

// 查询操作
List<User> users = sqlSession.selectList("com.example.mapper.UserMapper.selectAllUsers");
for (User user : users) {
    System.out.println(user.getName());
}

// 更新操作
User user = new User();
user.setId(1);
user.setName("李四");
sqlSession.update("com.example.mapper.UserMapper.updateUser", user);

// 删除操作
sqlSession.delete("com.example.mapper.UserMapper.deleteUserById", 1);

批量操作

批量操作是 Mybatis 中常用的数据库操作。以下是批量操作的示例代码:

List<User> users = new ArrayList<>();
users.add(new User(1, "张三", 18));
users.add(new User(2, "李四", 19));
sqlSession.insert("com.example.mapper.UserMapper.insertUsers", users);

分页查询

分页查询是 Mybatis 中常用的数据库操作。以下是分页查询的示例代码:

<select id="selectUsersByPage" resultType="com.example.entity.User">
    SELECT * FROM user LIMIT #{offset}, #{limit}
</select>
public List<User> selectUsersByPage(int offset, int limit) {
    return sqlSession.selectList("com.example.mapper.UserMapper.selectUsersByPage", new Page(offset, limit));
}

public static class Page {
    private int offset;
    private int limit;

    public Page(int offset, int limit) {
        this.offset = offset;
        this.limit = limit;
    }

    public int getOffset() {
        return offset;
    }

    public int getLimit() {
        return limit;
    }
}
Mybatis动态SQL

if、choose、when等标签的使用

动态 SQL 是 Mybatis 中常用的数据库操作。以下是动态 SQL 的示例代码:

<select id="selectUsers" resultType="com.example.entity.User">
    SELECT * FROM user
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>
public List<User> selectUsers(String name, Integer age) {
    return sqlSession.selectList("com.example.mapper.UserMapper.selectUsers", new User(name, age));
}

foreach标签的用法

动态 SQL 是 Mybatis 中常用的数据库操作。以下是动态 SQL 的示例代码:

<select id="selectUsersByIds" resultType="com.example.entity.User">
    SELECT * FROM user WHERE id IN
    <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>
public List<User> selectUsersByIds(List<Integer> ids) {
    return sqlSession.selectList("com.example.mapper.UserMapper.selectUsersByIds", ids);
}

like模糊查询

动态 SQL 是 Mybatis 中常用的数据库操作。以下是动态 SQL 的示例代码:

<select id="selectUsersByNameLike" resultType="com.example.entity.User">
    SELECT * FROM user WHERE name LIKE #{name}
</select>
public List<User> selectUsersByNameLike(String name) {
    return sqlSession.selectList("com.example.mapper.UserMapper.selectUsersByNameLike", "%" + name + "%");
}
Mybatis与Spring集成

Mybatis与Spring的整合步骤

Mybatis 与 Spring 的整合步骤如下:

  1. 在 Spring 配置文件中配置 Mybatis 的 SqlSessionFactory 和 SqlSessionTemplate。
  2. 在 Spring 配置文件中配置 Mapper 接口和 Mapper XML 文件。

在Spring配置文件中配置Mybatis

以下是 Spring 配置文件中配置 Mybatis 的示例代码:

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

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

使用Spring管理Mybatis的SqlSessionFactory和SqlSessionTemplate

以下是 Spring 配置文件中配置 SqlSessionFactory 和 SqlSessionTemplate 的示例代码:

<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>
        <ref bean="sqlSessionFactory"/>
    </constructor-arg>
</bean>

以下是使用 Spring 管理 SqlSessionFactory 和 SqlSessionTemplate 的示例代码:

@Autowired
private SqlSessionTemplate sqlSession;

public List<User> selectUsers() {
    return sqlSession.selectList("com.example.mapper.UserMapper.selectAllUsers");
}

通过以上步骤,可以将 Mybatis 与 Spring 集成起来,实现数据库操作的自动化管理。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消