spring boot整合mybatis
1、springboot配置数据库连接池druid
新建spring boot项目
导入pom依赖
1 <dependency> 2 <groupId>com.alibaba</groupId> 3 <artifactId>druid-spring-boot-starter</artifactId> 4 <version>1.1.10</version> 5 </dependency> 6 <dependency> 7 <groupId>org.springframework</groupId> 8 <artifactId>spring-aspects</artifactId> 9 </dependency>
修改mysql版本
<properties> <java.version>1.8</java.version> <mysql.version>5.1.44</mysql.version> </properties>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> <scope>runtime</scope> </dependency>
配置application.yml文件
1 server: 2 port: 8081 3 servlet: 4 context-path: / 5 6 spring: 7 datasource: 8 #1.JDBC 9 type: com.alibaba.druid.pool.DruidDataSource 10 driver-class-name: com.mysql.jdbc.Driver 11 url: jdbc:mysql://localhost:3306/j2ee?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC 12 username: root 13 password: 12345 14 druid: 15 #2.连接池配置 16 #初始化连接池的连接数量 大小,最小,最大 17 initial-size: 5 18 min-idle: 5 19 max-active: 20 20 #配置获取连接等待超时的时间 21 max-wait: 60000 22 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 23 time-between-eviction-runs-millis: 60000 24 # 配置一个连接在池中最小生存的时间,单位是毫秒 25 min-evictable-idle-time-millis: 30000 26 validation-query: SELECT 1 FROM DUAL 27 test-while-idle: true 28 test-on-borrow: true 29 test-on-return: false 30 # 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开 31 pool-prepared-statements: true 32 max-pool-prepared-statement-per-connection-size: 20 33 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 34 filter: 35 stat: 36 merge-sql: true 37 slow-sql-millis: 5000 38 #3.基础监控配置 39 web-stat-filter: 40 enabled: true 41 url-pattern: /* 42 #设置不统计哪些URL 43 exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" 44 session-stat-enable: true 45 session-stat-max-count: 100 46 stat-view-servlet: 47 enabled: true 48 url-pattern: /druid/* 49 reset-enable: true 50 #设置监控页面的登录名和密码 51 login-username: admin 52 login-password: admin 53 allow: 127.0.0.1 54 #deny: 192.168.1.100
controller测试代码
1 package com.yuan.springboot02.controller; 2 3 import org.springframework.web.bind.annotation.RequestMapping; 4 import org.springframework.web.bind.annotation.RestController; 5 6 @RestController 7 @RequestMapping("/demo") 8 public class HelloController { 9 10 @RequestMapping("/say1") 11 public String say1(){ 12 return "说活1"; 13 } 14 15 @RequestMapping("/say2") 16 public String say2(){ 17 try { 18 Thread.sleep(2000); 19 } catch (InterruptedException e) { 20 e.printStackTrace(); 21 } 22 return "说活2"; 23 } 24 25 @RequestMapping("/say3") 26 public String say3(){ 27 try { 28 Thread.sleep(5000); 29 } catch (InterruptedException e) { 30 e.printStackTrace(); 31 } 32 return "说活3"; 33 } 34 35 }
2、springboot整合mybatis
springboot整合mybatis逆向生成插件
相关pom依赖
<build> <resources> <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题--> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题--> <resource> <directory>src/main/resources</directory> <includes> <include>*.properties</include> <include>*.xml</include> <include>*.yml</include> </includes> </resource> </resources> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <dependencies> <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> <configuration> <overwrite>true</overwrite> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
逆向生成配置文件generatorConfig.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 3 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > 4 <generatorConfiguration> 5 <!-- 引入配置文件 --> 6 <properties resource="jdbc.properties"/> 7 8 <!--指定数据库jdbc驱动jar包的位置--> 9 <classPathEntry location="D:\Maven-folder\apache-maven-3.5.0-bin\apache-maven-3.5.0\mvn_repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/> 10 11 <!-- 一个数据库一个context --> 12 <context id="infoGuardian"> 13 <!-- 注释 --> 14 <commentGenerator> 15 <property name="suppressAllComments" value="true"/><!-- 是否取消注释 --> 16 <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 --> 17 </commentGenerator> 18 19 <!-- jdbc连接 --> 20 <jdbcConnection driverClass="${jdbc.driver}" 21 connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/> 22 23 <!-- 类型转换 --> 24 <javaTypeResolver> 25 <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) --> 26 <property name="forceBigDecimals" value="false"/> 27 </javaTypeResolver> 28 29 <!-- 01 指定javaBean生成的位置 --> 30 <!-- targetPackage:指定生成的model生成所在的包名 --> 31 <!-- targetProject:指定在该项目下所在的路径 --> 32 <javaModelGenerator targetPackage="com.yuan.springboot02.entity" 33 targetProject="src/main/java"> 34 <!-- 是否允许子包,即targetPackage.schemaName.tableName --> 35 <property name="enableSubPackages" value="false"/> 36 <!-- 是否对model添加构造函数 --> 37 <property name="constructorBased" value="true"/> 38 <!-- 是否针对string类型的字段在set的时候进行trim调用 --> 39 <property name="trimStrings" value="false"/> 40 <!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 --> 41 <property name="immutable" value="false"/> 42 </javaModelGenerator> 43 44 <!-- 02 指定sql映射文件生成的位置 --> 45 <sqlMapGenerator targetPackage="com.yuan.springboot02.mapper" 46 targetProject="src/main/java"> 47 <!-- 是否允许子包,即targetPackage.schemaName.tableName --> 48 <property name="enableSubPackages" value="false"/> 49 </sqlMapGenerator> 50 51 <!-- 03 生成XxxMapper接口 --> 52 <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 --> 53 <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 --> 54 <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 --> 55 <javaClientGenerator targetPackage="com.yuan.springboot02.mapper" 56 targetProject="src/main/java" type="XMLMAPPER"> 57 <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] --> 58 <property name="enableSubPackages" value="false"/> 59 </javaClientGenerator> 60 61 <!-- 配置表信息 --> 62 <!-- schema即为数据库名 --> 63 <!-- tableName为对应的数据库表 --> 64 <!-- domainObjectName是要生成的实体类 --> 65 <!-- enable*ByExample是否生成 example类 --> 66 67 <table schema="" tableName="t_mvc_book" domainObjectName="Book" 68 enableCountByExample="false" enableDeleteByExample="false" 69 enableSelectByExample="false" enableUpdateByExample="false"> 70 <property name="useActualColumnNames" value="true" /> 71 </table> 72 73 74 </context> 75 </generatorConfiguration>
逆向生成集成到maven中的命令
mybatis-generator:generate -e
springboot整合mybatis
使用@Repository注解,在启动类中添加@MapperScan(“xxxx”)注解,用于扫描Mapper类的包。扫描多个包:@MapperScan({”com.javaxl.springboot02.dao”,”com.javaxl.springboot02.entity”})
//启用事物管理器
@EnableTransactionManagement
1 package com.yuan.springboot02; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 7 @MapperScan("com.yuan.springboot02.mapper") 8 @SpringBootApplication 9 public class Springboot02Application { 10 11 public static void main(String[] args) { 12 SpringApplication.run(Springboot02Application.class, args); 13 } 14 15 }
Test测试代码
1 package com.yuan.springboot02.Service.impl; 2 3 4 import com.yuan.springboot02.Service.BookService; 5 import org.junit.jupiter.api.Test; 6 import org.springframework.beans.factory.annotation.Autowired; 7 import org.springframework.boot.test.context.SpringBootTest; 8 9 @SpringBootTest 10 public class BookServiceImplTest { 11 12 @Autowired 13 private BookService bookService; 14 15 @Test 16 public void deleteByPrimaryKey() { 17 bookService.deleteByPrimaryKey(12); 18 19 } 20 21 @Test 22 public void selectByPrimaryKey() { 23 System.out.println(bookService.selectByPrimaryKey(12)); 24 } 25 }
查询测试
删除测试
3、springboot整合pagehelper
导入pom
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
配置application.yml文件
#pagehelper分页插件配置 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql #显示日志 logging: level: com.javaxl.springboot02.mapper: debug
BookMapper和BookMapper.xml
1 List<Book> listPager(Book book); 2 3 4 5 <select id="listPager" resultType="com.yuan.springboot02.entity.Book" parameterType="com.yuan.springboot02.entity.Book" > 6 select 7 <include refid="Base_Column_List" /> 8 from t_mvc_book 9 <where> 10 <if test="bname != null and bname != ''" > 11 and bname like #{bname} 12 </if> 13 </where> 14 </select>
PagerAspect
1 package com.yuan.springboot02.aspect; 2 3 import com.github.pagehelper.PageHelper; 4 import com.github.pagehelper.PageInfo; 5 import com.yuan.springboot02.util.PageBean; 6 import org.aspectj.lang.ProceedingJoinPoint; 7 import org.aspectj.lang.annotation.Around; 8 import org.aspectj.lang.annotation.Aspect; 9 import org.springframework.stereotype.Component; 10 11 import java.util.List; 12 13 @Component 14 @Aspect 15 public class PagerAspect { 16 17 @Around("execution(* *..*Service.*Pager(..))") 18 public Object invoke(ProceedingJoinPoint args) throws Throwable{ 19 Object[] params = args.getArgs(); 20 PageBean pageBean = null; 21 for (Object param : params) { 22 if(param instanceof PageBean){ 23 pageBean = (PageBean) param; 24 break; 25 } 26 } 27 28 if (pageBean !=null && pageBean.isPagination()) 29 PageHelper.startPage(pageBean.getPage(),pageBean.getRows()); 30 31 Object proceed = args.proceed(params); 32 33 if (pageBean !=null && pageBean.isPagination()){ 34 PageInfo pageInfo = new PageInfo((List)proceed); 35 pageBean.setTotal(pageInfo.getTotal()+""); 36 } 37 return proceed; 38 } 39 }
Service层和实现类
1 List<Book> listPager(Book book, PageBean pageBean); 2 3 4 5 @Override 6 public List<Book> listPager(Book book, PageBean pageBean) { 7 return bookMapper.listPager(book); 8 }
Springboot02Application
1 package com.yuan.springboot02; 2 3 import org.mybatis.spring.annotation.MapperScan; 4 import org.springframework.boot.SpringApplication; 5 import org.springframework.boot.autoconfigure.SpringBootApplication; 6 import org.springframework.context.annotation.EnableAspectJAutoProxy; 7 import org.springframework.transaction.annotation.EnableTransactionManagement; 8 9 @MapperScan("com.yuan.springboot02.mapper") 10 @EnableTransactionManagement 11 @EnableAspectJAutoProxy 12 @SpringBootApplication 13 public class Springboot02Application { 14 15 public static void main(String[] args) { 16 SpringApplication.run(Springboot02Application.class, args); 17 } 18 19 }
测试方法
1 @Test 2 public void listPager() { 3 Book book = new Book(); 4 book.setBname("%圣墟%"); 5 PageBean pageBean = new PageBean(); 6 pageBean.setPage(2); 7 for (Book book1 : bookService.listPager(book, pageBean)) { 8 System.out.println(book1); 9 } 10 }
查询结果
谢谢观看!!!