Java:MyBatis讲解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MyBatis是一个开源的Java持久化框架,它提供了一个简化数据库访问的方法。MyBatis的主要目标是减少编写SQL代码的工作量,并提供了将数据库操作与Java对象的映射功能。

1、MyBatis简介

什么是MyBatis

  • MyBatis是一款优秀的持久层框架,用于简化JDBC开发
  • MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名成MyBatis。2013年11月迁移到Github

持久层

  • 负责将数据保存到数据库的那一层代码
  • javaEE三层架构:表现层、业务层、持久层

框架

  • 框架就是一个半成品软件,是一套可重用的,通用的,软件基础代码
  • 在框架的基础上构建软件编写更加高效、规范、通用、可扩展

2、MyBatis快速入门

搭建步骤

  1. 新建模块
  2. 导入jar包
  3. 编写User类
  4. 编写配置文件mybatis-config.xml
  5. 修改连接池信息
  6. 编写接口
  7. 编写映射文件
  8. 编写测试类

案例演示

  • 准备MySQL数据
CREATE DATABASE day18;
USE day18;
CREATE TABLE USER (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(20) NOT NULL,
  birthday DATE,
  sex CHAR(1) DEFAULT '男',
  address VARCHAR(50)
);

INSERT INTO USER VALUES (NULL, '孙悟空','1980-10-24','男','花果山水帘洞');
INSERT INTO USER VALUES (NULL, '白骨精','1992-11-12','女','白虎岭白骨洞');
INSERT INTO USER VALUES (NULL, '猪八戒','1983-05-20','男','福临山云栈洞');
INSERT INTO USER VALUES (NULL, '蜘蛛精','1995-03-22','女','盤丝洞');
  1. 新建项目

  2. 导入jar包

    通过pom.xml导入

        <dependencies>
            <!--单元测试-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <!--MySQL驱动-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
            </dependency>
    
            <!--MyBatis核心包-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.5</version>
            </dependency>
        </dependencies>
    
  3. 编写实体类

    这里记得要和数据库一致

    /**
     * 封装User表的实体类
     */
    public class User {
         
        private Integer id;
        private String username;
        private Date birthday;
        private String sex;
        private String address;
    }
    
  4. 复制mybatis-config.xml到resources

  5. 修改连接池信息

    <?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>
        <settings>
            <!--在控制台显示SQL语句-->
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <!--配置连接池需要的参数-->
                    <property name="driver" value="驱动类全名"/>
                    <property name="url" value="数据库url"/>
                    <property name="username" value="数据库账号"/>
                    <property name="password" value="数据库密码"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="接口映射文件位置"/>
        </mappers>
    </configuration>
    
  6. 编写接口

    编写接口的好处是统一管理数据库的方法

    /**
     * xxxMapper就说对应xxx表的数据操作
     */
    public interface UserMapper {
         
    
        // 1、查询User表的所有数据
        List<User> selectAll();
    
    }
    
  7. 编写映射文件

    <?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="包名.接口名">
        <select id="方法名" resultType="方法返回值类型">
            SQL语句
        </select>
    </mapper>
    
  8. 编写测试类

    public class UserTest {
         
    
        @Test
        public void test01() throws IOException {
         
            //测试框架搭建情况
            //1、标记mybatis的配置环境
            String resource = "mybatis-config.xml";
            //2、加载配置环境的信息
            InputStream inputStream = Resources.getResourceAsStream(resource);
            //3、根据配置信息,生成SqlSessionFactory对象,相当于连接池
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //4、从连接池获取连接
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //5、获取执行sql语句的对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            //6、调用方法执行sql语句
            List<User> users = mapper.selectAll();
    
            sqlSession.close();
    
            for (User user : users) {
         
                System.out.println(user);
            }
        }
    }
    

3、MyBatis核心配置文件

MyBatis核心配置文件的顶层结构如下

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseldProvider(数据库厂商标识)
    • mappers(映射器)

typeAliases别名

  • typeAliases作用:给自定义的实体类取别名,让类使用更简单

    1. 在mybatis-config.xml里面配置,在settings后面
    2. 注意mybatis-config.xml中标签有规范的排位顺序,如果顺序有误configuration标签会报错
  • 方式一:

    这种方法是给单个类配置别名,但是有缺点就是如果多个类配置需要写很多个

    ```xml



- 方式二:

  通过扫包的方式进行配置,这样的好处就是此目录下的类都可以用

  ```xml
      <typeAliases>
          <package name="org.example.pojo"/>
      </typeAliases>

mapper扫包配置

既然类名可以进行扫包,那我们的mapper文件也可以

如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载

  1. 在mybatis-config.xml里面配置
    <mappers>
        <package name="org.example.mapper"/>
    </mappers>

image-20231106183801618

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
19天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
56 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
5天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
16 6
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
SQL Java 数据库连接
JavaWeb基础3——Maven基础&MyBatis
构建工具Maven、Maven安装配置、基本使用、IDEA使用Maven、依赖管理、插件、Mybatis、核心配置文件mybatis-config.xml、Mapper代理开发、配置文件实现增删改查、Mybatis参数传递、注解实现增删改查
JavaWeb基础3——Maven基础&MyBatis
|
3月前
|
前端开发 Java 数据库连接
一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)
这篇文章总结了Java面试中的十个问题,包括Spring事务传播机制、Spring事务失效条件、Bean自动装配方式、Spring、Spring MVC和Spring Boot的区别、Spring MVC的工作流程和主要组件、Spring Boot的自动配置原理和Starter概念、嵌入式服务器的使用原因,以及MyBatis的优缺点。
|
3月前
|
XML Java 数据库连接
Mybatis java.lang.NumberFormatException: For input string: "1,2" 问题处理
【8月更文挑战第9天】Mybatis java.lang.NumberFormatException: For input string: "1,2" 问题处理
|
3月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
31 0
|
4月前
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
4月前
|
SQL Java 数据库连接
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
Java面试题:简述ORM框架(如Hibernate、MyBatis)的工作原理及其优缺点。
68 0