MyBatis框架简介及入门案例详解

MyBatis框架简介及入门案例详解

MyBatis框架简介

MyBatis是一个持久层框架,它支持定制化SQL、存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手工输入以及对结果集的检索封装。MyBatis可以采用注解或xml方式配置映射关系,支持动态SQL,极其灵活方便。

MyBatis入门案例

准备工作

1.创建一个Java Web项目,并引入MyBatis的jar包。

2.引入数据库驱动包,这里以MySQL为例。

在项目中定义实体类

下面以学生实体类为例,实现类信息的定义。

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

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

定义Mapper接口

定义Mapper接口,并声明方法,将其映射到SQL语句中。

public interface StudentMapper {
    public List<Student> findAllStudents();
}

定义Mapper.xml

在resources文件夹下新建一个mapper文件夹,并且在文件夹中新建一个StudentMapper.xml。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.StudentMapper">
    <select id="findAllStudents" resultType="com.domain.Student">
        SELECT * FROM student
    </select>
</mapper>

配置MyBatis全局配置文件

在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/test" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/StudentMapper.xml" />
    </mappers>
</configuration>

执行查询操作

public class TestMybatis {
    private static SqlSessionFactory factory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SqlSession session = factory.openSession();
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        List<Student> studentList = studentMapper.findAllStudents();
        for (Student student : studentList) {
            System.out.println("学生id:" + student.getId() + " 学生姓名:" + student.getName() + " 学生年龄:" + student.getAge());
        }
        session.close();
    }
}

MyBatis多表查询示例

数据库表定义

这里我们演示一个校园论坛的数据表结构,包括了四张表:用户表(user)、板块表(board)、帖子表(post)和评论表(reply)。

用户表(user)

列名 类型 是否为空 主键 备注
id int
name varchar(8)

板块表(board)

列名 类型 是否为空 主键 备注
id int
name varchar(50)
content text
parent int

帖子表(post)

列名 类型 是否为空 主键 备注
id int
title varchar(50)
text text
reply int 回复数

评论表(reply)

列名 类型 是否为空 主键 备注
id int
text text
post int
user int 作者

问题描述

需求:查询出每个帖子及其对应的一个评论,要求查询结果为帖子标题和该帖子的一个评论内容。

Mapper.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis.courses.manytomany.CourseMapper">

    <resultMap id="PostResult" type="com.mybatis.courses.manytomany.Post">
        <id property="id" column="id" />
        <result property="title" column="title" />
        <result property="replyCount" column="replyCount" />

        <collection property="comments" column="id" javaType="ArrayList"
                    ofType="com.mybatis.courses.manytomany.Comment" select="findCommentById" />

    </resultMap>

    <resultMap id="CommentResult" type="com.mybatis.courses.manytomany.Comment">
        <id property="id" column="id" />
        <result property="postId" column="post_id" />
        <result property="content" column="content" />
    </resultMap>

    <select id="findPostById" resultMap="PostResult">
        SELECT * FROM post WHERE id = #{id}
    </select>

    <select id="findCommentById" resultMap="CommentResult">
        SELECT * FROM comment WHERE post_id = #{id} LIMIT 1
    </select>

</mapper>

测试类内容

@Test
    public void testFindPostWithComment() {
        SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
        try {
            CourseMapper courseMapper = sqlSession.getMapper(CourseMapper.class);
            Post post = courseMapper.findPostById(1);
            System.out.println(post.getTitle());
            System.out.println(post.getComments().get(0).getContent());
        } finally {
            sqlSession.close();
        }
    }

通过以上示例,我们可以看到通过MyBatis优雅地进行类与关系型数据库之间的数据交互。无需编写大量的JDBC代码,从而提高开发效率,在代码维护与稳定性方面也有很好的保障。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis框架简介及入门案例详解 - Python技术站

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

相关文章

  • 基于Java实现扫码登录的示例代码

    下面是基于Java实现扫码登录的完整攻略。 基于Java实现扫码登录的示例代码 什么是扫码登录? 扫码登录是指用户访问网站时,需要通过扫描二维码的方式进行身份验证和登录。扫码登录常用于手机客户端和第三方平台等场景中。 实现步骤 1.生成二维码 首先需要生成二维码,可以使用第三方库zxing来实现。使用如下代码进行生成: /** * 生成二维码 * @para…

    Java 2023年5月19日
    00
  • IDEA连接Mysql数据库的详细图文教程

    下面是“IDEA连接MySQL数据库的详细图文教程”的完整攻略,包含两条示例。 准备工作 首先需要准备好以下工具和环境:- IntelliJ IDEA(版本最好是Community或Ultimate,均支持插件安装)- MySQL数据库- MySQL JDBC驱动程序(可以从mysql官网下载) 安装MySQL JDBC驱动程序 下载MySQL JDBC驱动…

    Java 2023年5月20日
    00
  • 浅谈jsp中的9个隐含对象

    接下来我将为大家详细讲解“浅谈JSP中的9个隐含对象”的完整攻略。 1. JSP的9个隐含对象 在JSP页面中,有9个隐含对象,他们分别是: request:表示客户端发来的请求,被封装成了request对象,在JSP页面中可以通过request对象访问请求中的参数信息。 response:表示服务器对请求做出的响应,被封装成了response对象,在JSP…

    Java 2023年6月15日
    00
  • Java JSON转成List结构数据

    下面我将详细讲解Java中如何将JSON转成List结构数据的完整攻略。 环境准备 首先需要引入相关依赖包,可以使用Maven管理依赖,将以下代码添加到项目根目录下的pom.xml文件中: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…

    Java 2023年5月26日
    00
  • 微信小程序开发实现首页弹框活动引导功能

    下面是“微信小程序开发实现首页弹框活动引导功能”的详细攻略: 步骤一:创建活动弹框组件 在项目中创建一个名为activity-modal的活动弹框组件。 在activity-modal组件的WXML文件中定义一个自定义弹框,并设置其显示和隐藏的属性: <view class="activity-modal" hidden=&quot…

    Java 2023年5月23日
    00
  • java中删除 数组中的指定元素方法

    当我们需要删除数组中指定元素时,可以通过以下步骤实现: 遍历数组,找到需要删除的元素; 将被删除元素后面的所有元素向前移动一位; 将数组末尾元素设为null或者0,以保证数组的正确长度。 这里提供两个示例: 示例1: 我们定义一个数组int[] arr = {1, 2, 3, 4, 5},现在我们需要删除元素2,实现代码如下: int[] arr = {1,…

    Java 2023年5月26日
    00
  • Springboot整合Redis实现超卖问题还原和流程分析(分布式锁)

    下文将详细讲解Spring Boot整合Redis实现超卖问题还原和流程分析的完整攻略。 简介 超卖是电商系统开发中常见的问题之一,那么如何避免呢?本文主要介绍如何利用Spring Boot整合Redis实现分布式锁来解决超卖问题。 超卖问题 假设电商平台需要在某个时间段内销售一定数量的商品。同时,多个用户可以在同一时间内尝试购买该商品。如果没有控制好并发的…

    Java 2023年5月26日
    00
  • ansible批量部署tomcat的方法

    这里为大家提供一份ansible批量部署tomcat的方法的详细攻略。 准备工作 在开始部署tomcat之前,需要完成以下准备工作: 确保在所有需要部署tomcat的机器上,都已经安装了ansible。 下载并安装Java和tomcat,这里我以centos系统为例。 yum install -y java tomcat 确保部署机器与被部署机器之间已经建立…

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