MyBatis

MyBatis

Mybatis是基于JDBC操作数据库的半ORM持久层框架,是apache的开源项目。主要提供了简便的在程序中操作数据库的功能。

ORM(Object Relational Mapping):对象关系映射,数据库表对象和Java对象之间的映射关系,将数据库的操作转化为对Java对象操作。

半ORM:操作数据库时,需要手动编写SQL来完成,无法像全ORM框架(如Hibernate)那样直接根据对象关系模型获取。因此,MyBatis被称为半自动ORM映射工具。

1.回顾JDBC操作数据库的过程

  1. 创建数据库的连接池DataSource(建立和管理数据库连接)
  2. 通过DataSource获取数据库连接对象Connection
  3. 编写SQL语句(包含占位符)。
  4. 通过Connection和SQL语句创建操作命令对象Statement
  5. 对占位符内容进行替换和填充。
  6. 使用Statement对象执行SQL语句。
  7. 接收数据库返回结果。
  8. 对数据进行业务处理
  9. 释放资源。

以上操作流程繁琐,每操作一次都需要获取数据库连接对象、释放资源等操作,因此为了简便流程,就有大佬开发了MyBaits框架。

2.MyBatis的组成部分

Data Access Objects(DAO):提供了一种使用接口操作数据的方式。

SQL Maps:使用XML文件配置(和Data Access Objects对应 )来实现Java对象和SQL语句的映射,将代码和SQL语句分离,使得代码更加清晰简洁,力与维护。

底层原理: MyBatis 会为接口创建一个代理对象,当调用接口中的方法时,MyBatis 就会根据方法名找到对应的 SQL 语句并执行。最后将结果映射到Java对象上。(底层原理还须深究)

3.如何使用MyBatis操作数据库

1.创建SpringBoot项目并引入依赖

<dependency>
    <groupId>com.mysqlgroupId>
    <artifactId>mysql-connector-jartifactId>
    <scope>runtimescope>
dependency>
<dependency>
    <groupId>org.mybatis.spring.bootgroupId>
    <artifactId>mybatis-spring-boot-starter-testartifactId>
    <version>2.3.1version>
    <scope>testscope>
dependency>

2.配置数据库连接

#配置数据库连接信息
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/blog_system?characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
#配置加载的映射文件路径
mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml
  #配置打印SQL语句日志
  configuration:
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.定义数据库表映射Java对象的类

@Data
public class User {
    private Integer id;
    private String username;
    private String nickname;
    private String password;
    private Date createtime;
    private Date updatetime;
    private Integer state;
}

4.定义操作数据库的接口

@Mapper
public interface UserMapper {
    User getUserById(@Param("id") Integer uid);
}

@Mapper:指示MyBatis框架为该接口创建代理对象,从而将该接口的方法映射到数据库操作。

@Param:表示将传入的参数uid,插入到查询语句中#{id}占位符中。

5.编写xml接口映射文件


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="com.example.demo.mapper.UserMapper">
    
    <select id="getUserById" resultType="com.example.demo.model.User">
        select * from user where id = #{id}
    select>
mapper>

6.调用接口实现对数据库的操作

 void getUserById() {
        User user = userMapper.getUserById(1);
        System.out.println(user);
}

4.xml中不同操作语句的属性介绍

4.1select