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

Mybatis持久层框架入门教程

标签:
Java 数据库
概述

Mybatis持久层框架是一个优秀的持久层解决方案,它支持定制化SQL、存储过程以及高级映射,避免了手动设置参数和获取结果集的繁琐工作。Mybatis能够使用简单的XML或注解进行配置,并可以轻松地与各种数据库进行交互,提高开发效率。本文将详细介绍Mybatis的配置、基本概念、操作数据库的方法以及与Spring的整合。

Mybatis简介

Mybatis是什么

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

Mybatis和Hibernate的区别

  • 查询灵活性:Mybatis的查询方式是基于XML或注解的方式,而Hibernate则是基于HQL(Hibernate Query Language)。
  • SQL语句的编写:Mybatis的手动编写SQL语句对性能优化更友好,而Hibernate会自动生成SQL语句,虽然简化了开发,但也牺牲了数据库的优化能力。
  • 对象关系映射的灵活性:Hibernate是全映射的,而Mybatis只映射一部分,需要手动编写SQL语句。
  • 性能:Mybatis在处理大量查询时比Hibernate性能要好,因为Mybatis的SQL是自己写的,可以针对特定的数据库进行优化。

Mybatis的优势

  • SQL清晰:Mybatis的SQL语句在XML中,易于管理和维护。
  • 灵活性:Mybatis提供了良好的灵活性,可以自定义SQL语句和映射关系。
  • 轻量级:Mybatis使用了少量的配置并且支持配置定制化,符合开发人员的习惯。
  • 与数据库无关:Mybatis几乎支持所有的数据库,支持包括常用的关系型数据库MySQL、Oracle、SQL Server等。
  • 易于扩展:Mybatis可以轻松扩展,开发团队可以自由地选择技术栈。
Mybatis环境搭建

开发环境准备

  • JDK:安装最新版本的JDK,确保环境变量配置正确。
  • IDE:IDEA或Eclipse,用于编写代码和调试。
  • 数据库:MySQL等,确保数据库驱动已经添加到系统环境变量中。
  • Maven:构建工具,需要安装Maven并配置Maven环境变量。

Maven依赖配置

pom.xml文件中添加Mybatis相关依赖:

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>
    <!-- 测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

配置Mybatis核心配置文件

Mybatis的核心配置文件mybatis-config.xml位于src/main/resources目录下。配置文件中需要定义数据库的连接信息以及一些全局配置:

<?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/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基本概念

核心接口介绍(SqlSession)

SqlSession是Mybatis的会话接口,它是线程不安全的。可以使用SqlSessionFactory创建SqlSession

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

SqlSession中包括了执行数据库操作的所有方法,如selectinsertupdatedelete等。

配置文件详解

配置文件mybatis-config.xml中包含数据库的连接信息、环境配置、映射文件位置等信息。

  • Environments:定义了数据库的连接信息和事务管理。
  • Mappers:定义了映射文件的位置,这些文件中描述了数据库表和Java对象之间的映射关系。

映射文件(Mapper XML)

映射文件是Mybatis的核心配置文件之一,位于src/main/resources/目录下,例如UserMapper.xml。映射文件中定义了数据库表和Java对象之间的映射关系,包括SQL语句的定义。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
Mybatis操作数据库

增删改查操作

在Java代码中通过SqlSession来执行SQL语句,例如查询一个用户:

public class MybatisExample {
    public static void main(String[] args) {
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
        SqlSession session = factory.openSession();

        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectUser(1);
        System.out.println(user.getName());

        session.close();
    }
}

使用注解进行数据库操作

Mybatis也支持使用注解的方式来定义SQL语句。例如,定义一个UserMapper接口:

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUser(@Param("id") int id);
}

在主程序中使用:

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

批量操作

Mybatis支持批量操作,可以将多个SQL语句放在同一个事务中执行。例如,批量插入用户:

UserMapper mapper = session.getMapper(UserMapper.class);
mapper.insertUser(new User(1, "User1"));
mapper.insertUser(new User(2, "User2"));
session.commit();
Mybatis动态SQL

Mybatis提供了动态SQL标签,可以在运行时根据条件动态生成SQL语句。

if标签

if标签可以用来条件判断,如果条件为真,则插入SQL语句。

<update id="updateUser">
    UPDATE user
    <set>
        <if test="name != null"> name = #{name}, </if>
        <if test="age != null"> age = #{age}, </if>
    </set>
    WHERE id = #{id}
</update>

choose标签

choose标签类似于Java中的switch,可以用来选择一个条件。

<select id="selectUser" resultType="com.example.model.User">
    SELECT * FROM user WHERE
    <choose>
        <when test="id != null">id=#{id}</when>
        <when test="name != null">name=#{name}</when>
        <otherwise>age=#{age}</otherwise>
    </choose>
</select>

foreach标签

foreach标签用来遍历集合。例如,批量插入用户:

<insert id="insertUsers">
    INSERT INTO user (id, name) VALUES
    <foreach item="item" index="index" collection="list" open="(" separator="),(" close=")">
        #{item.id}, #{item.name}
    </foreach>
</insert>
Mybatis与Spring整合

Mybatis与Spring的整合使得Mybatis可以更好地适应企业级应用,提供了更多功能和灵活性。

Spring整合Mybatis的方法

Mybatis可以通过Spring的SqlSessionFactoryBean来创建SqlSessionFactory,然后通过SqlSessionTemplate来获取SqlSession

配置文件整合详解

applicationContext.xml配置文件中,通过SqlSessionFactoryBean来创建SqlSessionFactory

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

定义数据源dataSource

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <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>

定义UserMapper接口,并通过MapperScannerConfigurer自动扫描:

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

在主程序中获取UserMapper

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = context.getBean("userMapper", UserMapper.class);
User user = mapper.selectUser(1);

实践示例

假设有一个User类和对应的UserMapper接口:

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

    // 构造函数、getter和setter省略
}
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUser(@Param("id") int id);

    @Insert("INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age})")
    void insertUser(User user);
}

在主程序中使用:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper mapper = context.getBean("userMapper", UserMapper.class);

    User user = mapper.selectUser(1);
    System.out.println(user.getName());

    User newUser = new User(2, "NewUser", 20);
    mapper.insertUser(newUser);
}

通过以上步骤,Mybatis与Spring的整合可以更方便地进行数据库操作。Mybatis提供了丰富的功能来简化数据库访问,使得开发人员可以更专注于业务逻辑的实现。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消