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 String拼接时的问题汇总

    Java String拼接时的问题汇总 在 Java 中,String 类型是我们常用的数据类型之一,我们经常需要对字符串进行拼接操作。但是,在拼接过程中,我们也会遇到一些问题,比如性能问题、线程安全问题等。本文将会对 Java String 拼接时的问题进行梳理和解决。 问题一:使用 + 进行字符串拼接,性能问题 在 Java 中,我们可以使用 + 符号对…

    Java 2023年5月27日
    00
  • 解决BeanUtils.copyProperties不支持复制集合的问题

    当使用BeanUtils.copyProperties方法进行对象属性复制时,如果目标对象属性中存在集合类型,会出现无法复制集合中数据的问题。这个问题可以通过使用BeanUtils.copyProperties的另一个重载方法来解决,其中重载方法能够进行集合属性的复制。下面详细介绍解决这个问题的完整攻略。 核心思路 解决BeanUtils.copyPrope…

    Java 2023年5月20日
    00
  • 持久层ORM框架Hibernate框架的使用及搭建方式

    下面是详细的攻略: 什么是Hibernate? Hibernate是一种采用对象关系映射(Object Relational Mapping, ORM)概念的持久性框架。Hibernate的目标是在Java平台上提供一个简单、高效的持久性解决方案。使用Hibernate可以极大地简化数据访问层的编写,同时也可以提供相当高的性能和可靠性。 Hibernate的…

    Java 2023年5月19日
    00
  • spring boot的健康检查HealthIndicators实战

    下面我将详细讲解关于 “spring boot的健康检查HealthIndicators实战” 的完整攻略: 1. 什么是 HealthIndicators HealthIndicators 是 Spring Boot 中提供的健康检查指示器,可以通过实现 HealthIndicator 接口并返回一个 Health 对象来表示应用程序的健康状态。Healt…

    Java 2023年5月20日
    00
  • Java实现用户不可重复登录功能

    下面就是Java实现用户不可重复登录功能的完整攻略。 思路概述 为实现用户不可重复登录功能,我们可以用一个集合来保存已经登录的用户的信息,当一个用户登录成功后,将他的身份信息存入集合。之后的登录请求中,若用户已经登录,则直接拒绝登录;否则,将他的身份信息存入集合。 实现过程 1. 定义一个静态集合用于保存已经登录的用户信息 为了方便操作,这里我们使用Hash…

    Java 2023年6月15日
    00
  • 深入解析Java中的JDBC事务

    深入解析Java中的JDBC事务 什么是JDBC事务 JDBC事务是指,在Java程序中通过JDBC访问数据库时,由一组操作组成的逻辑单元。这些操作被当做一个整体,要么全部执行成功,要么全部回滚(撤销)。JDBC事务是为了保证操作的原子性、一致性、隔离性和持久性而存在的。 原子性 JDBC事务的原子性指,一个事务中所有的SQL语句要么全部执行成功,要么全部失…

    Java 2023年5月20日
    00
  • asp.net清空Cookie的两种方法

    下面是详细讲解“asp.net清空Cookie的两种方法”的完整攻略。 asp.net清空Cookie的两种方法 在asp.net开发中,我们常常需要清空Cookie。下面介绍两种常用的清空Cookie的方法。 方法一:设置过期时间为当前时间 可以将Cookie的过期时间设置为当前时间来删除Cookie。 HttpCookie cookie = Reques…

    Java 2023年6月16日
    00
  • 使用Jackson 处理 null 或者 空字符串

    在Java开发中,我们经常需要使用JSON格式的数据来进行数据交互。而使用Jackson库可以方便地把JSON字符串和Java对象互相转换。但是当JSON中的某个字段对应的值为null或空字符串时,如果不进行特殊处理,转换时会抛出异常。接下来就让我们来详细讲解如何使用Jackson处理null或空字符串的情况。 方案一:使用注解 我们可以通过使用Jackso…

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