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

Mybatis持久层框架入门教程

标签:
Java SSM 数据库
概述

Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,简化了数据访问层的开发过程。本文将详细介绍Mybatis持久层框架的配置、使用方法及应用场景,帮助读者快速掌握其基本概念和操作技巧。

Mybatis持久层框架入门教程
Mybatis简介

Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(普通的Java对象)映射成数据库中的记录。

Mybatis是什么

Mybatis的前身是iBatis,是Mybatis的父项目,虽然iBatis的功能十分强大,但其配置复杂,维护困难,因此后来改名为Mybatis,进行了一系列优化。Mybatis提供了一种简单、灵活的方式来完成从数据库到Java对象的映射。它允许开发者使用简单的XML或注解进行配置和原始映射,从而简化了数据访问层的开发过程。

Mybatis的优点和应用场景

  • 简单易用:Mybatis通过简单的方式将SQL语句和Java代码解耦,使得SQL语句可以独立编写和维护。
  • 灵活的SQL映射:提供了丰富的SQL映射方式,支持复杂查询和动态SQL。
  • 高性能:通过使用预编译的SQL语句,减少了SQL解析和编译的次数,提高了执行效率。
  • 与数据库无关:支持多种数据库(如MySQL、Oracle、SQL Server等),可以轻松地在不同数据库之间切换。
  • 支持缓存:提供了查询缓存机制,可以有效减少数据库访问次数,提高系统性能。
  • 支持延迟加载:可以实现一对一、多对多关联关系的延迟加载,提高数据访问效率。

应用场景:

  • 中小型项目:对于中小型项目,Mybatis提供了足够的灵活性和性能,非常适合。
  • 灵活性要求高的项目:对于一些需要复杂SQL查询的项目,Mybatis提供了很好的支持。
  • 需要高性能的项目:通过预编译SQL语句,提高执行效率,特别适合对性能有较高要求的项目。
Mybatis环境搭建

开发环境准备

为了使用Mybatis进行开发,首先需要准备开发环境。以下是一些必备工具及步骤:

  • 安装Java开发工具:下载并安装IDEA或Eclipse。
  • 安装JDK:下载并安装JDK,确保其版本符合项目需求。需配置好环境变量,以确保Java开发工具能够正确识别。
  • 引入Mybatis库:通过Maven或Gradle引入Mybatis库。例如,使用Maven在pom.xml文件中添加Mybatis和数据库驱动依赖。
  • 配置数据库连接:安装MySQL等数据库,并配置数据库连接字符串。例如,确保数据库服务器已安装并运行,并配置好数据库连接参数。

创建第一个Mybatis项目

创建一个简单的Mybatis项目,可以按照以下步骤进行操作:

  1. 创建Maven项目:假设使用Maven作为构建工具,创建一个Maven项目。
  2. 配置pom.xml:在项目的pom.xml文件中添加Mybatis的依赖。
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
</dependencies>
  1. 配置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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mybatis/UserMapper.xml"/>
    </mappers>
</configuration>
  1. 编写UserMapper.xml:创建UserMapper.xml文件,定义SQL语句。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.UserMapper">
    <select id="selectUser" resultType="com.example.mybatis.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
  1. 编写UserMapper接口:创建一个接口,用于定义数据库操作方法。
package com.example.mybatis;

