MyBatis入门(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MyBatis入门(1)

一、JDBC操作回顾


       新增数据操作代码如下:

public static void main(String[] args) throws SQLException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入id");
        int id = sc.nextInt();
        System.out.println("请输入name");
        String name = sc.next();
 
        //1、建立数据源
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");
        //2、和数据库服务器建立连接
        Connection connection = dataSource.getConnection();
        //3、构造sql
        String sql = "insert into student values(?,?)";//?作为占位符
        //预处理
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1, id);
        statement.setString(2, name);
        //4、把构造好的sql发送的数据库服务器里执行
        int n = statement.executeUpdate();
        System.out.println(n);
        //5、回收必要的资源
        statement.close();
        connection.close();
    }

       之前博客的详细介绍:Java的JDBC编程-CSDN博客

       从上述代码和操作流程可以看出来,对于JDBC来说,整个操作都非常繁琐,我们不但要拼接每一个参数,而且还有按照模板代码的方式,一步步的操作数据库,并且每次操作完,还要手动关闭连接等所有的这些操作步骤,都需要再每个方法中重复书写,那有没有一种方法,可以更简单、更方便操作数据库呢?肯定有,这也是我们要学习MyBatis的真正原因,它可以帮助我们更方便、更快速的操作数据库


二、什么是MyBatis?


1MyBatis是一块优秀的 持久层 框架,用于简化JDBC的开发

2MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由Apache迁移到了google code,并且改名为MyBaits。2013年11月迁移到Github

3官网MyBatis中文网

4持久层:指的就是持久化操作的层,通常指数据访问层(dao),是用来操作数据库的

      简单来说,MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库工具


三、MyBatis入门


       MyBatis操作数据库的步骤:

1准备工作(创建Spring Boot工程、数据库表准备、实体类)

2引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)

3编写SQL语句(注解 / XML)

4测试

1、准备工作

(1)创建工程

       创建Spring Boot 工程,并且导入MyBatis的起步依赖、MySQL驱动包

       MyBatis是一个持久层框架,具体的数据存储和数据操作还是在MySQL中操作的,所以需要添加MySQL驱动

       项目工程创建完成后,会自动在pom.xml文件中导入MyBatis依赖和MySQL驱动依赖,如图:

       代码:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>3.0.3</version>
    </dependency>

       它们的版本会随着SpringBoot版本发生变化,SpringBoot 3.X 对应 MyBatis版本为 3.X,对应关系参考:mybatis-spring-boot-autoconfigure – Introduction ,如图:

(2)数据准备

       创建用户表,代码如下:

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
 
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
 
-- 使用数据数据
USE mybatis_test;
 
