crud程序员入门练习

wiki笔记

git

合并之前 先将master分支的代码合并到自己分支上 解决了冲突后 再进行提交!

接口文档设计规范

参数统一放在body传输,只有一个id,使用IdIVO;

整体参数允许restful风格,参数大于三个,使用对象进行传输;

接口url最前面是系统区分 /yywh/news/article/save;

每个接口对应一组入参IVO和出参OVO

Client定义

@FeignClient("jjjj-dd-j")
@Api(tags="用户接口")
public interface UserClient(){
}

post请求接口定义

用于增删改

根据id操作
@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);

Controller实现

@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){
    
}

复杂业务处理方法上写明代码处理主要逻辑,并在开发步骤注明主要步骤

流程规范

git代码分支

feature

特性分支 为用户新功能需求开发使用

develop

开发测试,bug修复

release

发布生产环境的分支

master

与生产环境代码版本保持一致

不做编码,版本更新到生产测试环境没问题后,将release合并到本分支

hotfix

生产环境遇到问题需要及时处理。

	@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("修改失败");
        }
    }

mp多数据源使用

场景:读写分离的场景,查询数据在一个数据库,写入数据在另外一个库,在一个项目里面配置多个数据源可以自行切换

MP实操

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方法,指定需要排除的列
        //过于复杂

allEq()方法

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表达式,不用像普通条件构造器,以字符串指定列名,直接以实体类的方法引用来指定列。

//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);
链式lambda表达式
LambdaQueryChainWrapper<AccountEntity> chainWrapper=new LambdaQueryChainWrapper<>();
        List<AccountEntity> list = chainWrapper.like(AccountEntity::getId, 33).eq(AccountEntity::getUserName, "lisi").list();
        list.forEach(System.out::println);

更新

1、根据入参主键进行更新
AccountEntity a=new AccountEntity();
        a.setId("333");
        a.setUserName("xiao");
        a.setGroupName("hhhh");
        accountMapper.updateById(a);
2、根据实体类进行更新
//根据实体类和条件构造器进行修改
        AccountEntity user=new AccountEntity();
        LambdaUpdateWrapper<AccountEntity> wrapper3=new LambdaUpdateWrapper<>();
        wrapper3.between(AccountEntity::getId,200,333).likeRight(AccountEntity::getUserRealName,"夏");
        int count = accountMapper.update(user, wrapper3);
//链式lambda条件构造器
        LambdaUpdateChainWrapper<AccountEntity> wrapper4=new LambdaUpdateChainWrapper<>(accountMapper);
        wrapper4.likeRight(AccountEntity::getGroupName,"zz")
                .set(AccountEntity::getId,"cc")
                .update();

自定义

1、注解方式
@Select("select * from user")
List<User> selectRaw();p
2、xml方式





你可能感兴趣的:(java开发基础,mp的一些写法)