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日

相关文章

  • 浅谈SpringMVC中的session用法及细节记录

    下面是关于“浅谈SpringMVC中的session用法及细节记录”的完整攻略,包含两个示例说明。 SpringMVC中的session用法及细节记录 在SpringMVC中,session是一个接口,它用于在服务器端存储和管理用户的状态信息。本文将介绍如何使用session对象来存储和管理用户的状态信息,并提供两个示例说明。 步骤一:创建SpringMVC…

    Java 2023年5月17日
    00
  • 基于JavaSwing设计和实现的酒店管理系统

    基于JavaSwing设计和实现的酒店管理系统攻略 简介 JavaSwing是Java平台下的一套GUI工具包,可以快速地实现各种界面程序的设计和实现。酒店管理系统是一个常见的管理类应用,通过JavaSwing的设计和实现,可以轻松地进行酒店管理系统的研发。 整体流程 酒店管理系统的设计和研发可以分为以下几个流程: 需求分析:明确需求和功能模块 界面设计:进…

    Java 2023年5月19日
    00
  • springsecurity基于token的认证方式

    下面我将详细讲解一下“Spring Security基于Token的认证方式”的完整攻略。 什么是Token认证方式 Token认证方式,是一种基于令牌(Token)的身份认证方式。在客户端成功登录后,服务端会生成一个Token,这个Token会放到HTTP响应头中或者响应体中返回给客户端,客户端需要在后续的请求中携带该Token才能访问资源。 Token认…

    Java 2023年5月20日
    00
  • 如何实现线程安全的并发容器?

    以下是关于如何实现线程安全的并发容器的完整使用攻略: 什么是线程安全的并发容器? 线程安全并发容器是指在多线程环境下,多个线程可以同时访问容器中的元素,而不会出现数据不一致或程序崩溃等问题。在多线程编程中,线程安全的并发容器是非常重要的,因为多个线程同时访问容器,会出现线程争用的问题,导致数据不一致或程序崩溃。 如何实现线程安全的并发容器? 为了实现线程安全…

    Java 2023年5月12日
    00
  • java开发时各类工具的使用规范

    Java开发时各类工具的使用规范 为了能够让Java开发能够更加高效、规范、易于维护,我们需要掌握各类工具的使用规范。 本文将介绍Java开发常用的各类工具的使用规范,包括:代码提交工具、依赖管理工具、构建工具、单元测试工具和IDE等。 代码提交工具 代码提交是开发的重要环节,在提交代码之前需要进行代码自测,并确保代码风格符合规范。 Git Git是目前最流…

    Java 2023年5月26日
    00
  • Java中数据库常用的两把锁之乐观锁和悲观锁

    Java中数据库常用的两把锁是乐观锁和悲观锁。 什么是乐观锁和悲观锁? 悲观锁 悲观锁假定在执行操作时会产生并发冲突,因此在操作数据前先加锁,确保操作数据时不会被其他人修改。悲观锁的典型实现就是数据库中的行锁、表锁。 在Java中,悲观锁常用的实现就是synchronized关键字和ReentrantLock类。 乐观锁 乐观锁假定在执行操作时不会产生并发冲…

    Java 2023年5月19日
    00
  • JavaScript处理解析JSON数据过程详解

    下面是“JavaScript处理解析JSON数据过程详解”的完整攻略。 什么是JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输。它是纯文本的,可读性较好,易于编写和解析,同时支持多种编程语言。 JSON由于其简洁性、标准化、易读性和跨平台性等优点越来越受到广泛的关注和应用。并且许多现代…

    Java 2023年5月26日
    00
  • Java线程池7个参数的详细含义

    Java中的线程池是一种常见的线程管理机制,将任务分配给线程池,可以提高程序的执行效率和资源利用率。在使用线程池时,可以通过设置不同的参数来控制线程池的行为,下面是Java线程池7个参数的详细含义: corePoolSize:设置线程池的核心线程数量。当提交的任务数小于等于核心线程数量时,线程池中的指定数量的线程会被立即创建并执行任务。如果所有核心线程都在执…

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