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

Mybatis持久层框架入门教程

标签:
SSM 数据库
概述

Mybatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,极大地简化了数据库操作。Mybatis通过配置文件来指定SQL语句,可以完全控制SQL语句和数据库的交互,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis持久层框架提供了强大的数据库操作功能,提高了开发效率,减少了复杂度。

Mybatis简介与安装

Mybatis是什么

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。

Mybatis与JDBC的区别

JDBC 是 Java Database Connectivity 的缩写,是 Java 语言访问数据库的标准 API。它提供了一组接口,通过这些接口,Java 应用程序可以执行 SQL 语句,处理结果集,管理和操作数据库连接等。JDBC 本身提供了足够的灵活性来处理各种数据库,但随着数据量的增大,使用原始 JDBC 的代码变得越来越复杂和难以维护。

MyBatis 是一个 SQL 映射工具,它通过 XML 文件或注解来配置 SQL 语句与 Java 方法的映射关系,极大地简化了数据库操作。MyBatis 的代码更加简洁,提高了开发效率。Mybatis 通过配置文件来指定 SQL 语句,可以完全控制 SQL 语句和数据库的交互。

Mybatis的安装与配置

  1. 下载 MyBatis

    MyBatis 的最新版本可以在其官方网站或 Maven 仓库中找到。目前最新版本为 3.5.6。

  2. 配置环境变量

    如果需要在命令行中使用 MyBatis,可以将 MyBatis 的 jar 包路径添加到环境变量 CLASSPATH 中。将 MyBatis 的 jar 以及依赖的 jar 包路径添加到环境变量中,例如:

    export CLASSPATH=$CLASSPATH:/path/to/mybatis.jar:/path/to/dependency/jars
  3. 创建 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/mydb"/>
                   <property name="username" value="root"/>
                   <property name="password" value="password"/>
               </dataSource>
           </environment>
       </environments>
       <mappers>
           <mapper resource="com/example/mapper/UserMapper.xml"/>
       </mappers>
    </configuration>
  4. 编写 SQL 映射文件

    创建 SQL 映射文件 UserMapper.xml,定义 SQL 语句。

    <mapper namespace="com.example.mapper.UserMapper">
       <select id="selectUser" resultType="com.example.model.User">
           SELECT id, name, age FROM users WHERE id = #{id}
       </select>
    </mapper>
Mybatis环境搭建

创建Java项目

  1. 使用 IDE(如 IntelliJ IDEA 或 Eclipse)创建一个新的 Java 项目。
  2. 配置项目的构建路径,确保添加了 MyBatis 的 jar 文件及其依赖的 jar 文件。

导入Mybatis依赖

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>

配置Mybatis核心文件

创建 mybatis-config.xml 配置文件,配置数据库连接信息和 SQL 映射文件。

<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/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
Mybatis映射文件详解

MyBatis 的配置文件 UserMapper.xml 包含了 SQL 语句定义和结果映射。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.model.User">
        SELECT id, name, age FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>

    <update id="updateUser">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

SQL语句的编写

UserMapper.xml 中编写 SQL 语句。

<insert id="insertUser">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>

结果集映射

定义结果集映射,将数据库字段映射到 Java 对象。

<select id="selectUser" resultType="com.example.model.User">
    SELECT id, name, age FROM users WHERE id = #{id}
</select>
Mybatis基本使用

实体类与Mapper接口

创建实体类 User 和对应的 Mapper 接口 UserMapper

// User.java
package com.example.model;

public class User {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

// UserMapper.java
package com.example.mapper;

import com.example.model.User;

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

SqlSession和SqlSessionFactory

创建 SqlSessionFactorySqlSession

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MybatisExample {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = MybatisExample.class.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.getName());
        }
    }
}

增删改查操作

定义 UserMapper 接口,并在 UserMapper.xml 中编写对应的 SQL 语句。

// UserMapper.java
public interface UserMapper {
    User selectUser(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.model.User">
        SELECT id, name, age FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>

    <update id="updateUser">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>
Mybatis高级特性

动态SQL

使用 <if><choose><when><otherwise> 等标签来实现动态 SQL 语句。

<select id="selectUser" resultType="com.example.model.User">
    SELECT id, name, age FROM users
    <where>
        <if test="id != null">
            AND id = #{id}
        </if>
        <if test="name != null">
            AND name = #{name}
        </if>
    </where>
</select>

分页查询

使用 SQL 的 LIMIT 关键字实现分页查询。

<select id="selectUsers" resultType="com.example.model.User">
    SELECT * FROM users
    LIMIT #{offset}, #{limit}
</select>

一对一与一对多关联查询

定义一对多关联查询,例如查询用户及其订单。

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <resultMap id="UserResultMap" type="com.example.model.User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <collection property="orders" javaType="java.util.List" ofType="com.example.model.Order">
            <id property="id" column="order_id"/>
            <result property="orderName" column="order_name"/>
        </collection>
    </resultMap>

    <select id="selectUserWithOrders" resultMap="UserResultMap">
        SELECT u.id, u.name, u.age, o.id AS order_id, o.order_name
        FROM users u
        LEFT JOIN orders o ON u.id = o.user_id
        WHERE u.id = #{id}
    </select>
</mapper>
Mybatis与Spring整合

Mybatis-Spring简介

Mybatis-Spring 是 Mybatis 和 Spring 的整合框架,它提供了 SqlSessionTemplateSqlSessionFatoryBean,简化了 Mybatis 的使用。

整合步骤

  1. 导入依赖

    pom.xml 中添加 Mybatis-Spring 相关的依赖。

    <dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>2.1.4</version>
    </dependency>
  2. 配置 Spring

    在 Spring 配置文件中配置 SqlSessionFactoryBeanMapperScannerConfigurer

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.example.mapper"/>
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    • SqlSessionFactoryBean:用于创建 SqlSessionFactory
    • MapperScannerConfigurer:用于扫描 Mapper 接口并注入 SqlSessionFactory
  3. 配置数据源

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
       <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
       <property name="username" value="root"/>
       <property name="password" value="password"/>
    </bean>

使用示例

在 Spring 配置文件中定义 Mapper 接口的 Bean。

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

创建一个服务类来调用 Mapper 接口。


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserById(int id) {
        return userMapper.selectUser(id);
    }
}
``

总结:

通过以上步骤,你可以顺利完成 Mybatis 的入门与高级特性学习,以及与 Spring 的整合。Mybatis 提供了强大的数据库操作功能,提高了开发效率,减少了复杂度。希望这篇教程能帮助你更好地理解和使用 Mybatis。更多关于 Mybatis 的详细内容,可以参考其官方文档或慕课网上的相关课程。
点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消