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事务管理学习之Hibernate详解

    Java事务管理学习之Hibernate详解攻略 一、什么是Hibernate? Hibernate是一个开源的ORM(Object-Relational Mapping)框架,它将Java对象映射到数据库表中,从而实现Java应用程序和数据库的交互。Hibernate的优点在于它轻松地处理复杂的数据库操作,可以帮助开发人员轻松地执行增删查改等操作。 二、如…

    Java 2023年5月19日
    00
  • Spring中的事务管理如何配置

    Spring提供了声明式事务管理和编程式事务管理两种方式。本文主要介绍Spring中的声明式事务管理的配置方法。 1. 配置数据源及事务管理器 首先需要配置数据源,这里以MySQL为例,配置方法如下: <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDa…

    Java 2023年6月3日
    00
  • 详解Java SpringAOP切面类

    下面我来为您详细讲解“详解Java Spring AOP切面类”完整攻略,该攻略包括以下内容: 什么是AOP切面类? Spring AOP的原理是什么? 如何编写一个AOP切面类? 示例1:利用AOP实现日志记录功能 示例2:利用AOP实现权限校验功能 什么是AOP切面类? AOP(Aspect-Oriented Programming)切面编程是面向对象编…

    Java 2023年5月19日
    00
  • java8新特性-lambda表达式入门学习心得

    Java 8新特性 – Lambda表达式入门学习心得 什么是Lambda表达式 Lambda表达式在Java 8中被引入,可以简化某些代码的书写。Lambda表达式本质上是一个匿名函数,可以传递给其他方法作为参数并被执行。它可以替代使用匿名内部类的情况,其中传递一个函数作为参数的情况非常常见。 Lambda 表达式语法 Lambda表达式的语法非常简洁。它…

    Java 2023年5月26日
    00
  • SpringMVC自定义属性编辑器详解及实例

    下面是关于“SpringMVC自定义属性编辑器详解及实例”的完整攻略,包含两个示例说明。 SpringMVC自定义属性编辑器详解及实例 在SpringMVC中,属性编辑器是一种用于将字符串转换为Java对象的机制。本文将介绍如何自定义属性编辑器,并提供两个示例说明。 步骤一:创建属性编辑器 首先,我们需要创建一个属性编辑器。属性编辑器是一个Java类,它实现…

    Java 2023年5月17日
    00
  • Spring Security十分钟入门教程

    以下是“Spring Security十分钟入门教程”的完整攻略: 什么是Spring Security? Spring Security是一个功能强大,高度可定制的框架,用于保护Java应用程序的安全。 它提供了适用于Web应用程序的身份验证,授权,防止攻击(如CSRF)等保护功能。 怎样使用Spring Security? 步骤1:添加Maven依赖项 …

    Java 2023年5月20日
    00
  • Java JDBC批量执行executeBatch方法详解

    下面是“Java JDBC批量执行executeBatch方法详解”的完整攻略: 什么是executeBatch方法 在使用JDBC操作数据库时,我们有时候需要往数据库中插入或者更新大批量的数据。这时候如果每次执行一次SQL语句,就会影响程序的效率。JDBC提供了executeBatch方法,可以将多个SQL语句一次性提交到数据库中执行,从而提高程序的效率。…

    Java 2023年5月20日
    00
  • 让你五分钟彻底理解Spring MVC

    让我来讲解一下“让你五分钟彻底理解Spring MVC”的攻略。 1. 了解Spring MVC的架构 Spring MVC是基于Model-View-Controller(MVC)设计模式的Web框架,它通过Dispatcher Servlet和Handler Mapping来连接Web请求和处理器(Controller)。通过View Resolver将…

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