• Java持久层框架:MyBatis介绍


    在这里插入图片描述

    概述

    MyBatis,是支持定制化 SQL 、存储过程和高级映射的优秀持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object ,普通的 Java 对象)映射成数据库中的记录。

    MyBatis 特点

    • 简单易学:没有任何第三方依赖。易于学习和使用
    • 灵活:MyBatis 不会对应用程序或数据库的现有设计强加任何影响。 SQL 写在 xml 里,便于统一管理和优化
    • 解除 SQL 与程序代码的耦合:通过提供 DAO 层,将业务逻辑和数据访问逻辑分离,使系统设计更清晰,也更易维护和单元测试。同时提高了可维护性
    • 提供映射标签,支持对象与数据库的 ORM 字段关系映射
    • 提供对象关系映射标签,支持对象关系组建维护
    • 提供 xml 标签,支持编写动态 SQL

    MyBatis 功能架构

    • API 接口层:提供给外部使用的接口 API ,开发者通过这些本地 API 来操作数据库。接口层接收到调用请求便会调用数据处理层来完成具体的数据处理
    • 数据处理层:负责具体的 SQL 查找、SQL 解析、SQL 执行和执行结果映射处理等。主要目的是根据调用的请求完成一次数据库操作
    • 基础支撑层:负责最基础的功能支撑(连接管理、事务管理、配置加载和缓存处理),这些都是共用的,将其抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑

    简单示例:
    首先,创建一个 Maven 的 Java 项目
    在这里插入图片描述

    接着,在 pom.xml 配置文件中添加以下配置

    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
      <modelVersion>4.0.0modelVersion>
      <groupId>MyBatisDemogroupId>
      <artifactId>MyBatisDemoartifactId>
      <packaging>jarpackaging>
      <version>1.0-SNAPSHOTversion>
      <name>MyBatisDemoname>
      <url>http://maven.apache.orgurl>
    
      <dependencies>
        <dependency>
          <groupId>junitgroupId>
          <artifactId>junitartifactId>
          <version>4.12version>
          <scope>compilescope>
        dependency>
    
        
        <dependency>
          <groupId>org.mybatisgroupId>
          <artifactId>mybatisartifactId>
          <version>3.5.6version>
        dependency>
    
        
        <dependency>
          <groupId>mysqlgroupId>
          <artifactId>mysql-connector-javaartifactId>
          <version>8.0.25version>
        dependency>
      dependencies>
    
      
      
      
      <build>
        <resources>
          <resource>
            
            <directory>src/main/javadirectory>
            <includes>
              
              
              <include>**/*.propertiesinclude>
              <include>**/*.xmlinclude>
            includes>
            
            <filtering>falsefiltering>
          resource>
          <resource>
            <directory>src/main/resourcesdirectory>
          resource>
        resources>
      build>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    然后,创建一个数据表 user
    在这里插入图片描述
    在这里插入图片描述

    并在 model 目录下创建与数据表 user 一一映射的实体类 User

    package cn.edu.MyBatisDemo.model;
    
    import java.util.Date;
    
    public class User {
        private int id;
        private String name;
        private String password;
        private Date date; //注册日期
        private int state; //用户状态
    
        public User() {
            super();
        }
    
        public User(int id, String name, String password, Date date, int state) {
            this.id = id;
            this.name = name;
            this.password = password;
            this.date = date;
            this.state = state;
        }
    
        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 String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Date getDate() {
            return date;
        }
    
        public void setDate(Date date) {
            this.date = date;
        }
    
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", password='" + password + '\'' +
                    ", date=" + date +
                    ", state=" + state +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    再在 mapper 目录下创建一个接口 UserMapper ,声明获取指定用户信息的方法

    package cn.edu.MyBatisDemo.mapper;
    
    import cn.edu.MyBatisDemo.model.User;
    
    //不需要写实现类,配置 UserMapper.xml 配置文件即可
    public interface UserMapper {
        public User selectUserById(int id); // 获取指定用户的信息
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在此不需要写实现类,在 model 目录下创建 UserMapper.xml 配置文件配置即可

    
    DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    
    <mapper namespace="cn.edu.MyBatisDemo.mapper.UserMapper">
        
        <select id="selectUserById" resultType="cn.edu.MyBatisDemo.model.User">
            SELECT `id`,`name`,`password`,`date`,`state` FROM `user` WHERE id=#{id}
        select>
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    随之,在 resources 目录下创建 mybatis.xml 配置文件

    
    DOCTYPE configuration PUBLIC
            "-//mybatis.org//DTD Config 3.0//EN"
            "https://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.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"/>
                    <property name="username" value="root"/>
                    <property name="password" value="0123"/>
                dataSource>
            environment>
        environments>
    
        
        <mappers>
            <mapper resource="cn/edu/MyBatisDemo/model/UserMapper.xml" />
        mappers>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    最后,在 test 目录下创建测试类 MyBatisTest ,测试结果

    package cn.edu.MyBatisDemo.test;
    
    import cn.edu.MyBatisDemo.mapper.UserMapper;
    import cn.edu.MyBatisDemo.model.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class MyBatisTest {
        @Test
        public void test() throws IOException {
            //1.根据配置文件创建数据库连接会话的工厂类
            InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
            //获取工厂类
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
            //2.通过工厂类获取数据库连接的会话
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            //3.通过 sqlSession 操作数据库
            try {
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                User user = userMapper.selectUserById(20230815);
                System.out.println(user);
            } finally {
                sqlSession.close();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    结果如图:
    在这里插入图片描述

  • 相关阅读:
    ​ Verilog UDP 基础知识分类
    【文本挖掘】关键词提取
    【软件测试】—软件测试的基本流程、 网络协议应该怎么测(一)
    实战4 - 汽车行驶工况构建
    3-docker安装centos7
    深入浅出 MyBatis 的一级、二级缓存机制
    mybatis config 配置
    Linux小总结
    Python多线程爬虫实验
    使用MobaXterm连接服务器并利用Anaconda进行pytoch环境跑深度学习模型LeNet-5分类
  • 原文地址:https://blog.csdn.net/qq_56886142/article/details/132283754