Java的MyBatis快速入门和实战详解

Java的MyBatis快速入门和实战详解

什么是MyBatis

MyBatis 是一款轻量级的 Java 持久层框架。 它支持自定义 SQL、存储过程以及高级映射。MyBatis 通过简化 JDBC 编程来实现对数据库的操作,并将 SQL 语句与程序代码分离,使应用程序的开发和维护更加简单。

MyBatis快速入门

环境搭建

  • 安装 JDK
  • 安装 Maven
  • 创建 Maven 项目

Maven 配置

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

数据库配置

使用 MyBatis 操作数据库需要在 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/testdb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/BookMapper.xml"/>
    </mappers>
</configuration>

映射文件编写

MyBatis 通过自定义 XML 配置文件进行数据操作。映射文件中主要包含了要执行的 SQL 语句、参数映射、结果映射等内容。

以下示例演示了如何编写一个查询 SQL 的映射文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper">
    <select id="getBookById" resultType="com.example.model.Book">
        SELECT * FROM book WHERE book_id = #{bookId}
    </select>
</mapper>

Java 代码编写

在 Java 代码中创建并使用 MyBatis 的 SQL 会话工厂来执行 SQL 命令。下面的示例展示如何在 Java 代码中调用查询 SQL:

public class BookDao {

    private SqlSessionFactory sqlSessionFactory;

    public BookDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public Book getBookById(int bookId) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            return session.selectOne("com.example.mapper.BookMapper.getBookById", bookId);
        }
    }

}

MyBatis实战详解

使用 MyBatis 进行增删改查

在 MyBatis 中,增删改查对应的 SQL 语句分别是 insert、update、delete 和 select,每个 SQL 对应一个映射文件。

以下示例演示了如何编写和调用 insert SQL:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper">
    <insert id="addBook" parameterType="com.example.model.Book">
        INSERT INTO book (book_id, book_name, author, price, invent_date) 
        VALUES (#{bookId}, #{bookName}, #{author}, #{price}, #{inventDate})
    </insert>
</mapper>
public class BookDao {

    private SqlSessionFactory sqlSessionFactory;

    public BookDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public void addBook(Book book) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            session.insert("com.example.mapper.BookMapper.addBook", book);
            session.commit();
        }
    }

}

使用 MyBatis 进行动态 SQL

MyBatis 提供了一套强大的动态 SQL 语言来帮助我们编写灵活的 SQL 语句。使用动态 SQL 可以根据不同的条件组合生成不同的 SQL 语句。

以下示例演示了如何使用动态 SQL 编写查询 SQL:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper">
    <select id="getBookList" resultType="com.example.model.Book">
        SELECT * FROM book
        <where>
            <if test="bookId != null">
                AND book_id = #{bookId}
            </if>
            <if test="bookName != null">
                AND book_name LIKE CONCAT('%', #{bookName}, '%')
            </if>
        </where>
    </select>
</mapper>
public class BookDao {

    private SqlSessionFactory sqlSessionFactory;

    public BookDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public List<Book> getBookList(Integer bookId, String bookName) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            BookMapper mapper = session.getMapper(BookMapper.class);
            return mapper.getBookList(bookId, bookName);
        }
    }

}

示例1:使用 MyBatis 进行分页查询

以下示例演示如何使用 MyBatis 进行分页查询:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper">
    <select id="getBookListByPage" resultType="com.example.model.Book">
        SELECT * FROM book 
        <where>
            <if test="bookName != null">
                AND book_name LIKE CONCAT('%', #{bookName}, '%')
            </if>
        </where>
        ORDER BY book_id
        LIMIT #{start}, #{size}
    </select>
</mapper>
public class BookDao {

    private SqlSessionFactory sqlSessionFactory;

    public BookDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public List<Book> getBookListByPage(String bookName, int start, int size) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            BookMapper mapper = session.getMapper(BookMapper.class);
            return mapper.getBookListByPage(bookName, start, size);
        }
    }

}

示例2:使用 MyBatis 进行一对多关联查询

以下示例演示如何使用 MyBatis 进行一对多关联查询:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.BookMapper">
    <resultMap id="bookMap" type="com.example.model.Book">
        <id property="bookId" column="book_id"/>
        <result property="bookName" column="book_name"/>
        <result property="author" column="author"/>
        <result property="price" column="price"/>
        <result property="inventDate" column="invent_date"/>
        <collection property="bookItems" ofType="com.example.model.BookItem">
            <id property="itemId" column="item_id"/>
            <result property="itemName" column="item_name"/>
            <result property="count" column="count"/>
        </collection>
    </resultMap>
    <select id="getBookWithItemsById" resultMap="bookMap">
        SELECT book.book_id, book.book_name, book.author, book.price, book.invent_date,
               book_item.item_id, book_item.item_name, book_item.count
        FROM book
        LEFT JOIN book_item ON book.book_id = book_item.book_id
        WHERE book.book_id = #{bookId}
    </select>
