本文打算使用springBoot + mybatis + mysql + redis搭建一个maven项目。使用的编辑器是Idea
首先新建一个项目选 spring initializer 然后一路next 选 web,mysql,mybatis,redis 这几个starter。
创建好的pom大概如下所示
<dependencies>
<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.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
好了导包完成就可以写配置文件了。把application.propeties 改成application.yml 这样写的方便点。下面是这三个的配置文件。
server:
port: 8088 #springboot内置tomcat启动端口
spring:
redis: #redis连接
host: 127.0.0.1
password: 12345678
port: 6379
database: 0
datasource: #mysql连接
url: jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf8
username: root
password: 12345678
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml 生成的mapper.xml位置
然后我们就能用redis了。
对于想要设置redis有效时间或者存方法返回值可以使用jetcache pom如下
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>2.4.4</version>
</dependency>
然后需要在启动类配置注解才能使用。对于方法缓存是AOP的思想。是不能嵌套的。
在application.yml中配置
jetcache:
statIntervalMinutes: 15
areaInCacheName: false
local:
default:
type: linkedhashmap //本地缓存形式
keyConvertor: fastjson
remote:
default:
type: redis //远程缓存指定redis
keyConvertor: fastjson
valueEncoder: java
valueDecoder: java
poolConfig:
minIdle: 5
maxIdle: 20
maxTotal: 50
host: 127.0.0.1
port: 6379
password: 12345678
下面是方法缓存的使用方法,缓存expire+timeUnit时间。使用远程缓存也就是上面配置的redis。还可以指定key的名字,默认安装name名和入参自动生成一个key
@Cached(name = "test",timeUnit = TimeUnit.MINUTES,expire = 5,cacheType = CacheType.REMOTE)
public String getUser(){
TestPO testPO = testDAO.selectByPrimaryKey(1);
return testPO.getName();
}
下面让我们看一下那个key. rdm会乱码。我这在想这个问题怎么处理。不过在服务器上我们可以看到二进制的value
接下来我们来用一下mybatis连接数据库并使用 generator 生成类。需要引入下面的插件
<plugin>
<!--Mybatis-generator插件,用于自动生成Mapper和POJO-->
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.6</version> !此处有个坑。需要1.3.6版本的core,低版本的做生成时会有错误,下面会介绍。
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version> // 5.1.37
</dependency>
</dependencies>
</plugin>
对于generatorConfig.xml可以在我的盘里下载下来。里面的配置注意一点。配置table的mapperName属性时当mybatis-generator-core版本低时会出现 必须为元素类型 "table" 声明属性 "mapperName" 错误。把版本调到1.3.6就没事了。
链接:https://pan.baidu.com/s/1YgdlM8pjThXcOQ4SEIeMRQ
提取码:t087
然后点这个就行了。
生成完要在启动类注解扫描包。要不加载不到。
然后就可以正常操作数据了。
TK-Mapper
这个是一个更方便操作数据库的框架。
首先导入pom
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
然后写一个基类接口。
package zy.healthy.util;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/**
* @Author zhangyong
* @Date 2019/4/19 16:05
*/
public interface TkMapper<T> extends Mapper<T>, MySqlMapper<T> {
}
然后在你的dao中实现这个接口就能用了。
package zy.healthy.dao;
import org.springframework.stereotype.Repository;
import zy.healthy.domain.UserPO;
import zy.healthy.util.TkMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
@Repository
public interface UserDAO extends TkMapper<UserPO> {
}
在service中就能调用了。
如果你的tk-mapper 有各种错误 可以看我总结的几点错误集锦。我遇到过的错误及解决方法。
https://blog.csdn.net/finalheart/article/details/89405704
参考:https://github.com/alibaba/jetcache/wiki/Config_CN