Mybatis是目前主流的解决数据库编程相关问题的框架,主要是简化了数据库编程。
Mybatis框架的基础依赖项的artifactId
是:mybatis
。
Mybatis框架虽然可以不依赖于Spring等其它框架,但是,直接使用比较麻烦,需要自行编写大量的配置,所以,通常结合Spring一起使用,需要添加的依赖项的artifactId
是:mybatis-spring
。
在Spring Boot项目中,直接添加mybatis-spring-boot-starter
将包含以上依赖项,和其它必要的、常用的依赖项。
Mybatis框架简化数据库编程的表现为:你只需要定义访问数据的抽象方法,并配置此抽象方法映射的SQL语句即可!
使用Mybatis框架时,访问数据的抽象方法必须定义在接口中!因为Mybatis框架是通过“接口代理”的设计模式,生成了接口的实现对象!
关于Mybatis的抽象方法所在的接口,通常使用Mapper
作为名称的最后一个单词!
则可以在项目的根包下创建mapper.AlbumMapper
接口,例如:
public interface AlbumMapper {
}
关于抽象方法:
int
作为返回值类型,表示“受影响的行数”,不建议使用void
关于抽象方法命名参考(来自《阿里巴巴Java开发手册》):
另外,还需要使得Mybatis框架能明确这个接口是数据访问接口,可以采取的做法有:
@Mapper
注解
@MapperScan
注解,并配置数据访问接口所在的包
@Configuration
注解的类都是配置类@Mapper
注解则在根包下创建config.MybatisConfiguration
类,配置@MapperScan
:
package cn.tedu.csmall.product.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis的配置类
*
* @author [email protected]
* @version 0.0.1
*/
@Configuration
@MapperScan("cn.tedu.csmall.product.mapper")
public class MybatisConfiguration {
public MybatisConfiguration() {
System.out.println("创建配置类:MybatisConfiguration");
}
}
在Spring Boot中,整合了Mybatis框架后,可以在数据访问接口的抽象方法上使用@Insert
等注解来配置SQL语句,这种做法是不推荐的!
提示:在不是Spring Boot项目中,需要额外的配置,否则,将不识别抽象方法上的
@Insert
注解。
不推荐使用@Insert
等注解配置SQL语句的主要原因有:
建议使用XML文件来配置SQL语句,这类XML文件需要有固定的、特殊的声明部分,推荐通过复制粘贴得到此文件,或从 http://doc.canglaoshi.org/config/Mapper.xml.zip 下载得到。
在src/main/resources
下创建mapper
文件夹,并将以上压缩包中的SomeMapper.xml
复制到此mapper
文件夹中:
关于XML文件的配置:
标签上必须配置namespace
属性,此属性的值是接口的全限定名(包名与类名)
标签内部,使用
/
/
/
标签来配置增 / 删 / 改 / 查的SQL语句id
属性,取值为对应的抽象方法的名称例如:配置为:
INSERT INTO pms_album (
name, description, sort
) VALUES (
#{name}, #{description}, #{sort}
)
另外,还需要在application.properties
中配置XML文件所在的位置:
# 配置Mybatis的XML文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
至此,关于“插入相册数据”的功能已经开发完成!
在Spring Boot项目中,当需要编写测试时,可以在src/test/java
下的根包下创建测试类,并在类中编写测试方法。
则在测试的根包下创建mapper.AlbumMapperTests
测试类:
package cn.tedu.csmall.product.mapper;
import cn.tedu.csmall.product.pojo.entity.Album;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class AlbumMapperTests {
@Autowired
AlbumMapper mapper;
@Test
void testInsert() {
Album album = new Album();
album.setName("测试相册001");
album.setDescription("测试简介001");
album.setSort(99); // 注意:取值必须是 [0, 255]
int rows = mapper.insert(album);
System.out.println("插入数据完成,受影响的行数=" + rows);
}
}