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;
}
相关推荐
执键行天涯1 小时前
【经验帖】JAVA中同方法,两次调用Mybatis,一次更新,一次查询,同一事务,第一次修改对第二次的可见性如何
java·数据库·mybatis
Adolf_19931 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
叫我:松哥1 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
海里真的有鱼1 小时前
Spring Boot 项目中整合 RabbitMQ,使用死信队列(Dead Letter Exchange, DLX)实现延迟队列功能
开发语言·后端·rabbitmq
工业甲酰苯胺2 小时前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
新知图书2 小时前
Rust编程的作用域与所有权
开发语言·后端·rust
wn5313 小时前
【Go - 类型断言】
服务器·开发语言·后端·golang
bjzhang753 小时前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang3 小时前
Spring Boot 入门面试五道题
spring boot
小菜yh3 小时前
关于Redis
java·数据库·spring boot·redis·spring·缓存