写法介绍
1.枚举
'${@全路径名@枚举值.get属性()}',
则会解析出枚举值的属性常量值,放入sql语句中。
这里单引号’'是因为${}占位符只是把值给填充进去,
要表示字符串的话,加上单引号,不是字符串则不用加
2.常量
'${@全路径名@常量名}',会解析出常量值,放入sql语句中。
其实,方法、属性等也可以解析出来,就如同:类.静态属性、类.静态方法()。
应用场景
接下来我们来看看,使用这种方法的场景:当我们的字典表使用一个表,一般就需要两个值来确定一个到底这个字典是什么类型,所以这种方法维护型较高,当数据的值被改了可以整体快速改。
看看数据库表,类型就是type,而我们的value就是我们实际要拿的值。值得注意的是这种表结构需要单一type值下key是不能重复的。
代码实现步骤
1.首先是建springboot项目,然后导入以下pom依赖(lombok需要下插件)
<?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.3.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
2.编写配置文件
spring.datasource.username=root
spring.datasource.password=root3306
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mgmt?characterEncoding=utf8
3.分别创建三个类,实体类Dict,接口DictType,DictMapper
Java中接口的成员默认就是public static final,忘了的回头看看基础喔
public interface DictType {
String GENER="性别";
String HOBBY="爱好";
}
@Data
public class Dict {
//字典主键
private Integer dictId;
//字典类型
private String type;
//字典的键
private Integer key;
//字典标题
private String title;
//字典显示值
private String value;
}
import com.example.domain.Dict;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @Author chenxintao
* @Date 2021/5/21 15:44
* @Version 1.0
*/
@Mapper
@Repository
public interface DictMapper {
@Result(column = "dict_id",property ="dictId")
@Select("select * from sys_dict where type = '${@com.example.common.DictType@GENER}'")
List<Dict> findGenerDict();
}
3.编写测试代码:在springboot测试类里面编写
@SpringBootTest
class DemoApplicationTests {
@Autowired
DictMapper dictMapper;
@Test
void contextLoads() {
dictMapper.findGenerDict().forEach(System.out::println);
}
}
注意事项
首先要注意的是我们这个案例的${}外面的’'不能少,同时我们的还要注意编码问题,尤其是type就直接使用中文的情况,最友好的还是使用英文这样就能避免很多问题。
操作完是不是觉得直接使用type=‘性别’,高级又好维护很多呢,觉得不错的点个赞吧。