Mybatis的在sql语句中使用常量值或者枚举常量值注意事项

写法介绍

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=‘性别’,高级又好维护很多呢,觉得不错的点个赞吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值