基于MyBatis操作MySQL数据库的基本步骤


提要

项目工具:IDea
主要关于在Idea工具中使用MyBatis操作数据库的详细步骤
步骤的正确性待验证


一、创建项目及配置MyBatis

1. 选择依赖

创建SpringBoot项目时需要选择 MySQL Driver 和 MyBatis Framework两个依赖
在这里插入图片描述

2. 修改驱动版本

修改pom.xml中MySQL驱动版本,我使用的是5.1.49,增加如下代码

<version>5.1.49</version>

在这里插入图片描述

3. 建立映射文件位置

在resources目录下创建mappers文件夹
在这里插入图片描述

4. 配置项目参数

在 application.properties里配置如下数的参数


// 配置驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

// 设置数据库的用户名、密码、地址
spring.datasource.username=root
spring.datasource.password=
spring.datasource.url=jdbc:mysql://localhost:3306/upc_demo?characterEncoding=utf8

// 配置映射文件的路径
// 目的:程序会自动寻找mappers目录下所有的 .xml文件 
mybatis.mapper-locations=classpath:mappers/*.xml

二、基于MaBatis操作数据库

1. 手动类型

1.1 创建关联的实体类

  • 个人理解实体类与结构体类似
  • 一个实体类就是一个数据类型,我们可以创建自己的数据类型
  • 此处我们创建的实体类,本质是一种与数据库表格组成类似的数据类型,该实体类只是操作数据库时数据交流的容器,既可以用于传递参数,也可以保存操作结果
1.1.1 创建文件
  • 在XXXApplication文件的同级目录中创建package(命名便于识别即可)
  • 在该package下创建java class文件(命名与数据库要关联的表名匹配,我们匹配数据库中dept表,所以实体类命名为Dept)
    在这里插入图片描述
1.1.2 编写代码

根据数据库中表格的列组成,创建实体类里的属性,以及set( )、get( )方法

package com.upc.mybatis_01.entity;

public class Dept {
	// 创建对应属性
    private Integer deptno;
    private String dname;
    private String loc;

    // get、set方法-构建方法:
    // 右键空白处->Generate->Getter and Setter->选择所有属性构建即可
    
    public Integer getDeptno() { return deptno;}

    public void setDeptno(Integer deptno) { this.deptno = deptno; }

    public String getDname() { return dname; }

    public void setDname(String dname) { this.dname = dname; }

    public String getLoc() { return loc; }

    public void setLoc(String loc) { this.loc = loc; }
}

注意事项:

  • 创建的类名,必须与表名对应:表名dept,类名Dept
  • 类中的属性名(变量名)要与表中的列名一致:表格中一列名为deptno,则我们的属性名为 private Integer deptno
  • 实体类中的属性数据类型与列的数据类型匹配,即列的数据为字符串,属性数据类型也要为字符串。MySQL中数据的类型与java数据类型对应关系如下在这里插入图片描述

1.2 创建操作数据库的文件(编写SQL语句)

1.2.1 创建文件
  • 在XXXApplication文件的同级目录中创建mapper的package在这里插入图片描述

  • 在mapper包里创建java interface函数接口文件(命名与操作表格匹配,我们要操作的表为dept,所以为DeptMapper)在这里插入图片描述

1.2.2 编写代码
package com.upc.mybatis_01.mapper;
// 导入对应的实体类
import com.upc.mybatis_01.entity.Dept;
// 导入数据库操作的所有函数
import org.apache.ibatis.annotations.*;

// 引入导入查询结果的数据类型
import java.util.List;
import java.util.Map;


@Mapper
public interface DeptMapper {
    // 增加操作
    @Insert("insert into dept(deptno,dname,loc) values(#{deptno},#{dname},#{loc})")
    public int save(Dept dept);

    // 修改操作
    @Update("update dept set dname=#{dname},"+
            " loc=#{loc} where deptno=#{deptno}")
    public int update(Dept dept);

    // 删除操作
    @Delete("delete from dept where deptno=#{deptno}")
    public int delete(Integer deptno);

    // 查询表格中所有数据
    @Select("select deptno,dname,loc from dept")
    public List<Dept> findAll();

    // 分别统计每个部门下的总人数
    @Select("select \n" +
            "\td.deptno,d.dname,\n" +
            "\tcount(e.empno) c,\n" +
            "\tmax(e.sal) maxSal,\n" +
            "\tmin(e.sal) minSal,\n" +
            "\tsum(e.sal) sumSal,\n" +
            "\tavg(e.sal) avgSal\n" +
            "from emp e,dept d\n" +
            "where e.deptno=d.deptno\n" +
            "GROUP BY d.deptno,d.dname")
    public List<Map<String,Object>> findGroup();
}

注意有知识点:

  • @Mapper:是个声名,声名后spring就会自动管理我们这个接口,每当我们调用这个接口时,Spring会自动开启数据库,使用完会自动关闭数据库。
  • @Insert、@Update、@Delete、@Select 等等是一种标识,程序运行时可以明确各部分代码都对应什么类型的操作
  • 增删改查操作实质就是定义方法:输入数据:Dept实体类类型的数据;数据处理:将数据插入数据库的表格中;返回:一般插入、删除、修改的返回就是 1,所以返回是int类型
  • #{deptno}:即取实体类dept里deptno的数据
  • ’ + ’ 是将两个字符串连接在一起,即如果一个语句过长时,我们可以利用 + 把字符串拆分成多行,注意一旦使用 + ,后面的字符串要先空一位,因为一旦拼接,不留空格回连成整个字符串,会识别错误
  • 删除一般是根据主键为条件删除,使用主键以外的条件可能会不精准,我们的主键只是deptno,输入的数据就只有deptno即可
  • java util Map<Spring,Object>:是一个字典,当查询返回的结果是:最大值:100、最小值:0、总人数:160等等时,该字典是很好的容器
  • List《Dept》:就是Dept类的结构体数组,每个元素是Dept类的数据,所以List可以完整存储下dept表格中的所有数据(注意是尖括号)
  • List《Map》:就是Map类型数据的结构体数组,每个元素是一个字典(注意是尖括号)
  • 对于复杂的甚至是所有的sql语句都建议在客户端写完,再粘贴过来,避免出错(粘贴过来后\t与\n是不用管的)

2. 自动类型

2.1 创建关联实体类

2.1.1 配置工具
  • 点击Database
    在这里插入图片描述

  • 选择MySQL
    在这里插入图片描述

  • 选择驱动5.1
    在这里插入图片描述

  • 下载对应驱动(下载后不用再下载)
    在这里插入图片描述

  • 填写相关信息,Test后,Apply -> OK
    在这里插入图片描述

  • 在XXXApplication文件的同级目录中创建存放实体类的po包package
    在这里插入图片描述

  • 进入扩展功能
    在这里插入图片描述

  • 进入下图中文件
    在这里插入图片描述

  • 修改图中文件的内容(每次改变项目都要修改)
    在这里插入图片描述
    修改后如下
    在这里插入图片描述

  • 修改文件中的实体类包名为我们自己创建的po包
    在这里插入图片描述

2.1.2 生成实体类
  • 选择要生成关联实体类的表格在这里插入图片描述
  • 右键点击,并选择Genreate POJOs.groovy在这里插入图片描述
  • 选择实体类文件生成位置在这里插入图片描述

2.2 创建操作数据库的文件(编写SQL语句)

2.2.1 创建接口文件
  • 在po包的同级目录中创建mapper包
  • 在mapper包中创建java interface函数接口文件(命名与操作数据库的表名匹配,我们操作表为salgrade,命名为SalgradeMapper)
    在这里插入图片描述
2.2.2 编写函数接口

这里编写了一个查询数据的函数接口

package com.upc.mybatis_01.mapper;

        import com.upc.mybatis_01.po.Salgrade;
        import org.apache.ibatis.annotations.Mapper;

        import java.util.List;

@Mapper
public interface SalgradeMapper {
    //写一个查询所有的方法
    public List<Salgrade> findAll();
}

2.2.3 创建映射文件
  • 在resources的mappers目录下创建与接口文件同名的 .xml 文件
    在这里插入图片描述
2.2.4 编写映射文件

手动类型中,SQL语句直接在mapper的接口文件中编写了;自动类型是mapper文件只写函数接口,xml映射文件里写SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namesapce指向我们要处理的对应接口文件-->
<mapper namespace="com.upc.mybatis_01.mapper.SalgradeMapper">

	<!--根据SalgradeMappe接口文件里定义的函数接口,编写Sql语句-->
    <select id="findAll" resultType="com.upc.mybatis_01.po.SalgradeMapper">
        Select * from salgrade
    </select>
    
</mapper>

注意:

  • id 属性对应接口中方法的名称,我们在SalgradeMapper.java接口文件中定义的是findAll()那么id=“findAll”
  • parameterType:方法输入数据的类型(若没有参数不写parameterType)
  • resultType:表示返回值的类型,例如返回值List中放的是Emp类型,即List,则resultTYpe=“Emp”;但我们要指定哪个实体类,所以要这样写:com.upc.mybatis_01.mapper.SalgradeMapper
  • 同理建议在数据库可检测语法的地方写,例如console文件里写,或者在navicate里写

3. 测试

目的:测试编写的整个流程的正确性

  1. 选中接口文件中的接口类
    在这里插入图片描述
  2. 选择黄色灯泡,选择Creat Test
    在这里插入图片描述
  3. 选中要测试的函数接口,点击OK在这里插入图片描述
  4. 编写测试文件
package com.upc.mybatis_01.mapper;

import com.upc.mybatis_01.po.Salgrade;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest
class SalgradeMapperTest {

    @Resource
    private SalgradeMapper salgradeMapper;
    @Test
    void findAll() {
    }
}

注意:

  • @SpringBootTest:必须添加,这样Spring框架才会代理测试
  • @Resource:必须添加,明确测试的内容
  1. 选中所有代码测试即可
    在这里插入图片描述
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连接数据库是Spring Boot和MyBatis项目中的重要部分,以下是连接数据库步骤: 1. 添加依赖:首先,在`pom.xml`文件中添加连接数据库的依赖,比如MySQL,可以使用Spring Boot提供的`spring-boot-starter-jdbc`和`mysql-connector-java`依赖。 2. 配置数据源:在`application.yml`中配置数据源相关信息,包括数据库的URL、用户名、密码等。 3. 配置MyBatis:添加MyBatis的依赖,比如`mybatis-spring-boot-starter`,在`application.yml`中配置MyBatis相关信息,比如Mapper的扫描路径、MyBatis配置文件的路径等。 4. 编写Mapper:编写Mapper接口和对应的XML文件,用于定义SQL语句和映射关系。 5. 注入Mapper:在Service中注入Mapper,并在方法中调用Mapper的方法。 下面是一个简单的示例: 在`pom.xml`文件中添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> ``` 在`application.yml`文件中配置数据源和MyBatis: ```yml spring: datasource: url: jdbc:mysql://localhost:3306/test?useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver mybatis: mapper-locations: classpath:mapper/*.xml ``` 编写Mapper接口和对应的XML文件: UserMapper.java ```java @Mapper public interface UserMapper { List<User> findAll(); } ``` UserMapper.xml ```xml <?xml version="1.0" encoding="UTF-8"?> <!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="findAll" resultType="com.example.demo.entity.User"> SELECT id,name,age FROM user </select> </mapper> ``` 在Service中注入Mapper,并调用Mapper的方法: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findAll() { return userMapper.findAll(); } } ``` 这样就可以连接数据库并使用MyBatis进行数据操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值