我现在想做这样一个事情,数据库里一张表中有pin1~pin35这么多个字段,我想把每个字段去重后以{pin1:[],pin2:[]....}的形式返回给前端,使用SpringBoot请给我写个详细的例子,从实体类到mapper到mapper.xml到service到controller,谢谢
时间: 2024-04-15 19:27:20 浏览: 124
当你的表中有许多字段时,手动编写getter和setter方法会变得很麻烦。为了简化代码,我们可以使用Java反射来动态获取类的字段信息。下面是一个详细的例子,涵盖了从实体类到controller的整个流程。
首先,创建一个实体类 `PinData`,其中包含了所有的 `pin` 字段:
```java
public class PinData {
private Map<String, List<String>> pinValues;
public PinData() {
pinValues = new HashMap<>();
}
public Map<String, List<String>> getPinValues() {
return pinValues;
}
public void setPinValues(Map<String, List<String>> pinValues) {
this.pinValues = pinValues;
}
}
```
接下来,创建一个 `PinDataMapper` 接口,在这个接口中定义对数据库的操作:
```java
@Mapper
public interface PinDataMapper {
List<String> getDistinctValues(String column);
@Select("SELECT DISTINCT ${column} FROM your_table_name")
List<String> getAllDistinctValues(@Param("column") String column);
}
```
然后,在 `resources` 目录下创建一个 `mapper` 文件夹,并创建一个 `PinDataMapper.xml` 文件,文件内容如下:
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.PinDataMapper">
<resultMap id="PinResultMap" type="java.lang.String">
<id column="value" property="value"/>
</resultMap>
<select id="getDistinctValues" resultMap="PinResultMap">
SELECT DISTINCT #{column} AS value
FROM your_table_name
</select>
</mapper>
```
接下来,创建一个 `PinDataService` 类,实现对数据库操作的逻辑:
```java
@Service
public class PinDataService {
private final PinDataMapper pinDataMapper;
public PinDataService(PinDataMapper pinDataMapper) {
this.pinDataMapper = pinDataMapper;
}
public PinData getAllDistinctValues() {
PinData pinData = new PinData();
Class<PinData> pinDataClass = PinData.class;
try {
Field[] fields = pinDataClass.getDeclaredFields();
for (Field field : fields) {
if (field.getName().startsWith("pin")) {
String columnName = field.getName().toUpperCase();
List<String> values = pinDataMapper.getDistinctValues(columnName);
pinData.getPinValues().put(columnName, values);
}
}
} catch (Exception e) {
// 处理异常
}
return pinData;
}
}
```
最后,创建一个 `PinDataController` 类,处理前端请求:
```java
@RestController
@RequestMapping("/pin-data")
public class PinDataController {
private final PinDataService pinDataService;
public PinDataController(PinDataService pinDataService) {
this.pinDataService = pinDataService;
}
@GetMapping("/distinct-values")
public PinData getAllDistinctValues() {
return pinDataService.getAllDistinctValues();
}
}
```
这样,当你访问 `/pin-data/distinct-values` 接口时,将会返回一个包含每个字段去重后的结果的 `PinData` 对象。
请注意,上述代码中的 `your_table_name` 需要替换为你实际的表名。另外,你还需要配置好数据库连接和MyBatis的相关配置,以确保代码能够顺利运行。
希望这个例子对你有帮助!如果你有任何疑问,请随时提出。
阅读全文