Mybatis入门及使用步骤

一、JDBC规范

1. JDBC介绍

JDBC ,是Java数据库连接技术,是Sun公司提供的API规范,用于执行SQL语句。是一切Java操作数据库的基础技术。

JDBC的作用:实现Java程序对不同数据库的统一访问。

数据库驱动:由数据库厂商提供的,实现JDBC接口规范的一些API实现类,这些类打成jar包,我们称为驱动包。

  • 操作什么数据库,就要提供什么驱动包
  • 如果要操作MySQL,就必须有MySQL驱动包

JDBC访问数据库步骤:

  1. 加载JDBC驱动程序
  2. 创建数据库的连接
  3. 创建preparedStatement
  4. 执行SQL语句
  5. 处理结果集
  6. 关闭JDBC对象资源

2. JDBC示例

准备数据库表

mysql 复制代码
create table user(
    id int unsigned primary key auto_increment comment 'ID',
    name varchar(100) comment '姓名',
    age tinyint unsigned comment '年龄',
    gender tinyint unsigned comment '性别, 1:男, 2:女',
    phone varchar(11) comment '手机号'
) comment '用户表';

insert into user(id, name, age, gender, phone) VALUES (null,'张三',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'李四',45,'2','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'王五',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'赵六',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'钱七',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'黑八',48,'1','18800000005');

准备实体类

java 复制代码
public class User {
    private Integer id;
    private String name;
    private Integer age;
    private Integer gender;
    private String phone;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }
}

JDBC

java 复制代码
public class DemoJdbc {
    public static void main(String[] args) throws Exception {
        //1. 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2. 获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
        //3. 创建SQL执行平台
        PreparedStatement pstmt = conn.prepareStatement("select * from user");
        //4. 执行SQL
        ResultSet resultSet = pstmt.executeQuery();
        //5. 处理结果
        List<User> userList = new ArrayList<>();
        while (resultSet.next()) {
            User user = new User();
            int id = resultSet.getInt("id");
            user.setId(id);
            String name = resultSet.getString("name");
            user.setName(name);
            int age = resultSet.getInt("age");
            user.setAge(age);
            int gender = resultSet.getInt("gender");
            user.setGender(gender);
            String phone = resultSet.getString("phone");
            user.setPhone(phone);
            userList.add(user);
        }
        //6. 释放资源
        resultSet.close();
        pstmt.close();
        conn.close();
        userList.forEach(System.out::println);
    }
}

3.JDBC的问题

  • 每次要加载驱动,连接信息是硬编码
  • sql和Java代码耦合在一起,改动不易
  • 参数设置缺少灵活性
  • 处理结果集麻烦,不能自动映射到实体类
  • 连接资源不能复用,资源浪费

二、MyBatis

1. Mybatis是什么?

Mybatis是持久层Dao层的框架,它用于简化JDBC的操作。

拓展:目前持久层的框架,常见的有:

  • Mybatis:目前国内最流行的Dao层框架
  • Hibernate:国内使用的少了,国外使用的很多。国内的一些老项目,可能使用的是Hibernate
  • SpringData JPA:对持久层的技术再封装,比如对Hibernate再封装,提供了更简便的操作

2. Mybatis使用步骤

  1. 准备数据库和表:前边JDBC里已经准备过了,略

  2. 准备一个maven工程,添加依赖、配置文件、引导类

    依赖:在pom.xml里需要 锁定SpringBoot版本号、添加需要的起步依赖坐标

    配置:在src\main\resources里创建application.properties配置文件,文件名称不要写错,添加参数:

    • spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver(配置数据库的驱动类名)
    • spring.datasource.url=jdbc:mysql://localhost:3306/db3(配置数据库地址)
    • spring.datasource.username=root(配置数据库的登录账号)
    • spring.datasource.password=root(配置数据库的登录密码)

    引导类:SpringBoot工程的引导类

  3. 准备实体类:一张表对应一个实体类, 表里一行记录封装成一个实体类的对象

    要求实体类的属性 和 表的字段一一对应。包括名称、类型都要匹配

  4. 使用Mybatis

    1. 创建一个XxxMapper接口。是属于dao层的,通常放到com.xxx.mapper包里

    2. 接口上要加注解 @Mapper

    3. 接口里定义方法:

      java 复制代码
      @Select("select * from user")
      List<User> queryAll();
  5. 功能测试:

  • 单元测试类上,需要加 @SpringBootTest。如果不加,@Autowired是不会生效的

  • 单元测试类的位置,也要放到 引导类所在包 下边。比如:

​ 引导类在src\main\java的 com.sdf里边

​ 测试类要放到 src\test\java的 com.sdf里边

3. Mybatis入门案例

3.1 准备工作

创建SpringBoot工程

如果要创建空的maven工程,改造成SpringBoot工程,只需要三件事:

  • 依赖:SpringBoot父工程坐标和起步依赖

    xml 复制代码
    <!-- SpringBoot父工程坐标 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.7.3</version>
        </parent>
    
        <dependencies>
            <!--mybatis的起步依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.2.2</version>
            </dependency>
            <!-- mysql驱动包, 刚刚发布的最新版本的驱动包-->
            <dependency>
                <groupId>com.mysql</groupId>
                <artifactId>mysql-connector-j</artifactId>
                <version>8.0.33</version>
            </dependency>
    
            <!--springboot单元测试-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
  • 配置:创建一个名称为application.properties的文件,放到src\main\resources目录里

  • 引导类:创建一个引导类,固定写法