public interface UserMapper {
    User selectUser(int id);
}
  1. 编写Java代码:在Java代码中使用Mybatis进行数据库操作。
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MybatisTest {
    public static void main(String[] args) {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            try (SqlSession session = sqlSessionFactory.openSession()) {
                UserMapper mapper = session.getMapper(UserMapper.class);
                User user = mapper.selectUser(1);
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

完成以上步骤后,就可以运行项目,完成Mybatis的基本配置和使用。

Mybatis核心概念

SqlSession和SqlSessionFactory

SqlSessionFactory是Mybatis最重要的接口之一,它是一个工厂类,用于创建SqlSession实例。通过SqlSessionFactory,可以获取到SqlSession,从而进行数据库操作。

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSession提供了执行SQL语句的接口,可以执行增删改查操作,并且可以获取映射器(Mapper),从而调用Mapper中的方法。SqlSession的生命周期比SqlSessionFactory短,每次数据库操作后,应该关闭SqlSession。

SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(1);

Mapper接口和XML配置

Mybatis使用Mapper接口定义数据库操作方法,并通过XML文件进行SQL语句的编写。

Mapper接口:定义数据库操作方法,例如插入、更新、删除、查询等。

public interface UserMapper {
    User selectUser(int id);
    int insertUser(User user);
    int updateUser(User user);
    int deleteUser(int id);
}

XML配置:在XML文件中编写SQL语句,并与Mapper接口的方法对应起来。

<mapper namespace="com.example.mybatis.UserMapper">
    <select id="selectUser" resultType="com.example.mybatis.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.mybatis.User">
        INSERT INTO user (id, username, password) VALUES (#{id}, #{username}, #{password})
    </insert>
    <update id="updateUser" parameterType="com.example.mybatis.User">
        UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
    </update>
    <delete id="deleteUser" parameterType="int">
        DELETE FROM user WHERE id=#{id}
    </delete>
</mapper>

通过这种方式,可以将SQL语句与Java代码解耦,提高代码的可维护性。

Mybatis持久化操作

增加数据

增加数据的操作通常使用insert标签来实现。

<insert id="insertUser" parameterType="com.example.mybatis.User">
    INSERT INTO user (id, username, password) VALUES (#{id}, #{username}, #{password})
</insert>

在Java代码中,调用Mapper接口的方法来插入用户数据。

User user = new User(1, "testUser", "testPassword");
int rows = mapper.insertUser(user);
System.out.println("Insert rows: " + rows);

更新数据

更新数据的操作通常使用update标签来实现。

<update id="updateUser" parameterType="com.example.mybatis.User">
    UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
</update>

在Java代码中,调用Mapper接口的方法来更新用户数据。

User user = new User(1, "newUsername", "newPassword");
int rows = mapper.updateUser(user);
System.out.println("Update rows: " + rows);

删除数据

删除数据的操作通常使用delete标签来实现。

<delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id=#{id}
</delete>

在Java代码中,调用Mapper接口的方法来删除用户数据。

int id = 1;
int rows = mapper.deleteUser(id);
System.out.println("Delete rows: " + rows);

查询数据

查询数据的操作通常使用select标签来实现。

<select id="selectUser" resultType="com.example.mybatis.User">
    SELECT * FROM user WHERE id = #{id}
</select>

在Java代码中,调用Mapper接口的方法来查询用户数据。

User user = mapper.selectUser(1);
System.out.println("User: " + user);
Mybatis动态SQL

Mybatis提供了多种标签来实现动态SQL,常用的标签包括ifchooseforeach等。

使用if标签

if标签用于条件判断,可以根据条件来决定是否包含某个SQL片段。

<select id="selectUser" resultType="com.example.mybatis.User">
    SELECT * FROM user WHERE id = #{id}
    <if test="username != null">
        AND username = #{username}
    </if>
</select>

在Java代码中,传入不同的参数来测试if标签的效果。

User user1 = mapper.selectUser(1); // 只传入id
User user2 = mapper.selectUser(1, "testUsername"); // 传入id和用户名
System.out.println("User1: " + user1);
System.out.println("User2: " + user2);

使用choose标签

choose标签用于多条件选择,类似于SQL中的case语句。

<select id="selectUser" resultType="com.example.mybatis.User">
    SELECT * FROM user WHERE id = #{id}
    <choose>
        <when test="username != null">
            AND username = #{username}
        </when>
        <when test="password != null">
            AND password = #{password}
        </when>
    </choose>
</select>

在Java代码中,传入不同的参数来测试choose标签的效果。

User user1 = mapper.selectUser(1, "testUsername"); // 只传入用户名
User user2 = mapper.selectUser(1, null, "testPassword"); // 只传入密码
System.out.println("User1: " + user1);
System.out.println("User2: " + user2);

使用foreach标签

foreach标签用于循环遍历集合,通常用于实现IN查询。

<select id="selectUsers" resultType="com.example.mybatis.User">
    SELECT * FROM user WHERE id IN
    <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

在Java代码中,传入一个集合来测试foreach标签的效果。

List<Integer> ids = Arrays.asList(1, 2, 3);
List<User> users = mapper.selectUsers(ids);
users.forEach(user -> System.out.println("User: " + user));
Mybatis与Spring集成

配置数据源

Spring中配置数据源可以使用多种方式,例如JDBC数据源、Tomcat数据源、Druid数据源等。这里以Druid数据源为例,配置数据源。

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

创建SqlSessionFactory

创建SqlSessionFactory时,可以使用Mybatis的SqlSessionFactoryBean,并注入数据源。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>

使用Mapper接口

在Spring中,可以直接注入Mapper接口,而不需要手动创建SqlSession和Mapper实例。

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

在Java代码中,直接注入Mapper接口就可以使用。

@Autowired
private UserMapper mapper;

public void test() {
    User user = mapper.selectUser(1);
    System.out.println("User: " + user);
}

通过这种方式,可以简化Mybatis的使用过程,使其与Spring无缝集成。

总结

本文从Mybatis的基本概念到环境搭建,再到持久化操作和动态SQL的使用,最后介绍了Mybatis与Spring的集成,详细介绍了Mybatis的使用方法和应用场景。通过本文的学习,读者可以掌握Mybatis的基本使用方法,并能够将其应用到实际项目中。

参考资料

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消