继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MyBatis入门教程:简单易懂的数据库操作指南

PIPIONE
关注TA
已关注
手记 1123
粉丝 150
获赞 704
概述

MyBatis 是一个优秀的持久层框架,支持自定义 SQL 查询、存储过程和高级映射,旨在简化 Java 应用中的数据库操作。它具有简单易用、强大的映射功能以及良好的扩展性和兼容性,适用于需要灵活控制 SQL 语句和频繁进行数据库操作的场景。

MyBatis简介

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL 查询,存储过程以及高级映射。MyBatis 的设计目标是降低 JDBC 开发中的重复性代码,使得开发人员可以更加关注于 SQL 语句的编写和应用程序的逻辑实现。

MyBatis的特点和优势
  1. 简单易用:MyBatis 的配置和映射文件非常简洁,易于理解和上手。
  2. 基于SQL的动态性:MyBatis 支持动态 SQL 语句,可以根据不同的业务需求生成不同的 SQL 语句。
  3. 强大的映射:MyBatis 能够将 Java 方法映射到 SQL 语句,使得 SQL 语句的处理更加方便。
  4. 支持多种数据库:MyBatis 支持多种主流的数据库,如 MySQL、Oracle、SQL Server 等。
  5. 易于扩展:MyBatis 提供了插件机制,用户可以根据需要扩展其功能。
  6. 兼容多种持久化框架:MyBatis 可以与 Spring、Hibernate 等框架无缝集成。
MyBatis的适用场景
  • 需要灵活控制 SQL 语句的场景。
  • 需要频繁进行数据库操作的场景。
  • 需要简化数据库操作的场景。
MyBatis环境搭建
下载和安装MyBatis

你可以从 MyBatis 的官方网站下载 MyBatis 的最新版本。下载完成后,解压文件,可以开始使用 MyBatis。

创建MyBatis项目

在本节中,我们将使用 IntelliJ IDEA 创建一个新的 Maven 项目。以下是创建步骤:

  1. 打开 IntelliJ IDEA,选择 File > New > Project
  2. 在 Project SDK 中选择你的 JDK 版本。
  3. 在左侧列表中选择 Maven,然后点击 Next
  4. GroupIdArtifactId 位置填入相关信息,例如 GroupIdcom.exampleArtifactIdmybatis-demo,然后点击 Next
  5. 点击 Finish 完成创建项目。
配置MyBatis核心配置文件

src/main/resources 目录下创建 mybatis-config.xml 文件,并编写如下配置内容:

<?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/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapping/UserMapper.xml"/>
    </mappers>
</configuration>
配置pom.xml

src/main/resources 目录下的 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.22</version>
    </dependency>
</dependencies>
MyBatis基本概念
SqlSessionFactory和SqlSession

SqlSessionFactory 是 MyBatis 的核心接口之一,它是线程安全的,可以安全地存储和复用。SqlSessionFactory 由 SqlSessionFactoryBuilder 创建,配置文件中的每一个 <mapper> 都映射为一个 SqlSession。

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = factory.openSession();
映射文件(Mapper XML文件)

映射文件定义了 SQL 语句和 Java 方法的映射关系。映射文件通常放在 src/main/resources 目录下。下面是一个简单的映射文件示例:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
实体类和结果映射

实体类通常表示数据库表中的记录,每个实体类与表中的字段相对应。结果映射描述了如何将数据库中的数据映射到 Java 对象中。

public class User {
    private int id;
    private String username;
    private String password;

    // getters and setters
}
<resultMap id="UserResultMap" type="com.example.model.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
</resultMap>
MyBatis常用操作
增加数据(INSERT)

在 MyBatis 中,插入数据可以通过配置文件中的 <insert> 标签来实现。

<insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
User user = new User();
user.setUsername("test");
user.setPassword("123456");
session.insert("com.example.mapper.UserMapper.insertUser", user);
查询数据(SELECT)

查询数据可以通过配置文件中的 <select> 标签来实现。

<select id="selectUserById" resultType="com.example.model.User">
    SELECT * FROM user WHERE id = #{id}
</select>
User user = session.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
更新数据(UPDATE)

更新数据可以通过配置文件中的 <update> 标签来实现。

<update id="updateUser" parameterType="com.example.model.User">
    UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