</mapper>
public class BookDao {

    private SqlSessionFactory sqlSessionFactory;

    public BookDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public Book getBookWithItemsById(int bookId) {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            BookMapper mapper = session.getMapper(BookMapper.class);
            return mapper.getBookWithItemsById(bookId);
        }
    }

}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java的MyBatis快速入门和实战详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java新手入门学习之正则表达式

    Java新手入门学习之正则表达式 什么是正则表达式? 正则表达式是一种描述字符串模式的语言,可以通过正则表达式来搜索、匹配、替换和分割文本。在Java中,可以使用Java的正则表达式API来完成对于字符串的处理。 Java中正则表达式的基本语法 Java中正则表达式的基本语法如下: pattern.matcher(str).method() 其中patter…

    Java 2023年5月27日
    00
  • SpringBoot SSMP 整合案例分享

    SpringBoot SSMP整合案例分享 SpringBoot是一个快速开发框架,SSM是一个经典的JavaWeb开发框架,它们的整合可以让我们更加高效地进行JavaWeb开发。本文将分享一个SpringBoot整合SSM的案例,包括如何整合MyBatis和SpringMVC,并提供两个示例说明。 1. 创建SpringBoot项目 首先,我们需要创建一个…

    Java 2023年5月18日
    00
  • Android中ArrayList和数组相互转换

    下面我就来详细讲解一下“Android中ArrayList和数组相互转换”的完整攻略,包含以下内容: 将数组转换成ArrayList 将ArrayList转换成数组 示例说明:数组转ArrayList 示例说明:ArrayList转数组 将数组转换成ArrayList 如果我们需要使用ArrayList来操作数组,那么就需要将数组转换成ArrayList。下…

    Java 2023年5月26日
    00
  • java 实现回调代码实例

    Java 实现回调是一种常见的编程模式,它可以帮助我们解决很多传统的异步编程问题。本文将为你详细讲解 Java 实现回调的完整攻略,并提供两个实例说明。 什么是回调 回调是指一种可选择的机制,应用程序可以将函数或方法(回调函数)作为参数传递到另一个函数或方法中,该函数或方法会在后续或并行线程中调用传入的函数或方法,让其完成某些操作。 回调实现 Java 中实…

    Java 2023年5月18日
    00
  • Java中的异步与线程池解读

    Java中的异步与线程池解读 什么是异步? 异步是指一个方法调用不会阻塞当前线程,而是立即返回,然后在另一个线程上执行。由于异步方法不会阻塞当前线程,所以可以提高系统的并发能力,避免系统因等待I/O等操作而造成的阻塞。 在Java中,异步通常是指使用线程池来执行一些耗时的任务。Java 5引入了java.util.concurrent包,其中提供的Excut…

    Java 2023年5月18日
    00
  • Java利用jenkins做项目的自动化部署

    下面是关于“Java利用Jenkins做项目的自动化部署”的完整攻略: 简介 Jenkins是一个开源的自动化部署工具,用于构建、测试、发布软件项目。Java开发人员可以使用Jenkins实现自己的自动化部署。Java利用Jenkins做项目的自动化部署,主要分为两个步骤: 安装Jenkins 配置Jenkins、部署项目 接下来将针对这两个方面分别详细介绍…

    Java 2023年5月19日
    00
  • java中的常见关键字解析

    Java中的关键字是具有特殊含义的词汇,它们在编写Java程序时起着非常重要的作用。在本文中,我们将详细讲解Java中的常见关键字及其用法。 标识符 Java中的标识符是用来命名变量、方法和类等的名称,标识符需要满足以下要求: 标识符是由字母、数字、下划线组成的序列。 第一个字符必须是字母或下划线。 标识符不能是Java关键字。 标识符区分大小写。 示例: …

    Java 2023年5月26日
    00
  • Java实现实时监控目录下文件变化的方法

    Java实现实时监控目录下文件变化的方法可以通过使用Java 7或更高版本中的WatchService类来实现。下面是实现此方法的详细步骤。 第一步:创建WatchService对象 使用Java的标准库提供的WatchService类,可以监控文件系统中的更改。可以通过以下方式创建WatchService对象: WatchService watchServ…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部