赵走x博客
网站访问量:151418
首页
书籍
软件
工具
古诗词
搜索
登录
32、使用MyBatis注解实现数据库操作
31、MyBaties使用XML配置文件实现数据库操作
30、Spring Boot构建MyBatis应用程序
29、MyBatis简介
28、实战:实现JdbcTemplate多数据源
27、使用JdbcTemplate操作数据库
26、JdbcTemplate入门
25、实战:实现Web API版本控制
24、使用Swagger生成Web API文档
23、Thymeleaf页面布局
22、Thymeleaf内置对象、内嵌变量
21、Thymeleaf内联
20、Thymeleaf语法
19、Thymeleaf表达式
18、Thymeleaf入门
17、全局异常处理
16、实战:实现优雅的数据返回
15、跳转指定页面
14、Spring Boot静态资源
13、Spring Boot数据转换配置
12、跨域访问
11、Web配置
10、过滤器
9、拦截器
8、数据验证
7、参数传递
6、URL映射
5、@ResponseBody
4、@RequestMapping
3、@Controller和@RestController
2、Web项目结构
1、spring-boot-starter-web介绍
30、Spring Boot构建MyBatis应用程序
资源编号:552019
热度:108
30、Spring Boot构建MyBatis应用程序
MyBatis官方对Spring Boot提供了完善的支持,能够方便地将MyBatis集成到Spring Boot项目中。 接下来就让我们一步一步地将MyBatis集成到Spring Boot项目中,实现学生信息管理功能。 # 一、MyBatis-Spring-Boot-Starter简介 MyBatis官方为帮助开发者快速集成Spring Boot项目、构建基于Spring Boot的MyBatis应用程序,提供了针对Spring Boot的启动器:MyBatis-Spring-Boot-Starter。 它不是Spring Boot官方开发的启动器,所以MyBatis-Spring-Boot-Starter是一个集成包,对MyBatis、MyBatis-Spring和Spring Boot都存在依赖,需要注意三者的版本对应关系,如表8-1所示。 表8-1 MyBatis、MyBatis-Spring和Spring Boot版本对应关系  由于MyBatis-Spring-Boot-Starter是MyBatis官方提供的组件而非Spring Boot开发的,因此它的版本和Spring Boot不一样,使用时需要注意版本。 MyBatis针对Spring Boot项目做了非常完善的支持,使用MyBatis-Spring-Boot-Starter组件可以做到以下几点: - 构建独立的应用。 - 几乎可以零配置。 - 需要很少的XML配置。 MyBatis的启动过程看起来很复杂,其实主要完成以下几个操作: - 自动发现存在的数据源。 - 利用SqlSessionFactoryBean创建并注册SqlSessionFactory。 - 创建并注册SqlSessionTemplate。 - 自动扫描Mappers,并注册到Spring上下文中,方便程序的注入使用。 因此,使用MyBatis-Spring-Boot-Starter启动器之后,只需要在配置文件中定义数据源,MyBatis就会使用该数据源自动创建SqlSessionFactoryBean以及SqlSessionTemplate,同时会自动扫描Mappers接口,并注册到Spring上下文中,相当于所有数据库的底层操作MyBatis都自动完成了。 MyBatis对于SQL映射提供了两种解决方案:一种是简化后的XML配置版,另一种是使用注解解决一切问题。 # 二、Spring Boot集成MyBatis MyBatis官方针对Spring Boot提供了启动包:MyBatis-spring-boot-starter组件,使得Spring Boot构建MyBatis应用程序更加简单方便。 下面将演示Spring Boot项目集成MyBatis-spring-boot-starter组件的过程,以便进一步构建数据库应用。 ### 1. 添加依赖 首先需要在pom.xml文件中引入MyBatis-spring-boot-starter依赖包: ``` <
org.MyBatis.spring.boot
MyBatis-spring-boot-starter
2.1.1
mysql
mysql-connector-java
> ``` 在上面的示例中,引入MyBatis-spring-boot-starter组件需要指定版本号。另外,还需要引入mysql-connector-java连接驱动。 ### 2. 应用配置 在application.properties中添加MyBatis的相关配置: ``` # mapper.xml配置文件的路径 MyBatis.mapper-locations=classpath:/mapper/*.xml MyBatis.type-aliases-package=com.weiz.example01.model # 数据库连接 spring.datasource.url=jdbc:mysql://localhost:3306/MyBatis_test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 在上面的配置中,主要是数据库连接和Mapper文件相关的配置,具体配置说明如下: - 1)MyBatis.mapper-locations:配置Mapper对应的XML文件路径。 - 2)MyBatis.type-aliases-package:配置项目中的实体类包路径。 - 3)spring.datasource.*:数据源相关配置。 ### 3. 修改启动类 在启动类中添加对Mapper包的扫描注解@MapperScan,Spring Boot启动时会自动加载包路径下的Mapper。 ``` @Spring BootApplication @MapperScan("com.weiz.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 在上面的示例中,使用MapperScan注解定义需要扫描的Mapper包。其实,也可以直接在Mapper类上添加注解@Mapper,这样Spring Boot也会自动注入Spring。不过,建议使用上面代码中使用的这种,不然给每个Mapper添加注解也挺麻烦。 ### 4. 创建数据库和表 首先创建mybatis_test数据库,然后在数据库中创建student表,脚本如下: ``` DROP TABLE IF EXISTS 'student'; CREATE TABLE 'student' ( 'id' bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', 'name' varchar(32) DEFAULT NULL COMMENT '姓名', 'sex' int(11) DEFAULT NULL, 'age' int(11) DEFAULT NULL, PRIMARY KEY ('id') ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; ``` ### 5. 创建实体类 在model目录创建Student实体类,属性与创建的Student表中的字段一致,示例代码如下: ``` public class Student { private Long id; private String name; private int sex; private int age; public Student(){ } public Student(String name, int sex, int age) { this.name = name; this.sex = sex; this.age = age; } //省略get、set方法 }; ``` ### 6. 添加mapper接口和映射文件 创建数据库表之后,接下来定义mapper接口。 首先在com.weiz.example01.mapper包中创建StudentMapper接口,然后定义一个查询方法,具体代码如下: ``` public interface StudentMapper { List
selectAll(); } ``` 在上面的示例中,定义了查询学生信息的seletAll()方法。 需要注意的是,mapper接口中的方法名需要和XML配置中的id属性一致,不然找不到方法去对应执行的SQL。 接下来定义MyBatis的核心文件:mapper映射文件。在resources/mapper目录创建StudentMapper.xml映射文件,具体实例代码如下: ``` <
SELECT * FROM student
> ``` 在上面的示例中,通过
标签映射mapper接口中定义的selectAll()方法,标签的id为mapper接口中的方法,然后通过
映射查询结果集字段与实体类Student的映射关系。 ### 7. 测试调用 创建单元测试类和测试方法testSelectAll(),具体测试代码如下: ``` @Autowired private StudentMapper studentMapper; @Test public void testSelectAll() { // 查询 List
students = studentMapper.selectAll(); for (Student stu : students){ System.out.println("name:"+stu.getName()+",age:"+stu.getAge()); } } ``` 上面是简单的使用MyBatis的测试示例,使用@Autowired将StudentMapper注入后即可直接调用。 单击Run Test或在方法上右击,选择Run 'testSelectAll',运行测试方法,结果如图8-2所示。  结果表明单元测试方法testSelectAll()运行成功,并输出了相应的学生数据查询结果。 这说明在项目中成功集成MyBatis,并成功执行了数据查询操作。 # 三、实战:实现学生信息管理模块 前面我们成功地将MyBatis集成到了Spring Boot项目中。下面将通过示例实现完整的学生信息管理功能。 ### 1. 修改mapper接口 修改原有的StudentMapper接口,定义学生数据的增、删、改、查等接口方法,具体代码如下: ``` public interface StudentMapper { List
selectAll(); Student selectOne(Long id); void insert(Student student); void update(Student student); void delete(Long id); } ``` ### 2. 修改mapper映射文件 修改之前创建的StudentMapper.xml映射文件,定义具体的增、删、改、查SQL语句,具体示例代码如下: ```
SELECT
FROM student WHERE id = #{id}
INSERT INTO student (name,sex,age) VALUES (#{name}, #{sex}, #{age})
UPDATE student SET
name = #{name},
sex = #{sex},
age = #{age} WHERE id = #{id}
DELETE FROM student WHERE id =#{id}
``` 在上面的示例中,我们根据StudentMapper接口定义的方法配置了对应的SQL语句。 可能有些人会问:update()方法中的SQL使用的if标签是怎么回事? 这是MyBatis最大的特点,可以根据传入的不同条件动态生成SQL语句。 ### 3. 测试调用 创建单元测试方法,测试mapper中的insert、delete、update、selectOne等方法,具体示例代码如下: ``` @@Autowired private StudentMapper studentMapper; @Test public void testInsert() { // 新增 studentMapper.insert(new Student("weiz新增", 1, 30)); } @Test public void testUpdate() { Student student = studentMapper.selectOne(4L); student.setName("weiz修改"); student.setSex(0); // 修改 studentMapper.update(student); } @Test public void testSelectOne() { // 查询 Student student = studentMapper.selectOne(4l); System.out.println("name:"+student.getName()+",age:"+student.getAge()); } @Test public void testDelete() { // 删除 studentMapper.delete(4L); } ``` 在上面的示例中,在测试类中注入StudentMapper接口,测试调用insert、delete、update、selectOne等方法,验证学生信息的增、删、改、查是否成功。单击Run Test或在方法上右击,选择Run'Example01ApplicationTests',运行全部测试方法,结果如图8-3所示。  结果表明增、删、改、查对应的单元测试方法运行成功,并输出了相应的查询结果。这说明实现了学生信息的管理功能。 # 四、MyBatis Generator插件 使用ORM框架比较麻烦的一点是不仅要创建数据库和表,还要创建对应的POJO实体类和mapper映射文件,而且表结构、实体类和mapper文件三者必须保持一致。如果数据库字段发生变化,则需要同步修改这三个文件。整个过程非常烦琐,而且容易出错。 因此,MyBatis提供了强大的代码自动插件:MyBatisGenerator,只需简单几步就能生成POJO实体类和mapper映射文件和mapper接口文件。 Spring Boot支持MyBatis Generator自动生成代码插件,能在项目中自动生成POJO实体类、mapper接口以及SQL映射文件,从而提高开发效率。下面开始演示MyBatis Generator插件的使用。 ### 1. 添加MyBatis Generator插件 在项目的pom.xml中引入MyBatis Generator依赖,示例代码如下: ```
org.MyBatis.generator
MyBatis-generator-maven-plugin
1.3.2
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
8.0.22
org.MyBatis.generator
MyBatis-generator-core
1.3.2
``` 在上面的示例中,在pom.xml文件的build标签中添加了MyBatis-generator-maven-plugin插件,然后配置了generatorConfig.xml。 ### 2. 配置MyBatis Generator 下面创建MyBatis Generator插件的配置文件:generatorConfig.xml,它主要描述数据库连接配置、类型转换、生成模型的包名及位置、生成映射文件的包名及位置、生成mapper文件的包名及位置、要生成的表等信息。 之前,在pom.xml的MyBatis-generator-plugin中配置了generatorConfig.xml文件的位置。接下来在resources/generator目录下创建generatorConfig.xml文件,增加相应的配置。具体配置如下: ```
``` 在上面的示例中,主要配置了数据库连接、POJO实体类、Mapper接口和Mapper映射文件的保存路径等。其实,generatorConfig.xml配置文件也不复杂,主要具有如下内容: - 1)jdbcConnection:配置数据库连接地址。 - 2)javaModelGenerator:生成的POJO类的包名和位置。 - 3)javaClientGenerator:生成的Mapper接口的位置。 - 4)sqlMapGenerator:配置mapper.xml映射文件。 - 5)table:要生成哪些表。 ### 3. 执行Generator插件 配置完成之后,就可以运行之前配置的Generator插件生成MyBatis文件。单击界面右上角的Maven,然后依次单击Plugins→mybatis-generator,双击mybatis-generator:generate,如图8-4所示。  完成之后,在对应的项目目录中查看,发现Mapper映射文件、POJO实体类和Mapper接口都已生成,如图8-5所示。  MyBatis Generator插件的配置非常简单,一键生成Mapper.XML映射文件、POJO实体类和Mapper接口,避免重复低效的工作,从而提高工作效率。