java 复制代码
@SpringbootApplication
public class 引导类名{
    public static void main(String[] args){
        SpringApplication.run(引导类.class, args);
    }
}

准备配置文件

修改application.properties文件,添加如下配置:

properties 复制代码
#配置数据库的驱动类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#配置数据库地址
spring.datasource.url=jdbc:mysql://localhost:3306/db3
#配置数据库的登录账号
spring.datasource.username=root
#配置数据库的登录密码
spring.datasource.password=root

准备实体类

前边JDBC部分已经创建了User类,直接复制过来使用即可

3.1 创建Mapper

java 复制代码
/**
 * 1. Mapper接口,名称通常是XxxMapper,比如UserMapper、DeptMapper
 * 2. Mapper接口,上边加@Mapper注解,目的是让SpringBoot扫描这个注解,生成它的对象放到IoC容器里。类似于@Controller、@Service
 */
@Mapper
public interface UserMapper {
    /**
     * 查询所有用户,得到List<user>
     */
    @Select("select * from user")
    List<User> queryAll();
}

3.2 功能测试

注意:

  • 单元测试类上需要加@SpringBootTest,然后才可以在测试类里使用@Autowired注入
java 复制代码
@SpringBootTest
public class MybatisTest {
    @Autowired
    private UserMapper userMapper;
    @Test
    public void testQueryAll(){
        List<User> userList = userMapper.queryAll();
        userList.forEach(System.out::println);
    }
}

三、连接池

1. 什么是连接池

池化思想,用于提供有限数量的资源对象,重复利用,可以减少频繁创建对象与销毁对象的开销。

  • 创建池子:在池子里初始化一堆对象,备用

  • 使用的时候:如果需要使用,就从池子里取出一个进行使用;使用完成,再把对象交还到池子里

  • 例如:线程池,数据库连接池

数据库连接池:

  • 只需要池子里准备少量的Connection连接对象,就可以支持海量的数据库操作。因为这些对象是可以循环使用的
  • 避免频繁创建Connection与数据库建立连接所造成的资源开销,从而大大提升性能

2. 有哪些数据库连接池

  • DBCP:比较早的连接池,早期Tomcat内置的有这种连接池
  • C3P0:使用相对广泛的连接池
  • Druid:德鲁伊,Alibaba提供的连接池技术,它以丰富的功能著称,除了连接池的基本功能,还具备数据库的监控能力
  • HikariCP:以性能著称的连接池,SpringBoot官方内置了HikariCP连接池,默认使用的

所有连接都有相同的使用规范:

  • 所有连接池类都必须实现javax.sql.DataSource接口
  • 从任意连接池里获取连接的方法,都是getConnection()

3. 如何在项目里使用Druid连接池

  1. 添加druid的起步依赖

    xml 复制代码
    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.2.8</version>
    </dependency>
  2. 配置一下,指定使用Druid连接池:只要修改application.properties文件

    properties 复制代码
    #没有指定使用哪种连接池,默认使用的是HikariCP
    #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    #spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_homework
    #spring.datasource.username=root
    #spring.datasource.password=root
    #如果想指定使用Druid连接池
    方式1:
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    方式2:
    spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis_homework
    spring.datasource.druid.username=root
    spring.datasource.druid.password=root

四、Lombok

1. Lombok介绍

Lombok是一个插件,目前已经被idea内置进去了。

用于在代码编译过程中,帮我们生成一些代码。从而让我们的代码更简洁

2. Lombok用法 ★★★

  1. 添加lombok的依赖坐标

    xml 复制代码
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
  2. 使用Lombok简化代码:通过注解实现的

    • @Data:加在实体类上,Lombok会帮我们给实体类生成无参构造、所有成员变量的get和set方法、toString、equals、hashCode等等方法
    • @NoArgsConstructor:加在实体类上,Lombok会帮我们生成无参构造
    • @AllArgsConstructor:加在实体类上,Lombok会帮我们生成全参构造
    • @Getter:生成get方法的。可以加在类上,也可以加在某个成员变量上
    • @Setter:生成set方法的。可以加在类上,也可以加在某个成员变量上

3. 使用示例

java 复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
    private Integer id;
    private String username;
    private String password;
    private String name;
    private Integer gender;
    private String image;
    private Integer job;
}
相关推荐
wb043072019 小时前
使用 Java 开发 MCP 服务并发布到 Maven 中央仓库完整指南
java·开发语言·spring boot·ai·maven
nbwenren10 小时前
Springboot中SLF4J详解
java·spring boot·后端
helx8211 小时前
SpringBoot中自定义Starter
java·spring boot·后端
rleS IONS12 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
lifewange12 小时前
Go语言-开源编程语言
开发语言·后端·golang
白毛大侠12 小时前
深入理解 Go:用户态和内核态
开发语言·后端·golang
R***z10113 小时前
Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南
spring boot·postgresql·mybatis
王码码203513 小时前
Go语言中的数据库操作:从sqlx到ORM
后端·golang·go·接口
星辰_mya13 小时前
雪花算法和时区的关系
数据库·后端·面试·架构师
赵丙双14 小时前
spring boot AutoConfiguration.replacements 文件的作用
java·spring boot