记得以前使用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);
好了,常用的也就这几种吧,大家可以看看,有问题还请大神多多指教!