个人随笔
目录
七、数据访问-2-SpringBoot2.0整合mybatis
2020-09-11 22:32:46

正常来说,我们开发微服务项目,不准确来说我们用springboot来创建项目数据访问一把都是用mybatis来访问数据库的,基本上不会用hibernate,hibernate的话以前的老项目可能会经常用(容我将以前的上s2sh项目定位为老项目)。下面我们来学习一下springboot2.0整合mybatis。

环境

  1. jdk1.8_73
  2. apache-maven-3.5.3
  3. springboot 2.0.0.RELEASE
  4. eclipse Oxygen.3a Release (4.7.3a)

一、流程

页面结构如下

1、新建一个springboot2.0的项目

这里项目名称为:springboot-mybatis

2、pom.xml中添加如下依赖

我这里都是基于二、快速入门-Hello SpringBoot,来添加相应的依赖的。

  1. <!-- mybatis依赖 -->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>1.3.2</version>
  6. </dependency>
  7. <!-- springboot 整合 pagehelper -->
  8. <dependency>
  9. <groupId>com.github.pagehelper</groupId>
  10. <artifactId>pagehelper-spring-boot-starter</artifactId>
  11. <version>1.2.5</version>
  12. </dependency>
  13. <!-- mysql依赖 -->
  14. <dependency>
  15. <groupId>mysql</groupId>
  16. <artifactId>mysql-connector-java</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>com.mchange</groupId>
  20. <artifactId>c3p0</artifactId>
  21. <version>0.9.5.2</version>
  22. </dependency>
  23. <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
  24. <dependency>
  25. <groupId>com.google.code.gson</groupId>
  26. <artifactId>gson</artifactId>
  27. </dependency>

这里对上面的依赖稍作说明

依赖 作用
mybatis-spring-boot-starter spring整个mybatis的包
pagehelper-spring-boot-starter 用于分页的工具包
mysql-connector-java mysql连接驱动
c3p0 mysql连接池,当然这里如果用阿里的druid效果可能会更好,不过这里只是简单说下使用而已

注意:c3p0的包如果版本不对可能会报如下错误,这种情况下需要用版本比较新一点的包。

  1. java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract

3、application.properties

在配置文件中配置好c3p0连接数据库的信息以及分页插件的信息

  1. #c3p0
  2. c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/weixinser
  3. c3p0.user=root
  4. c3p0.password=forever
  5. c3p0.driverClass=com.mysql.jdbc.Driver
  6. c3p0.minPoolSize=2
  7. c3p0.maxPoolSize=10
  8. c3p0.maxIdleTime=1800000
  9. c3p0.acquireIncrement=3
  10. c3p0.maxStatements=1000
  11. c3p0.initialPoolSize=3
  12. c3p0.idleConnectionTestPeriod=60
  13. c3p0.acquireRetryAttempts=30
  14. c3p0.acquireRetryDelay=1000
  15. c3p0.breakAfterAcquireFailure=false
  16. c3p0.testConnectionOnCheckout=false
  17. #pagehelper插件
  18. logging.level.com.example.demo.dao=DEBUG
  19. pagehelper.helperDialect=mysql
  20. #禁用合理化,否则超过页数还是会返回最后一页的值
  21. pagehelper.reasonable=false
  22. pagehelper.supportMethodsArguments=true
  23. pagehelper.params=count=countSql
  24. pagehelper.page-size-zero=true

上面的基本上都是固定的,唯一要注意的是pagehelper.reasonable=false这个配置
,若是改为true,那么在分页查询的时候,就算是下一页没有数据,也会返回最后一页的数据

4、建立数据源的配置类DataSourceConfiguration.java

  1. package cn.forever.config;
  2. import javax.sql.DataSource;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.jdbc.DataSourceBuilder;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.context.annotation.Primary;
  9. @Configuration
  10. public class DataSourceConfiguration {
  11. // c3p0 连接池
  12. @Bean(name = "dataSource")
  13. @Qualifier(value = "dataSource")
  14. @Primary
  15. @ConfigurationProperties(prefix = "c3p0")
  16. public DataSource dataSource() {
  17. return DataSourceBuilder.create().type(com.mchange.v2.c3p0.ComboPooledDataSource.class).build();
  18. }
  19. }

5、UserMapper.java

  1. package cn.forever.mapper;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.apache.ibatis.annotations.Select;
  5. public interface UserMapper {
  6. @Select("select * from hu_chat_info")
  7. public List<Map<String,Object>> getUsers();
  8. }

这里只是为了演示整合,所以这里就只是用注解来操作

6、MyService.java和MyServiceImpl

  1. package cn.forever.service;
  2. public interface MyService {
  3. public String getUser();
  4. }
  1. package cn.forever.service.impl;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import com.github.pagehelper.PageHelper;
  7. import com.google.gson.Gson;
  8. import cn.forever.mapper.UserMapper;
  9. @Service
  10. public class MyServiceImpl implements cn.forever.service.MyService {
  11. /**
  12. * PageHelper的分页能力太强了
  13. */
  14. @Autowired
  15. private UserMapper userMapper;
  16. public String getUser() {
  17. int page=1;//当前页数
  18. int size=10;//当前显示的记录数
  19. // 开启分页插件,放在查询语句上面
  20. PageHelper.startPage(page, size);
  21. List<Map<String,Object>> users =userMapper.getUsers();
  22. Gson gson = new Gson();
  23. String user = gson.toJson(users);
  24. System.out.println("users:"+user.toString());
  25. return user;
  26. }
  27. }

这两个类的作用就是service业务逻辑层,这里进行分页插件额度使用,如下代码段

  1. int page=1;//当前页数
  2. int size=10;//当前显示的记录数
  3. // 开启分页插件,放在查询语句上面
  4. PageHelper.startPage(page, size);

只需要在查询语句上面加入上面的代码片段,程序会自动为后面的查询sql拼接上limit。page是查询当前是第几页,size是每页查询的大小。

7、MyController.java

  1. package cn.forever.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import cn.forever.service.MyService;
  6. @RestController
  7. public class MyController {
  8. @Autowired
  9. private MyService myServcie;
  10. @RequestMapping("/getUsers")
  11. public String getUsers() {
  12. String user = myServcie.getUser();
  13. return user;
  14. }
  15. }

8、启动类App.java

  1. package cn.forever;
  2. import org.mybatis.spring.annotation.MapperScan;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. //这里要制定Mappper
  6. @MapperScan("cn.forever.mapper")
  7. @SpringBootApplication
  8. public class App {
  9. public static void main(String[] args) {
  10. SpringApplication.run(App.class, args);
  11. }
  12. }

主要用上了@MapperScan注解,扫描dao

9、启动项目测试

run运行App,启动成功后浏览器输入
http://127.0.0.1:8080/getUsers
会返回json格式的信息,这里顺便提一下,若是不喜欢用注解,可以在配置文件(application.properties,application.yml)配置mapper对应的xml位置,如下,这里是用application.yml的格式来,该格式比较节省空间,但是要注意空格的数量。

  1. mybatis:
  2. #这里前面是两个空格 #这里起那么是一个空格
  3. mapper-locations: classpath:mapper/*.xml
  4. #这一句的作用是让控制台打印出sql语句
  5. configuration:
  6. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

结语

其实都很简单啦,不过我这个博文都是基于了解了mybatis的读者,毕竟这个标签学的是springboot2.0的使用,不可能深入去了解mybatis的使用啦。

 314

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2