欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【项目实战】使用 MyBatis Plus 、MybatisX 代码生成工具,自定义 SQL 查询数据的项目实战

【项目实战】使用 MyBatis Plus 、MybatisX 代码生成工具,自定义 SQL 查询数据的项目实战

2024/10/25 22:23:27 来源:https://blog.csdn.net/2303_76696898/article/details/142924279  浏览:    关键词:【项目实战】使用 MyBatis Plus 、MybatisX 代码生成工具,自定义 SQL 查询数据的项目实战

在项目开发过程中,高效地查询数据库数据是一项关键任务。本文将介绍如何使用 MyBatis Plus 自定义 SQL 查询语句来获取特定的数据,以满足项目中的实际需求。

一、项目背景

在高校办事大厅数据分析大屏项目中,需要从数据库中获取个人事务中心的相关数据,包括事务 ID 和状态信息,以及特定事务 ID 的热门计数。为了实现这些功能,我们采用了 MyBatis Plus 框架,并通过自定义 SQL 查询语句来获取所需的数据。

二、技术选型

  • MyBatis Plus:MyBatis Plus 是一个 MyBatis 的增强工具包,在 MyBatis 的基础上进行了扩展,提供了更多便捷的功能,如通用 CRUD 操作、分页插件、代码生成器等。它简化了数据库操作,提高了开发效率。

三、具体实现

1. MyBatisX代码生成

步骤一:安装插件

步骤二:右键单击需要查询的表格,再点击MybatisX-Generator项

步骤三:选择代码生成模块包位置

步骤四:配置代码生成项如图

步骤五:最后将generate包中的代码类分别移到Controller包、Service包、Mapper包下,并且修正引用类即可。

2. Mapper 层定义

首先,在 Mapper 接口中定义了三个查询方法,分别用于获取个人事务中心的事务 ID 和状态信息、仅获取事务 ID 以及获取特定事务 ID 的热门计数。

@Mapper
public interface OshPersonalAffairsCenterMapper extends BaseMapper<JSONObject> {List<JSONObject> selectPersonalAffairsIdAndStatus();List<JSONObject> selectPersonalAffairsId();Long selectHotCount(@Param("affairId") String affairId);
}

这里使用了@Mapper注解将接口标记为 MyBatis 的 Mapper 接口,以便在运行时自动生成实现类。同时,resultType被设置为com.alibaba.fastjson.JSONObject,表示查询结果将以 JSON 对象的形式返回。

3. SQL 语句定义

在 Mapper 的 XML 文件中,定义了三个 SQL 查询语句:

<select id="selectPersonalAffairsIdAndStatus" resultType="com.alibaba.fastjson.JSONObject">SELECT DISTINCT process_type_code,status from osh_personal_affairs_center
</select>
<select id="selectPersonalAffairsId" resultType="com.alibaba.fastjson.JSONObject">SELECT DISTINCT process_type_code from osh_personal_affairs_center
</select>
<select id="selectHotCount" resultType="java.lang.Long" parameterType="java.lang.String">SELECT count(process_type_code) from osh_personal_affairs_center where process_type_code = #{affairId}
</select>

这三个查询语句分别用于获取不同的数据:

  • selectPersonalAffairsIdAndStatus:获取个人事务中心的不同事务 ID 和对应的状态。
  • selectPersonalAffairsId:仅获取个人事务中心的不同事务 ID。
  • selectHotCount:根据传入的事务 ID,获取该事务 ID 在数据库中的出现次数,即热门计数。

4. Service 层实现

在 Service 实现类中,通过调用 Mapper 层的方法来实现具体的业务逻辑。

@Service
public class OshPersonalAffairsCenterServiceImpl extends ServiceImpl<OshPersonalAffairsCenterMapper, JSONObject>implements OshPersonalAffairsCenterService {@ResourceOshPersonalAffairsCenterMapper oshPersonalAffairsCenterMapper;// 获取当前状态列表@Overridepublic List<DynamicsResVo> getCurrentStatus() {List<JSONObject> jsonObjects = oshPersonalAffairsCenterMapper.selectPersonalAffairsIdAndStatus();List<DynamicsResVo> contentRespVOS = new ArrayList<>();Set<String> uniqueTransactions = new HashSet<>();for (JSONObject jsonObject : jsonObjects) {String transaction = jsonObject.getString("process_type_code");if (!uniqueTransactions.contains(transaction)) {DynamicsResVo respVO = new DynamicsResVo();respVO.setTransaction(transaction);int status = jsonObject.getInteger("status");String statusText;switch (status) {case 0:if (!checkForHigherStatus(jsonObjects, transaction, 1) &&!checkForHigherStatus(jsonObjects, transaction, 2)) {statusText = "已处理";respVO.setStatus(statusText);}break;case 1:if (!checkForHigherStatus(jsonObjects, transaction, 2)) {statusText = "待处理";respVO.setStatus(statusText);}break;default:statusText = "未知状态";}if (respVO.getStatus()!= null) {contentRespVOS.add(respVO);uniqueTransactions.add(transaction);}}}return contentRespVOS;}// 检查是否存在更高优先级的状态private boolean checkForHigherStatus(List<JSONObject> jsonObjects, String transaction, int higherStatus) {for (JSONObject jsonObject : jsonObjects) {if (jsonObject.getString("process_type_code").equals(transaction) && jsonObject.getInteger("status") == higherStatus) {return true;}}return false;}// 获取热门图表数据@Overridepublic List<ChartResVo> getHotChart() {List<JSONObject> jsonObjects = oshPersonalAffairsCenterMapper.selectPersonalAffairsId();List<ChartResVo> chartData = new ArrayList<>();for (JSONObject jsonObject : jsonObjects) {String affairId = jsonObject.getString("process_type_code");Long count = oshPersonalAffairsCenterMapper.selectHotCount(affairId);ChartResVo chartVo = new ChartResVo();chartVo.setTransaction(affairId);chartVo.setTimes(count);chartData.add(chartVo);}return chartData;}
}

getCurrentStatus方法中,首先调用selectPersonalAffairsIdAndStatus方法获取事务 ID 和状态信息的列表。然后,通过遍历列表,为每个不同的事务 ID 创建一个DynamicsResVo对象,并根据状态值设置对应的状态文本。同时,使用一个Set集合进行去重操作,确保每个事务 ID 只出现一次。

checkForHigherStatus方法中,遍历 JSON 对象列表,检查是否存在特定事务 ID 且状态为更高优先级的情况。

getHotChart方法中,先调用selectPersonalAffairsId方法获取事务 ID 列表,然后遍历列表,对于每个事务 ID,调用selectHotCount方法获取热门计数,并创建ChartResVo对象添加到结果列表中。

四、总结

通过使用 MyBatis Plus 自定义 SQL 查询语句,我们成功地实现了从数据库中获取特定数据的功能。这种方式灵活高效,可以根据项目的实际需求进行定制化的查询。在项目开发中,合理地运用 MyBatis Plus 的功能,可以大大提高开发效率,同时也能保证代码的可读性和可维护性。

希望本文能为大家在使用 MyBatis Plus 进行数据库查询时提供一些参考和帮助。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com