SpringBoot项目中使用Mybatis框架具体流程步骤
目录
一、新建项目时如何创建实体类
实体类是POJO(Plain Ordinary Java Object,简单的Java对象)的其中一种.
如果某个类的作用就是声明若干个属性,并且添加Setter 和 Getter方法等,并不编写其它的功能性代码,这样的类都称之POJO类,用于表示项目中需要处理的数据。
Mysql中的表字段 | java中的类属性 |
tinyint / smallint / int | Integer |
bigint | Long |
char / varchar / text | String |
datetime | LocalDataTime |
decimal | BigDecimal |
使用Lombok框架
作用:可以实现在编译期自动生成一些代码包括:
规范的Setter & Getter
规范的hashCode 与 equals()
重写toString()
import lombok.Data;
import java.io.Serializable;
@Data
public class Person implements Serializable {
/*用户名*/
private String username;
/*用户密码*/
private String password;
/*手机号*/
private Integer tel;
/* MONEY*/
private Long money;
}
依赖项
<!-- Lombok的依赖项,主要用于简化POJO类的编写 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
注意,使用lombok前记得下载相关插件,因为实体类中没有具体的get/set方法,使用时会报错 ! ! !
二、使用Mybatis
1.简介
解决数据库编程相关问题的框架,主要是简化了数据库编程
依赖1: 基础依赖项的artifactId 是 : mybatis.
依赖2: Mybatis框架虽然可以不依赖于Spring等其它框架,但是,直接使用比较麻烦,需要自行编写大量的配置,所以,通常结合Spring一起使用,需要添加的依赖项的artifactId
是:mybatis-spring
。
依赖3: 在Spring Boot项目中,直接添加mybatis-spring-boot-starter
将包含以上依赖项,和其它必要的、常用的依赖项
<!-- Mybatis整合Spring Boot的依赖项 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- MySQL的依赖项 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
mybatis功能: 只需要定义访问数据的抽象方法,并配置次抽象方法映射的sql语句
2.Mybatis中的抽象方法
使用Mybatis框架时,访问数据的抽象方法必须定义在接口中!因为Mybatis框架是通过“接口代理”的设计模式,生成了接口的实现对象!
public interface PersonMapper{ }
抽象方法:
返回值类型: 如果要执行的SQL操作是增、删、改类型的,使用int
作为返回值类型,表示“受影响的行数”,不建议使用void.
如果要执行的SQL操作是查询类型的,只需要保证返回值类型可以封装必要的结果即可.
方法名称:自定义的,但推荐遵循规范,不要使用重载
参数列表:取决于需要执行的SQL语句需要哪些参数,在抽象方法中,可以将这些参数一一列举出来,也可以将这些参数封装到自定义类中,使用自定义类作为抽象方法的参数
抛出异常:无
抽象类中使用Mybatis框架明确明确这个接口是数据访问接口(示例):
方法一: 在每一个接口上添加 @Mapper 注解
方法二: 在根包下创建配置类上添加@MapperScan
注解,并配置数据访问接口所在的包在根包(含子孙包)下的任何添加了@Configuration
注解的类都是配置类只需要一次配置,各数据访问接口不必添加@Mapper
注解
@Configuration
@MapperScan("cn.com.example.product.mapper")
public class MyBatisConfiguration {
public MyBatisConfiguration(){
System.out.println("创建配置类:MyBatisConfiguration");
}
}
3.sql语句的执行
方法一:
在Spring Boot中,整合了Mybatis框架后,可以在数据访问接口的抽象方法上使用@Insert
等注解来配置SQL语句(不推荐)
@Select("select username from person where id=#{id}")
Person selectById(int id)
不推荐原因: sql太长不易阅读 , 不便于实现特殊的配置 , 部分配置复用性低 , 不便于和DBA协作
方法二:
使用XML文件单独配置sql语句
推荐原因: 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="cn.com.example.product.mapper.AlbumMapper">
<!--int select()-->
<select id="select" resultType="int">
SELECT count(*) FROM person
</select>
</mapper>
在项目的配置类中声明 application.properties
# 配置Mybatis的XML文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
配置要求:
1. 根标签<mapper>
2. 在<mapper>
标签上必须配置namespace
属性,此属性的值是接口的全限定名(包名加类名)
3. 在<mapper>
标签内部,使用<insert>
/ <delete>
/ <update>
/ <select>
标签来配置增 / 删 / 改 / 查的SQL语句
4. 各配置SQL语句的标签必须配置id
属性,取值为抽象方法的名称
5. 在配置<select>
标签时,必须配置resultType
或resultMap
这2个属性中的其中1个,
用来判断返回的结果
4.测试
在Spring Boot项目中,当需要编写测试时,可以在src/test/java
下的根包下创建测试类,并在类中编写测试方法
@SpringBootTest
public class Tests {
@Autowired
PersonMapper mapper;
@Test
void testInsert() {
Person p = new Person();
p.setName("张三");
p.setAge("18");
int rows = mapper.insert(album);
System.out.println("插入数据完成,受影响的行数=" + rows);
}
}
5.可能存在的异常
如果此前没有正确的配置@MapperScan
,在执行测试时,将出现以下错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'cn.tedu.csmall.product.mapper.AlbumMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
如果出现以下原因的操作错误:
1. 在XML文件中,根标签
<mapper>
的namespace
属性值配置有误2. 在XML文件中,配置SQL语句的
<insert>
或类似标签的id
属性值配置有误3. 在
application.properties
配置文件中,没有正确的配置XML文件的位置
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
总结
以上就是SpringBoot项目中如何使用Mybatis框架的具体步骤以及配置和出现的异常.