-- 创建表[用户表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
        `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
        `username` VARCHAR ( 127 ) NOT NULL,
        `password` VARCHAR ( 127 ) NOT NULL,
        `age` TINYINT ( 4 ) NOT NULL,
        `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-女 0-默认',
        `phone` VARCHAR ( 15 ) DEFAULT NULL,
        `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
        `create_time` DATETIME DEFAULT now(),
        `update_time` DATETIME DEFAULT now(),
        PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 
 
-- 添加用户信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

       创建对应的实体类,代码如下:

@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

2、配置数据库连接字符串

       MyBatis中要连接数据库,需要数据库相关的参数配置:MySQL驱动类、登录名、密码、数据库连接字符串

       application.yml文件,配置内容如下:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

注意事项如果MySQL是 5.X 之前的使用的是 “com.mysql.jdbc.Driver”,如果是大于5.X使用的是“com.mysql.cj.jdbc.Driver”

       application.properties文件,配置内容如下:

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mybatis_test?
characterEncoding=utf8&useSSL=false
#连接数据库的⽤⼾名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

3、写持久层代码

       在项目中,创建持久层接口UserInfoMapper,如图:

       

       代码如下:

import com.example.mybatisdemo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
 
import java.util.List;
 
@Mapper
public interface UserInfoMapper {
    @Select("select * from userinfo")
    List<UserInfo> getUserInfoAll();
}

       MyBatis的持久层接口规范一般都叫XxxMapper@Mapper注解表示是MyBatis中的Mapper接口

       程序运行时,MyBatis框架会自动生成接口的实现类对象(代理对象),并交给Spring的IOC容器管理

       @Select注解代表的就是select查询,也就是注解对应方法的具体实现内容

4、单元测试

       在Spring Boot工程下中,src下的test目录中,已经自动帮我们创建好了测试类,我们可以直接使用这个测试类来进行测试,代码如下:

import com.example.mybatisdemo.mapper.UserInfoMapper;
import com.example.mybatisdemo.model.UserInfo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.util.List;
 
@SpringBootTest
class MybatisDemoApplicationTests {
  @Autowired
  private UserInfoMapper userInfoMapper;
 
  @Test
  void contextLoads() {
    List<UserInfo> userInfos = userInfoMapper.getUserInfoAll();
    System.out.println(userInfos);
  }
 
}

       测试类添加了注解@SpringBootTest,该测试类在运行时,就会自动加载Spring的运行环境。我们通过@Autowired这个注解,注入我们要测试的类,就可以开始进行测试了

       运行结果如下:

       返回对应的结果,可以看到,只有SQL语句中查询的列中,只有和对应的列名一样,才会有显示(如果和数据库列名一样,就会有显示对应的信息)。如图:

(1)使用IDEA自动成成测试类

       在你要测试的类中,鼠标右键 -> Generate -> Test -> 勾上对应要测试的方法,这里使用UserInfoMapper类做演示,如图:

       点击OK,会在test目录下生成对应的测试类,如图:

       测试类代码如下:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
@SpringBootTest
class UserInfoMapperTest {
    @Autowired
    private UserInfoMapper userInfoMapper;
    @Test
    void getUserInfoAll() {
        System.out.println(userInfoMapper.getUserInfoAll());
    }
}

       记得加@SpringBootTest注解

       运行结果如下:

(2)使用程序运行代码,编写controller类,service类

       controller类代码如下:

@RequestMapping("/user")
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("/getUserAll")
    public List<UserInfo> getUserAll() {
        return userService.getUserAll();
    }
}

       service类代码如下:

@Service
public class UserService {
    @Autowired
    private UserInfoMapper userInfoMapper;
    public List<UserInfo> getUserAll() {
        return userInfoMapper.getUserInfoAll();
    }
}

       浏览器访问:127.0.0.1:8080/user/getUserAll ,结果如下:


四、常见问题错误


1、SQL错误

       如图:下面from和userinfo连在一起,没有空格分开。

       双引号中多些一个空格都不行,不然就会报错,如图:

2、配置信息错误(检查账户密码)

3、未配置数据库

       把application.yml配置内容注释掉,如图:

       测试用例报错如下:创建dataSource失败了,解决方案是检查配置

       程序启动代码报错如下:

       如果配置内容格式不对,如图:

       依然会报错上面这种错误。

4、数据库不存在

       修改配置文件内容,其中这个数据库是不存在的,如图:

       运行测试类代码,报错如下:

5、表不存在

       修改代码如下:

       运行测试类,报错如下:

6、方法名重复

       UserInfoMapper类的方法名重复,修改代码如下:

       运行测试类,报错如下:

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
SQL Java 数据库连接
MyBatis 框架入门理论与实践
MyBatis 框架入门理论与实践
42 6
|
1月前
|
关系型数据库 Java 数据库连接
MyBatis-Plus简介和入门操作
【1月更文挑战第5天】 一、MyBatis-Plus简介 二、 MyBatis-Plus操作 1、准备数据库脚本 2、准备boot工程 3、导入依赖 4、配置文件和启动类 5、功能编码 6、测试和使用
112 1
|
1月前
|
SQL Java 数据库连接
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
104 0
JAVAEE框架技术之7-myBatis ORM框架入门基础CRUD
|
18天前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
24 5
|
1月前
|
Java 数据库连接 测试技术
MyBatis-Plus入门
MyBatis-Plus入门
|
18天前
|
SQL Java 数据库连接
MyBatis入门——MyBatis的基础操作(2)
MyBatis入门——MyBatis的基础操作(2)
13 4
|
17天前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
1天前
|
SQL Java 数据库连接
Mybatis Plus入门
Mybatis Plus入门
|
1月前
|
SQL 监控 数据库
MybatisPlus入门(下)
MybatisPlus入门教程中介绍了如何使用拦截器和性能分析插件。配置拦截器只需添加`PaginationInterceptor`,测试分页查询显示底层使用了`limit`。逻辑删除功能通过`TableLogic`注解和`LogicSqlInjector`实现,性能分析插件`PerformanceInterceptor`用于监控SQL执行时间,超过设定值会抛出异常。条件构造器如`QueryWrapper`提供便捷的查询条件设置,支持多种比较操作。
|
1月前
|
数据库