mybatis 中<if>标签bool值类型为false判断

本文分享了在MyBatis中使用动态SQL解决查询难题的经验,特别是如何根据不同条件灵活选择查询方式,避免了重复代码,提高了开发效率。
部署运行你感兴趣的模型镜像

对百度的某些文章深恶痛绝, 只是ctrl+c和ctrl+v。并且还不能解决问题。

昨天实现一个功能,根据文章的id或者别名查找文章。

起初采用mybatis的Example进行查询,对参数artName进行判断,如果是纯数字就byId查询,否则就by别名。由于查询文章的同时,需要关联查询文章分类标签,所以选择采用select语句映射的方式查询,但又不想写两个查询方法,就使用了mybatis中动态sql。

/**
 * 查询文章
 * @param artName id 或 别名
 * @param byId 如果是 true 则按照id查询
 *             否则 按照别名查询
 * @return
 */
public Article selectByArtName(@Param(value = "artName") String artName,
                          @Param(value = "byId") Boolean byId);

mapper中定义了一个方法,有artName和byId两个参数,artName 表示id 或 别名,byId表示是否通过id查询。
对byId Boolean值进行判断时,出现false值无效的情况,在百度了一圈发现,普遍采用

<if test="byId != null">
    a.id = #{artName}
</if>

这种方式,当byId=true时正常执行,但为false时不生效。后采用标签

<choose>
	<when test="byId">
		a.id = #{artName}
	</when>
	<otherwise>
		a.alias = #{artName}
	</otherwise>
</choose>

byId本身是bool值,不用进行判断。
注意: byId不用加#{},不然false也会无效,如果加了#{}, 在与其他值进行比较时,
如:#{byId} == true 会报空指针错误,如果写成#{byId} == ‘true’ 会报Linkhashmap无法转换成String类型错误。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

/// <summary> /// list[]轮次子表 /// </summary> public record round_item:base_model { [Column(IsPrimary = true, IsIdentity = true)] public int round_item_id { get; set; } [Remark(1, "赛事轮次", true, "round", "name", "round_id")] public int round_id { get; set; } /// <summary> /// 队伍1 /// </summary> public int from_team_id { get; set; } /// <summary> /// 队伍2 /// </summary> public int to_team_id { get; set; } /// <summary> /// 球队Id /// </summary> [Remark(1, "球队表", true, "team", "name", "team_id")] public int team_id { get; set; } /// <summary> /// 人员ID /// </summary> [Remark(1, "人员", true, "person", "name", "person_id")] public int person_id { get; set; } /// <summary> /// 已赛场次 /// </summary> public int from_played { get; set; } /// <summary> /// 胜利场次 /// </summary> public int from_wins { get; set; } /// <summary> /// 平局场次 /// </summary> public int from_draws { get; set; } /// <summary> /// 负于对手场次 /// </summary> public int from_losses { get; set; } /// <summary> /// 联赛积分 /// </summary> public int from_points { get; set; } /// <summary> /// 得分/进球 /// </summary> public int from_goals_for { get; set; } /// <summary> /// 失分/失球 /// </summary> public int from_goals_against { get; set; } /// <summary> /// 净胜分/净胜球 /// </summary> public int from_goal_diff { get; set; } /// <summary> /// 比赛id /// </summary> [Remark(1, "比赛", true, "match", "name", "match_id")] public int match_id { get; set; } /// <summary> /// 已赛场次 /// </summary> public int to_played { get; set; } /// <summary> /// 联赛积分 /// </summary> public int to_points { get; set; } /// <summary> /// 得分/进球 /// </summary> public int to_goals_for { get; set; } /// <summary> /// 失分/失球 /// </summary> public int to_goals_against { get; set; } /// <summary> /// 净胜分/净胜球 /// </summary> public int to_goal_diff { get; set; } /// <summary> /// 赢 /// </summary> public int to_win { get; set; } /// <summary> /// 平 /// </summary> public int to_draw { get; set; } /// <summary> /// 输 /// </summary> public int to_loses { get; set; } /// <summary> /// 时间 /// </summary> public DateTime time { get; set; } public bool is_show { get; set; } /// <summary> /// 状态 /// </summary> [Remark(1, "状态", true, "status", "name", "stauts_id")] public int status { get; set; } /// <summary> /// 排序 /// </summary> public int sort { get; set; } = 1; }/// <summary> /// 查询 /// </summary> /// <param name="page"></param> /// <param name="size"></param> /// <returns></returns> [HttpGet] [AllowAnonymous] public IActionResult List([FromQuery]Dictionary<string, string> more,string? search, match_status? status,int? venue_id,int? leaguecategory_id,string? phone,int page = 1, int size = 10) { var _data = _fsql.Select<tournament>(); if (!string.IsNullOrEmpty(search)) { //修复转码问题:使用URL解码后的搜索词 string decodedSearch = System.Web.HttpUtility.UrlDecode(search); _data = _data.Where(a => a.name.Contains(decodedSearch)); } if (status!= null) { _data = _data.Where(a => a.status == (int)status); } if (venue_id != null) { _data = _data.Where(a => a.postion == venue_id); } if (leaguecategory_id != null) { _data = _data.Where(a => a.category_id == leaguecategory_id); } //手机号筛选--查询指定手机号用户参加的赛事 if (!string.IsNullOrEmpty(phone)) { //通过手机号找到用户所属的球队 var userTeam = _fsql.Select<person>() .Where(p => p.phone == phone.Trim()).First(); if (userTeam == null) { return Ok(userTeam.GetRetObject()); } // 如果用户有关联的赛事ID,则直接筛选 if (userTeam.tournament_id!= null) { _data = _data.Where(t => t.tournament_id == userTeam.tournament_id); } else { // 用户没有关联任何赛事,返回空列表 return Ok(new List<tournament>().GetRetObject()); } //使用team_id进行关联查询 //var userTeamMatches = _fsql.Select<match>() // .Where(m => m.home_team_id == userTeam.team_id || m.away_team_id == userTeam.team_id).ToList(); //if (!userTeamMatches.Any()) //{ // return Ok(userTeamMatches.GetRetObject()); //} //// 获取赛事ID列表 //var tournamentIds = userTeamMatches.Select(m => m.tournament_id).Distinct().ToList(); //var tournaments = new List<tournament>(); //if (tournamentIds.Any()) //{ // tournaments = _fsql.Select<tournament>() // .Where(t => tournamentIds.Contains(t.tournament_id)) // .ToList(); //} //// 筛选赛事 //_data = _data.Where(t => tournamentIds.Contains(t.tournament_id)); } _data.public_select(more, "name", "create_time"); var list=_data.OrderByDescending(t => t.create_time).Page(page, size).ToList(); return Ok(list.GetRetEnumerable()); }轮次list子表加了一个person_id,通过id查询人员表参加赛事的手机号,如何加呢?
最新发布
10-23
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值