【springboot】mybatis-generator+tkmybatis通用mapper+swagge+redis缓存整合使用
- 介紹
- 💥mybatis-generator配置的代碼:
- 💥tkmybatis:mybatis通用mapper配置
- 💥代碼:整合redis+springcache+tkmybatis:
介紹
【mybatis-generator】:可作為一個插件使用
mybatis-generator-maven-plugin mybatis比較官方的代碼生成器,生成dao,mapper,mapper.xml且生成大量mybatis動態sql.
官網
http://mybatis.org/generator/
配置成功后點擊run即可
文件目錄:
【tk-mybatis】:用通用mapper的方式減輕工作量
為最常見的語句提供了內置接口,不
需要寫任何SQL語句。比如:
selectOne
select
selectAll
selectCount
selectByPrimrayKey
針對一些稍微高級一點的查詢,可以使用Example機制
Example example = new Example(Person.class); example.createCriteria().andGreaterThan("age", 18);List<Person> people = personMapper.selectByExample(example);簡單的SQL語句就直接使用通用mapper提供的接口
另外一些特別簡單的SQL也可以通過Example擴展機制完成
更復雜的SQL語句,建議使用標準的MyBatis的實現方式
【spring cache】
緩存的框架太多了,各有各的優勢,比如Redis、Memcached、Guava、Caffeine等等
Spring Cache就是一個這個框架。它利用了AOP,實現了基于注解的緩存功能,并且進行了合理的抽象,業務代碼不用關心底層是使用了什么緩存框架,只需要簡單地加一個注解,就能實現緩存功能了。而且Spring Cache也提供了很多默認的配置,用戶可以3秒鐘就使用上一個很不錯的緩存功能。
需要依賴:
redis整合spring cache:如果我們引入了spring-data-redis,Spring就會自動使用spring-data-redis提供的RedisCacheManager,RedisCache。因此在這里我們需要重新定義好CacheManager個Bean。
記得redisconfig上面加上@EnableCaching
即:
在要緩存的方法上面添加@Cacheable注解,即可緩存這個方法的返回值。
💥mybatis-generator配置的代碼:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <!-- windows下路徑, D:\downloads\xxx.jar--><classPathEntry location="C:\Users\14172\Desktop\spring\jar\mysql-connector-java-8.0.23.jar" /><context id="DB2Tables" targetRuntime="MyBatis3"> <!-- mybatis-generator可以自動生成mapper和entity文件,mybatis-generator有三種用法: 命令行、eclipse插件、maven插件。--> <!-- 這里使用的是maven插件方式,可以在eclipse/intellij idea等ide上可以通用。--> <!-- 不再追加xml內容--><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" /><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://127.0.0.1:3308/data1?characterEncoding=utf-8"userId="heziyi"password="123456"></jdbcConnection><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- 配置實體類存放路徑 --><javaModelGenerator targetPackage="com.imooc.mall.pojo" targetProject="src/main/java"><property name="enableSubPackages" value="true" /> <!-- <property name="trimStrings" value="true" />--></javaModelGenerator><!-- 配置xml文件存放路徑 --><sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!-- 配置dao類存放路徑 --><javaClientGenerator type="XMLMAPPER" targetPackage="com.imooc.mall.dao" targetProject="src/main/java"><property name="enableSubPackages" value="true" /></javaClientGenerator> <!--需要生成的表--><table tableName="users" domainObjectName="Users" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"/><table tableName="t_order" domainObjectName="tOrder" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"/></context> </generatorConfiguration>數據庫相關配置:
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456url: jdbc:mysql://127.0.0.1:3306/mall?characterEncoding=utf-8&useSSL=false mybatis:configuration:map-underscore-to-camel-case: truemapper-locations: classpath:mappers/*.xml logging:pattern:console: "[%thread] %-5level %logger{36} - %msg%n"配置pom.xml
<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.7</version><configuration><overwrite>true</overwrite></configuration></plugin>點擊運行即可看到生成了相關xml mapper pojo文件。
💥tkmybatis:mybatis通用mapper配置
步驟:
引入TkMybatis的Maven依賴
實體類的相關配置,@Id,@Table
Mapper繼承tkMabatis的Mapper接口
啟動類Application或自定義Mybatis配置類上使用@MapperScan注解掃描Mapper接口
在application.properties配置文件中,配置mapper.xml文件指定的位置[可選]
使用TkMybatis提供的sql執行方法
如有需要,實現mapper.xml自定義sql語句
tkmybatis配置代碼:
🔷🔷要點:
.啟動類Application或自定義Mybatis配置類上使用
application.properties配置mapper.xml配置文件的掃描路徑
mybatis.mapperLocations=classpath*:cn/base/mapper/*.xml💥代碼:整合redis+springcache+tkmybatis:
目錄
配置“:
propertities:
server.port=9090 spring.redis.host=localhostspring.redis.port=6379 # spring.redis.password=123spring.redis.lettuce.pool.max-active=8spring.redis.lettuce.pool.max-wait=-1spring.redis.lettuce.pool.max-idle=8spring.redis.lettuce.pool.min-idle=0 mybatis.mapper-locations=classpath*:com/example/rediscache/springcache/mapper/xml/*.xmlpom.xml依賴:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example.rediscache</groupId><artifactId>springcache</artifactId><version>0.0.1-SNAPSHOT</version><name>springcache</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--spring cache連接池依賴包--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.2</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-annotations</artifactId><version>1.5.13</version></dependency><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version><scope>compile</scope></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--通用spring boot mapper--><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.1.5</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>redisconfig和swaggerconfig:
@Configuration @EnableCaching public class RedisConfig {@Primary@Bean @ConditionalOnBean(RedisConnectionFactory.class)public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory){RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();redisCacheConfiguration = redisCacheConfiguration//設置緩存的默認超時時間:30分鐘.entryTtl(Duration.ofMinutes(30L))//如果是空值,不緩存.disableCachingNullValues()//設置key序列化器.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))//設置value序列化器.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer()));return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).build();}/*** key序列化器*/private RedisSerializer<String> keySerializer() {return new StringRedisSerializer();}/*** value序列化器*/private RedisSerializer<Object> valueSerializer() {return new GenericJackson2JsonRedisSerializer();}}swagger配置時一定要記得包的路徑要正確!!!
@Configuration @EnableSwagger2 public class SwaggerConfig {@Value(value = "true")private Boolean swaggerEnabled;@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(swaggerEnabled).select().apis(RequestHandlerSelectors.basePackage("com.example.rediscache.springcache")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("接口文檔").description("Spring Boot整合redis自動生成緩存").termsOfServiceUrl("https://study.163.com/provider/1016671292/index.htm").version("1.0").build();} }service:
@Service @CacheConfig(cacheNames = { "user" }) public class UserService {private static final Logger LOGGER = LoggerFactory.getLogger(UserService.class);@Autowiredprivate UserMapper userMapper;@Cacheable(key="#id")public User findUserById(Integer id){return this.userMapper.selectByPrimaryKey(id);}@CachePut(key = "#obj.id")public User updateUser(User obj){this.userMapper.updateByPrimaryKeySelective(obj);return this.userMapper.selectByPrimaryKey(obj.getId());}@CacheEvict(key = "#id")public void deleteUser(Integer id){User user=new User();user.setId(id);user.setDeleted((byte)1);this.userMapper.updateByPrimaryKeySelective(user);}}controller:
@Api(description = "用戶接口") @RestController @RequestMapping("/user") public class UserController {@Autowiredprivate UserService userService;@ApiOperation("單個用戶查詢,按userid查用戶信息")@RequestMapping(value = "/findById/{id}", method = RequestMethod.GET)public UserVO findById(@PathVariable int id) {User user = this.userService.findUserById(id);//controller層調用了service的查詢方法,service中配置了緩存UserVO userVO = new UserVO();BeanUtils.copyProperties(user, userVO);return userVO;}@ApiOperation("修改某條數據")@PostMapping(value = "/updateUser")public void updateUser(@RequestBody UserVO obj) {User user = new User();BeanUtils.copyProperties(obj, user);userService.updateUser(user);}@ApiOperation("按id刪除用戶")@RequestMapping(value = "/del/{id}", method = RequestMethod.GET)public void deleteUser(@PathVariable int id) {this.userService.deleteUser(id);}}vo層:
package com.example.rediscache.springcache.controller;import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty;import java.util.Date;@ApiModel(value = "用戶信息") public class UserVO {@ApiModelProperty(value = "用戶ID")private Integer id;@ApiModelProperty(value = "用戶名")private String username;@ApiModelProperty(value = "密碼")private String password;@ApiModelProperty(value = "性別 0=女 1=男 ")private Byte sex;@ApiModelProperty(value = "刪除標志,默認0不刪除,1刪除")private Byte deleted;@ApiModelProperty(value = "更新時間")private Date updateTime;@ApiModelProperty(value = "創建時間")private Date createTime;/*** @return id*/public Integer getId() {return id;}/*** @param id*/public void setId(Integer id) {this.id = id;}/*** 獲取用戶名** @return username - 用戶名*/public String getUsername() {return username;}/*** 設置用戶名** @param username 用戶名*/public void setUsername(String username) {this.username = username;}/*** 獲取密碼** @return password - 密碼*/public String getPassword() {return password;}/*** 設置密碼** @param password 密碼*/public void setPassword(String password) {this.password = password;}/*** 獲取性別 0=女 1=男 ** @return sex - 性別 0=女 1=男 */public Byte getSex() {return sex;}/*** 設置性別 0=女 1=男 ** @param sex 性別 0=女 1=男 */public void setSex(Byte sex) {this.sex = sex;}/*** 獲取刪除標志,默認0不刪除,1刪除** @return deleted - 刪除標志,默認0不刪除,1刪除*/public Byte getDeleted() {return deleted;}/*** 設置刪除標志,默認0不刪除,1刪除** @param deleted 刪除標志,默認0不刪除,1刪除*/public void setDeleted(Byte deleted) {this.deleted = deleted;}/*** 獲取更新時間** @return update_time - 更新時間*/public Date getUpdateTime() {return updateTime;}/*** 設置更新時間** @param updateTime 更新時間*/public void setUpdateTime(Date updateTime) {this.updateTime = updateTime;}/*** 獲取創建時間** @return create_time - 創建時間*/public Date getCreateTime() {return createTime;}/*** 設置創建時間** @param createTime 創建時間*/public void setCreateTime(Date createTime) {this.createTime = createTime;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", sex=" + sex +'}';} }查詢時:
總結
以上是生活随笔為你收集整理的【springboot】mybatis-generator+tkmybatis通用mapper+swagge+redis缓存整合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DefaultSerializer re
- 下一篇: 【学习笔记】操作系统之哲学原理