合并之前 先将master分支的代码合并到自己分支上 解决了冲突后 再进行提交!
参数统一放在body传输,只有一个id,使用IdIVO;
整体参数允许restful风格,参数大于三个,使用对象进行传输;
接口url最前面是系统区分 /yywh/news/article/save;
每个接口对应一组入参IVO和出参OVO
@FeignClient("jjjj-dd-j")
@Api(tags="用户接口")
public interface UserClient(){
}
用于增删改
@ApiOperation("删除用户")
@PostMapping(value="/zh/user/delete")
Result delete(@ApiParam @RequestBody IdIVO idIVO);
@ApiOperation("批量添加用户")
@PostMapping(value="/zh/user/addList")
Result addList(@ApiParam @RequestBody List<UserIVO> userIVOList);
@RestController
public class DemoController extends BaseController implements DemoClient{
public Result<UserOVO> getById(@Valid @RequeseBody IdIVO idIVO){
return null;
}
}
涉及事务的必须添加事务
@Transactional(rollbackFor=Exception.class)
public Result<Object> addUser(UserIVO userIVO){
}
复杂业务处理方法上写明代码处理主要逻辑,并在开发步骤注明主要步骤
特性分支 为用户新功能需求开发使用
开发测试,bug修复
发布生产环境的分支
与生产环境代码版本保持一致
不做编码,版本更新到生产测试环境没问题后,将release合并到本分支
生产环境遇到问题需要及时处理。
@ApiOperation(value="链式编程修改新闻")
@PostMapping("/updateByChain")
public R update(
@ApiParam(value = "修改文章入参")
@RequestBody ArticleUpdateInfoDTO param
) {
boolean result = articleService.lambdaUpdate()
.likeRight(ArticleEntity::getContent, param.getContent())
.set(ArticleEntity::getId, param.getId())
.update();
if (result) {
return R.ok().message("修改成功");
} else {
return R.error().message("修改失败");
}
}
场景:读写分离的场景,查询数据在一个数据库,写入数据在另外一个库,在一个项目里面配置多个数据源可以自行切换
QueryWrapper<AccountEntity> wrapper=new QueryWrapper<>();
wrapper.like("userName","li").lt("age",2);
List<AccountEntity> userList = accountMapper.selectList(wrapper);
// 2. 姓名为黄姓,且年龄大于等于20,小于等于40,且email字段不为空
wrapper.likeRight("name","黄").between("age",20,40).isNotNull("email");
//3、姓名为黄姓,或者年龄大于等于40,按照年龄降序排列,年龄相同则按照id升序排列
wrapper.likeRight("name","黄").or().ge("age",40).orderByDesc("age").orderByAsc("id");
// 4.创建日期为2021年3月22日,并且直属上级的名字为李姓
// date_format(create_time,'%Y-%m-%d') = '2021-03-22' AND manager_id IN (SELECT id FROM user WHERE name like '李%')
wrapper.apply("date_format(create_time,'%Y-%m-%d') = {0}","'2021-03-22'")
.inSql("manage_id","SELECT id FROM user WHERE name like '李%'");
// 5. 名字为王姓,并且(年龄小于40,或者邮箱不为空)
// name like '王%' AND (age < 40 OR email is not null)
wrapper.likeRight("name","王").and(q->q.lt("age",40).or().isNotNull("email"));
// 6. 名字为王姓,或者(年龄小于40并且年龄大于20并且邮箱不为空)
wrapper.likeRight("name","王").or(
q->q.lt("age",40)
.gt("age",20)
.isNotNull("email")
);
// 7. (年龄小于40或者邮箱不为空) 并且名字为王姓
//看不懂
// (age < 40 OR email is not null) AND name like '王%'
wrapper.nested(q -> q.lt("age", 40).or().isNotNull("email"))
.likeRight("name", "王");
// 8. 年龄为30,31,34,35
wrapper.in("age", Arrays.asList(30,31,34,35));
//或
wrapper.inSql("age","30,31,34,35");
// 9. 年龄为30,31,34,35, 返回满足条件的第一条记录
wrapper.in("age",Arrays.asList(30,31,34,35)).last("LIMIT 1");
// 10. 只选出id, name 列 (QueryWrapper 特有)
wrapper.select("id","name");
// 11. 选出id, name, age, email, 等同于排除 manager_id 和 create_time
// 当列特别多, 而只需要排除个别列时, 采用上面的方式可能需要写很多个列, 可以采用重载的select方法,指定需要排除的列
//过于复杂
QueryWrapper<AccountEntity> wrapper1=new QueryWrapper<AccountEntity>();
Map<String,Object> param1=new HashMap<>();
param1.put("age",40);
param1.put("name",null);
wrapper1.allEq(param1);
List<AccountEntity> userList1 = accountMapper.selectList(wrapper1);
userList.forEach(System.out::println);
支持lambda表达式,不用像普通条件构造器,以字符串指定列名,直接以实体类的方法引用来指定列。
//Lambda构造器
LambdaQueryWrapper<AccountEntity> wrapper2=new LambdaQueryWrapper<>();
wrapper2.like(AccountEntity::getUserName,"沈").lt(AccountEntity::getId,2);
List<AccountEntity> userList4 = accountMapper.selectList(wrapper2);
userList4.forEach(System.out::println);
LambdaQueryChainWrapper<AccountEntity> chainWrapper=new LambdaQueryChainWrapper<>();
List<AccountEntity> list = chainWrapper.like(AccountEntity::getId, 33).eq(AccountEntity::getUserName, "lisi").list();
list.forEach(System.out::println);
AccountEntity a=new AccountEntity();
a.setId("333");
a.setUserName("xiao");
a.setGroupName("hhhh");
accountMapper.updateById(a);
//根据实体类和条件构造器进行修改
AccountEntity user=new AccountEntity();
LambdaUpdateWrapper<AccountEntity> wrapper3=new LambdaUpdateWrapper<>();
wrapper3.between(AccountEntity::getId,200,333).likeRight(AccountEntity::getUserRealName,"夏");
int count = accountMapper.update(user, wrapper3);
LambdaUpdateChainWrapper<AccountEntity> wrapper4=new LambdaUpdateChainWrapper<>(accountMapper);
wrapper4.likeRight(AccountEntity::getGroupName,"zz")
.set(AccountEntity::getId,"cc")
.update();
@Select("select * from user")
List<User> selectRaw();p