Mybatis 升级 Mybatis Plus 重写 Mybatis Plus selectList,如果将参数传到 Mapp.xml 中
Mybatis 升级 Mybatis Plus
将实体做为条件参数 带到Mapp.xml 中的自定义SQL
Mybatis 写法
通过 pagehelper 进行分页
Entity
public class ActivityTracking implements Serializable {
private static final long serialVersionUID = -1794277981889967750L;
/**
*主健ID
*/
private String id;
/**
*行为类型编码
*/
private String typeCode;
/**
*行为类型名称
*/
private String typeName;
/**
*行为方式(Add、Update、Delete)
*/
private String activityMethodCode;
/**
*行为方式(新增、修改、删除)
*/
private String activityMethodName;
......get\set
}
Mapper
@Repository
public interface ActivityTrackingMapper {
/**
* 获取 日志列表
*
* @return
*/
List<ActivityTracking> list(ActivityTracking activityTracking);
}
Service
import com.github.pagehelper.PageInfo;
import com.vipsoft.api.base.entity.ActivityTracking;
import com.vipsoft.api.base.util.PageParam;
public interface IActivityTrackingService {
/**
* 获取 日志列表
*
* @return
*/
PageInfo list(PageParam pageParam, ActivityTracking activityTracking);
}
@Service
public class ActivityTrackingServiceImpl implements IActivityTrackingService {
/**
* 获取 日志列表
*
* @param pageParam
* @return
*/
@Override
public PageInfo list(PageParam pageParam, ActivityTracking activityTracking) {
PageHelper.startPage(pageParam);
List<ActivityTracking> activityTrackingList = trackingMapper.list(activityTracking);
return new PageInfo(activityTrackingList);
}
}
Mapper.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.vipsoft.api.base.bisiness.mapper.ActivityTrackingMapper">
<resultMap id="BaseResultMap" type="com.vipsoft.api.base.entity.ActivityTracking">
<id column="id" property="id" jdbcType="VARCHAR"/>
<result column="type_code" property="typeCode" jdbcType="VARCHAR"/>
<result column="type_name" property="typeName" jdbcType="VARCHAR"/>
<result column="activity_method_code" property="activityMethodCode" jdbcType="VARCHAR"/>
<result column="activity_method_name" property="activityMethodName" jdbcType="VARCHAR"/>
<result column="business_table" property="businessTable" jdbcType="VARCHAR"/>
<result column="business_table_key" property="businessTableKey" jdbcType="VARCHAR"/>
....
</resultMap>
<select id="list" resultType="com.vipsoft.api.base.entity.ActivityTracking">
select * from sys_activity_tracking
<where>
<if test="typeName != null and typeName != ''">
AND type_name = #{typeName,jdbcType=VARCHAR}
</if>
<if test="businessKey != null and businessKey != ''">
AND business_key = #{businessKey,jdbcType=VARCHAR}
</if>
</where>
</select>
</mapper>
Test
@SpringBootTest
public class DemoTest {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private IActivityTrackingService activityTrackingService;
@Test
void listTest() {
ActivityTracking activityTracking = new ActivityTracking();
activityTracking.setTypeName("A"); //将条件传到 Mapper.xml 中,构建SQL
PageParam pageParam = new PageParam();
pageParam.setPageNum(1);
pageParam.setPageSize(10);
PageInfo pageList = activityTrackingService.list(pageParam, activityTracking);
logger.info("List: {}", JSON.toJSON(pageList));
}
}
Mybatis Plus
Mybatis 不用自定义SQL的话,可以不用 Mapper.xml
Entity
不需要改变。如果使用框架方法,需要加上 @TableName、@TableId、@TableField 等属性
Mapper
//@Repository 使用 Mybatis Plus 可以不用 @Repository
public interface ActivityTrackingMapper extends BaseMapper<ActivityTracking> {
//page对应的 selectList 方法,所以 XML中的 select id 名称要写对
//自定义SQL.带分页
IPage<ActivityTracking> list(Page<ActivityTracking> page, String memberId);
}
Service
public interface IActivityTrackingService extends IService<ActivityTracking> {
//不需要定义接口,使用框架中的服务接口 => page
IPage<ActivityTracking> list(Page<ActivityTracking> page, String memberId);
}
@Service
public class ActivityTrackingServiceImpl extends ServiceImpl<ActivityTrackingMapper, ActivityTracking> implements IActivityTrackingService {
//重写框架的方法,不需要实现
@Autowired
private ActivityTrackingMapper trackingMapper;
//自定义
@Override
public IPage<ActivityTracking> list(Page<ActivityTracking> page, String memberId){
IPage<ActivityTracking> pageList = trackingMapper.list(page,memberId);
List<ActivityTracking> list=pageList.getRecords();
for (ActivityTracking item : list) {
if (list.size() == 1) {
item.setIsDefault(1);
}
item.setIsRegistrant(0);
if (item.getId().equals(memberId)) {
item.setIsRegistrant(1);
}
//计算年龄
if (ObjectUtil.isNotEmpty(item.getBirthday())) {
int age = DateUtil.ageOfNow(item.getBirthday());
item.setAge(age);
}
}
//如果佩戴人中一个默认的都没有,本人设为默认选中
if (list.size() > 0) {
boolean hasDefault = list.stream().anyMatch(item -> item.getIsDefault() != null && item.getIsDefault().intValue() == 1);
if (!hasDefault) {
list.stream().filter(item -> item.getIsRegistrant().intValue() == 1).forEach(item -> item.setIsDefault(1));
}
}
return pageList;
}
}
Mapper.xml
ew.entity.typeName
这步是重点。不这样写,取不到前面的参数
#{memberId,jdbcType=VARCHAR}
不要加 , jdbcType=VARCHAR 否则查不出来
<!-- 重写 selectList 这边的ID 不能写错,否则就不能重写框架的实现了 -->
<select id="selectList" resultType="com.vipsoft.api.base.entity.ActivityTracking">
select * from sys_activity_tracking
<where>
<if test="ew.entity.typeName != null and ew.entity.typeName != ''">
AND type_name = #{ew.entity.typeName,jdbcType=VARCHAR}
</if>
<if test="ew.entity.businessKey != null and ew.entity.businessKey != ''">
AND business_key = #{ew.entity.businessKey,jdbcType=VARCHAR}
</if>
</where>
</select>
<select id="list" resultType="com.vipsoft.api.base.entity.MemberFamily">
SELECT id,phone_no,real_name,birthday,gender,create_time,update_time,0 as is_default,is_deleted,status
from member AS er where er.id = #{memberId} and er.is_deleted= 0
union
SELECT id,phone_no,real_name,birthday,gender,create_time,update_time,is_default,is_deleted,status
from member_family AS ly where ly.member_id = #{memberId} and ly.is_deleted = 0
</select>
Test
@SpringBootTest
public class DemoTest {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private IActivityTrackingService activityTrackingService;
@Test
void plusListTest() {
// 这一步是重点。配合XML中的。ew.entity.typeName 取值
ActivityTracking activityTracking = new ActivityTracking();
activityTracking.setTypeName("A"); //将条件传到 Mapper.xml 中,构建SQL
QueryWrapper<ActivityTracking> queryWrapper = new QueryWrapper<>(activityTracking);
// 如果用自定义SQL.不能以这种形式传参,否则会报 org.apache.ibatis.ognl.NoSuchPropertyException: com.baomidou.mybatisplus.core.conditions.query.QueryWrapper.XXX
// queryWrapper.like("type_name", "A");
Page page = new Page(1, 10);
IPage pageList = activityTrackingService.page(page, queryWrapper);
logger.info("List: {}", JSON.toJSON(pageList));
}
}
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/18616924
分类:
JAVA
标签:
SpringBoot
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
2023-12-19 Word 文档怎么保留修改前和修改后的内容--审阅 修订
2022-12-19 大数据 - DWD&DIM 业务数据
2022-12-19 查看Windows系统 重启时间
2022-12-19 PPT 动画-多层旋转(圆角三角形)
2022-12-19 ScreenToGif 录屏转git图片
2022-12-19 PPT 做出动态路线动画
2012-12-19 ORACLE恢复删除表或表记录