mybatis中Mapper层除了使用xml文件外的多种方法

记得以前使用mybatis都会对应一个.xml动态sql的方式来实现相应功能,而最近lz在做的一个项目为了同事保持一致,尽可能的都用了注解的方式来完成。原本以为注解有局限性不会完整太复杂的sql,但是到了现在回想一下,好像也没什么没有解决不了的问题。在此就记录一下几种写法吧,以后忘了的话可以看看,大家也可以学习一下。lz不知道这几种方法的弊端,所以还请知情大神多多指教。其实后来好像听说就流行这样的,叫无配置文件注解版。

@Select("SELECT * FROM users WHERE id = #{id}")
	@Results({
		@Result(property = "userSex",  column = "user_sex", javaType = UserSexEnum.class),
		@Result(property = "nickName", column = "nick_name")
	})
	UserEntity getOne(Long id);
/**
	 * 关联查询
	 * @param Id
	 * @return
	 */
	@SelectProvider(type = StopsMapperProvider.class, method = "getStopsById")
	@Results({ @Result(id = true, column = "id", property = "id"),
			@Result(column = "id", property = "properties", many = @Many(select = "com.nature.mapper.PropertyMapper.getPropertyListByStopsId", fetchType = FetchType.EAGER))

	})
	public Stops getStopsById(String Id);
@UpdateProvider(type = StopsMapperProvider.class, method = "updateStopsByFlowIdAndName")
	public int updateStopsByFlowIdAndName(ThirdFlowInfoStopVo2 stopVo);


public String updateStopsByFlowIdAndName(ThirdFlowInfoStopVo2 stopVo) {
		String sqlStr = "";
		SQL sql = new SQL();
		sql.UPDATE("table");
		Date endTime = stopVo.getEndTime();
		Date startTime = stopVo.getStartTime();
		String name = stopVo.getName();
		String state = stopVo.getState();
		String flowId = stopVo.getFlowId();
		 if (null != endTime) {
             sql.SET("stop_time = " + Utils.addSqlStr(DateUtils.dateTimeToStr(endTime)));
         }
		 if (StringUtils.isNotBlank(state)) {
             sql.SET("state = " + Utils.addSqlStr(state));
         }
         if (null != startTime) {
             sql.SET("start_time = " + Utils.addSqlStr(DateUtils.dateTimeToStr(startTime)));
         }
		sql.WHERE("fk_flow_id = " + Utils.addSqlStr(flowId));
		sql.WHERE("name = " + Utils.addSqlStr(name));
		sqlStr = sql.toString() + ";";
		return sqlStr;
	}
@Select("<script>" +
            "select id from flow_sotps_groups where enable_flag = '1' and group_name in " +
            "<foreach item='groupName' index='index' collection='group_name' open='(' separator=', ' close=')'>" +
                "#{groupName}" +
            "</foreach>" +
        "</script>")
	List<StopGroup> getStopGroupByName(@Param("group_name") List<String> groupName);
  @Select({
            "<script>",
            "select * ",
            "from flow_info ",
            "where id in",
            "<foreach collection='ids' item='id' open='(' separator=',' close=')'>",
            "#{id}", "</foreach>", "</script>"})
    @Results({
		@Result(id = true, column = "id", property = "id"),
		@Result(column = "fk_flow_id", property = "flow", one = @One(select = "com.nature.mapper.FlowMapper.getFlowById", fetchType = FetchType.EAGER)),
    })
    public List<FlowInfoDb> getFlowInfoByIds(@Param("ids") List<String> ids);

好了,常用的也就这几种吧,大家可以看看,有问题还请大神多多指教!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值