【springboot】mybatis-generator+tkmybatis通用mapper+swagge+redis缓存整合使用
- 介紹
- 💥mybatis-generator配置的代碼:
- 💥tkmybatis:mybatis通用mapper配置
- 💥代碼:整合redis+springcache+tkmybatis:
介紹
【mybatis-generator】:可作為一個(gè)插件使用
mybatis-generator-maven-plugin mybatis比較官方的代碼生成器,生成dao,mapper,mapper.xml且生成大量mybatis動(dòng)態(tài)sql.
官網(wǎng)
http://mybatis.org/generator/
配置成功后點(diǎn)擊run即可
文件目錄:
【tk-mybatis】:用通用mapper的方式減輕工作量
為最常見(jiàn)的語(yǔ)句提供了內(nèi)置接口,不
需要寫(xiě)任何SQL語(yǔ)句。比如:
selectOne
select
selectAll
selectCount
selectByPrimrayKey
針對(duì)一些稍微高級(jí)一點(diǎn)的查詢,可以使用Example機(jī)制
Example example = new Example(Person.class); example.createCriteria().andGreaterThan("age", 18);List<Person> people = personMapper.selectByExample(example);簡(jiǎn)單的SQL語(yǔ)句就直接使用通用mapper提供的接口
另外一些特別簡(jiǎn)單的SQL也可以通過(guò)Example擴(kuò)展機(jī)制完成
更復(fù)雜的SQL語(yǔ)句,建議使用標(biāo)準(zhǔn)的MyBatis的實(shí)現(xiàn)方式
【spring cache】
緩存的框架太多了,各有各的優(yōu)勢(shì),比如Redis、Memcached、Guava、Caffeine等等
Spring Cache就是一個(gè)這個(gè)框架。它利用了AOP,實(shí)現(xiàn)了基于注解的緩存功能,并且進(jìn)行了合理的抽象,業(yè)務(wù)代碼不用關(guān)心底層是使用了什么緩存框架,只需要簡(jiǎn)單地加一個(gè)注解,就能實(shí)現(xiàn)緩存功能了。而且Spring Cache也提供了很多默認(rèn)的配置,用戶可以3秒鐘就使用上一個(gè)很不錯(cuò)的緩存功能。
需要依賴:
redis整合spring cache:如果我們引入了spring-data-redis,Spring就會(huì)自動(dòng)使用spring-data-redis提供的RedisCacheManager,RedisCache。因此在這里我們需要重新定義好CacheManager個(gè)Bean。
記得redisconfig上面加上@EnableCaching
即:
在要緩存的方法上面添加@Cacheable注解,即可緩存這個(gè)方法的返回值。
💥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可以自動(dòng)生成mapper和entity文件,mybatis-generator有三種用法: 命令行、eclipse插件、maven插件。--> <!-- 這里使用的是maven插件方式,可以在eclipse/intellij idea等ide上可以通用。--> <!-- 不再追加xml內(nèi)容--><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><!-- 配置實(shí)體類(lèi)存放路徑 --><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類(lèi)存放路徑 --><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>數(shù)據(jù)庫(kù)相關(guān)配置:
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>點(diǎn)擊運(yùn)行即可看到生成了相關(guān)xml mapper pojo文件。
💥tkmybatis:mybatis通用mapper配置
步驟:
引入TkMybatis的Maven依賴
實(shí)體類(lèi)的相關(guān)配置,@Id,@Table
Mapper繼承tkMabatis的Mapper接口
啟動(dòng)類(lèi)Application或自定義Mybatis配置類(lèi)上使用@MapperScan注解掃描Mapper接口
在application.properties配置文件中,配置mapper.xml文件指定的位置[可選]
使用TkMybatis提供的sql執(zhí)行方法
如有需要,實(shí)現(xiàn)mapper.xml自定義sql語(yǔ)句
tkmybatis配置代碼:
🔷🔷要點(diǎn):
.啟動(dòng)類(lèi)Application或自定義Mybatis配置類(lèi)上使用
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//設(shè)置緩存的默認(rèn)超時(shí)時(shí)間:30分鐘.entryTtl(Duration.ofMinutes(30L))//如果是空值,不緩存.disableCachingNullValues()//設(shè)置key序列化器.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer()))//設(shè)置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配置時(shí)一定要記得包的路徑要正確!!!
@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自動(dòng)生成緩存").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("單個(gè)用戶查詢,按userid查用戶信息")@RequestMapping(value = "/findById/{id}", method = RequestMethod.GET)public UserVO findById(@PathVariable int id) {User user = this.userService.findUserById(id);//controller層調(diào)用了service的查詢方法,service中配置了緩存UserVO userVO = new UserVO();BeanUtils.copyProperties(user, userVO);return userVO;}@ApiOperation("修改某條數(shù)據(jù)")@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 = "刪除標(biāo)志,默認(rèn)0不刪除,1刪除")private Byte deleted;@ApiModelProperty(value = "更新時(shí)間")private Date updateTime;@ApiModelProperty(value = "創(chuàng)建時(shí)間")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;}/*** 設(shè)置用戶名** @param username 用戶名*/public void setUsername(String username) {this.username = username;}/*** 獲取密碼** @return password - 密碼*/public String getPassword() {return password;}/*** 設(shè)置密碼** @param password 密碼*/public void setPassword(String password) {this.password = password;}/*** 獲取性別 0=女 1=男 ** @return sex - 性別 0=女 1=男 */public Byte getSex() {return sex;}/*** 設(shè)置性別 0=女 1=男 ** @param sex 性別 0=女 1=男 */public void setSex(Byte sex) {this.sex = sex;}/*** 獲取刪除標(biāo)志,默認(rèn)0不刪除,1刪除** @return deleted - 刪除標(biāo)志,默認(rèn)0不刪除,1刪除*/public Byte getDeleted() {return deleted;}/*** 設(shè)置刪除標(biāo)志,默認(rèn)0不刪除,1刪除** @param deleted 刪除標(biāo)志,默認(rèn)0不刪除,1刪除*/public void setDeleted(Byte deleted) {this.deleted = deleted;}/*** 獲取更新時(shí)間** @return update_time - 更新時(shí)間*/public Date getUpdateTime() {return updateTime;}/*** 設(shè)置更新時(shí)間** @param updateTime 更新時(shí)間*/public void setUpdateTime(Date updateTime) {this.updateTime = updateTime;}/*** 獲取創(chuàng)建時(shí)間** @return create_time - 創(chuàng)建時(shí)間*/public Date getCreateTime() {return createTime;}/*** 設(shè)置創(chuàng)建時(shí)間** @param createTime 創(chuàng)建時(shí)間*/public void setCreateTime(Date createTime) {this.createTime = createTime;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", sex=" + sex +'}';} }查詢時(shí):
總結(jié)
以上是生活随笔為你收集整理的【springboot】mybatis-generator+tkmybatis通用mapper+swagge+redis缓存整合使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DefaultSerializer re
- 下一篇: 【学习笔记】操作系统之哲学原理