User user = new User();
user.setId(1);
user.setUsername("testUpdate");
user.setPassword("654321");
session.update("com.example.mapper.UserMapper.updateUser", user);
删除数据(DELETE)

删除数据可以通过配置文件中的 <delete> 标签来实现。

<delete id="deleteUserById" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>
session.delete("com.example.mapper.UserMapper.deleteUserById", 1);
MyBatis动态SQL

MyBatis 提供了多种标签来实现动态 SQL 语句,包括 ifchoosesetforeach 等。

if标签

if 标签用于条件分支判断。

<select id="selectUserByCondition" resultType="com.example.model.User">
    SELECT * FROM user
    <where>
        <if test="id != null">
            AND id = #{id}
        </if>
        <if test="username != null">
            AND username = #{username}
        </if>
    </where>
</select>
Map<String, Object> params = new HashMap<>();
params.put("id", 1);
params.put("username", "test");
List<User> users = session.selectList("com.example.mapper.UserMapper.selectUserByCondition", params);
choose标签

choose 标签类似于 Java 中的 switch 语句,可以根据不同的条件选择不同的 SQL 语句执行。

<select id="selectUserByCondition" resultType="com.example.model.User">
    SELECT * FROM user
    <where>
        <choose>
            <when test="id != null">
                AND id = #{id}
            </when>
            <when test="username != null">
                AND username = #{username}
            </when>
            <otherwise>
                AND 1 = 1
            </otherwise>
        </choose>
    </where>
</select>
set标签

set 标签用于更新字段时,根据条件动态生成 SQL 语句。

<update id="updateUserSelective" parameterType="com.example.model.User">
    UPDATE user
    <set>
        <if test="username != null">
            username = #{username},
        </if>
        <if test="password != null">
            password = #{password},
        </if>
    </set>
    WHERE id = #{id}
</update>
User user = new User();
user.setId(1);
user.setUsername("testUpdate");
user.setPassword("654321");
session.update("com.example.mapper.UserMapper.updateUserSelective", user);
foreach标签

foreach 标签用于循环遍历集合或数组,并生成 SQL 语句。

<insert id="insertUsers" parameterType="java.util.List">
    INSERT INTO user (username, password)
    VALUES
    <foreach item="item" index="index" collection="list" separator="," open="(" close=")">
        #{item.username}, #{item.password}
    </foreach>
</insert>
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setUsername("test1");
user1.setPassword("123456");
User user2 = new User();
user2.setUsername("test2");
user2.setPassword("654321");
userList.add(user1);
userList.add(user2);
session.insert("com.example.mapper.UserMapper.insertUsers", userList);
MyBatis与Spring集成
MyBatis-Spring简介

MyBatis-Spring 是 MyBatis 和 Spring 的集成库,它提供了 Spring 风格的数据访问层支持,使得 MyBatis 在 Spring 框架下的使用更加便捷。

配置MyBatis与Spring集成

为了集成 MyBatis 和 Spring,需要引入 MyBatis-Spring 的依赖,并配置相关的 Bean。

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>

在 Spring 的配置文件中,配置 SqlSessionFactoryBean 和 MapperScannerConfigurer。

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

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

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>
使用注解开发MyBatis映射器

MyBatis-Spring 支持使用注解来编写映射器接口。

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

    @Insert("INSERT INTO user (username, password) VALUES (#{username}, #{password})")
    void insertUser(User user);

    @Update("UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}")
    void updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);
}
使用SqlSessionTemplate和SqlSessionDaoSupport

SqlSessionTemplateSqlSessionDaoSupport 提供了线程安全的 SqlSession 代理对象,使得在 Spring 中使用 MyBatis 更加方便。

public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
    @Override
    public User getUserById(int id) {
        return super.getSqlSession().selectOne("com.example.mapper.UserMapper.getUserById", id);
    }

    @Override
    public void insertUser(User user) {
        super.getSqlSession().insert("com.example.mapper.UserMapper.insertUser", user);
    }

    @Override
    public void updateUser(User user) {
        super.getSqlSession().update("com.example.mapper.UserMapper.updateUser", user);
    }

    @Override
    public void deleteUser(int id) {
        super.getSqlSession().delete("com.example.mapper.UserMapper.deleteUser", id);
    }
}

通过以上步骤,你可以轻松地将 MyBatis 集成到 Spring 项目中,并利用 MyBatis 的强大功能进行数据库操作。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP