目录

  • 提要
  • 一、创建项目及配置MyBatis
  • 1. 选择依赖
  • 2. 修改驱动版本
  • 3. 建立映射文件位置
  • 4. 配置项目参数
  • 二、基于MaBatis操作数据库
  • 1. 手动类型
  • 1.1 创建关联的实体类
  • 1.1.1 创建文件
  • 1.1.2 编写代码
  • 1.2 创建操作数据库的文件(编写SQL语句)
  • 1.2.1 创建文件
  • 1.2.2 编写代码
  • 2. 自动类型
  • 2.1 创建关联实体类
  • 2.1.1 配置工具
  • 2.1.2 生成实体类
  • 2.2 创建操作数据库的文件(编写SQL语句)
  • 2.2.1 创建接口文件
  • 2.2.2 编写函数接口
  • 2.2.3 创建映射文件
  • 2.2.4 编写映射文件
  • 3. 测试



提要

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


一、创建项目及配置MyBatis

1. 选择依赖

创建SpringBoot项目时需要选择 MySQL Driver 和 MyBatis Framework两个依赖

mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_实体类

2. 修改驱动版本

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

<version>5.1.49</version>

mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_02

3. 建立映射文件位置

在resources目录下创建mappers文件夹

mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_java_03

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
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_04

  • 在mapper包里创建java interface函数接口文件(命名与操作表格匹配,我们要操作的表为dept,所以为DeptMapper)
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_05

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
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_06

  • 选择MySQL
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_java_07

  • 选择驱动5.1
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mybatis_08

  • 下载对应驱动(下载后不用再下载)
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_09

  • 填写相关信息,Test后,Apply -> OK
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_java_10

  • 在XXXApplication文件的同级目录中创建存放实体类的po包package
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_实体类_11

  • 进入扩展功能
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_mysql_12

  • 进入下图中文件
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_实体类_13

  • 修改图中文件的内容(每次改变项目都要修改)
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_java_14

  • 修改后如下
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_java_15

  • 修改文件中的实体类包名为我们自己创建的po包
  • mybatis 怎么直接调用MySQL语句 mybatis怎么操作数据库_数据库_16

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. 选中所有代码测试即可