一、代碼生成器
代碼生成器--》jeecgOneGUI
配置文件:resource/jeecg/jeecg_config.properties,修改目標生成的路徑和包名
數據庫連接:resource/jeecg/jeecg_database.properties,改數據庫連接
生成內容:
(1)、后端:生成數據庫表對應的實體,生成實體的增刪改查相關接口(主要利用mybatis-plus自帶封裝的方法)
(2)、前端:生成的vue文件,功能類似用戶管理,有數據列表展示和記錄的增刪改查
一、mybatis-plus
1、類的封裝
服務類繼承了IService,
接口類繼承了ServiceImpl,implements了服務類
2、mybatis-plus的方法(常用):
新增:save(),
更新:updateById(),
查詢(+查詢器):getById()、list();getOne();
刪除:removeById()
分頁:page(page, queryWrapper);
3、實體類,可以set或者get屬性。(代碼生成器生成的實體類,會對表中字段名稱進行修改,會將下划線改成駝峰命名)
疑問:接口獲取參數對象:OperatStaff operatStaff或者@RequestBody OperatStaff operatStaff區別?
4、接口請求方式:
查詢:get
新增:post
編輯:put
刪除:delete
5、查詢器:
示例1:普通查詢器-查詢
public Result<?> queryPageQuery(OperatStaff operatStaff,HttpServletRequest req) { QueryWrapper<OperatStaff> queryWrapper = QueryGenerator.initQueryWrapper(operatStaff, req.getParameterMap());(參數1:實體和參數值,參數2:所有參數和值) List<OperatStaff> list = operatStaffService.list(queryWrapper); return Result.ok(list); }
示例2:普通查詢器-分頁
public Result<?> queryPageList(OperatStaff operatStaff,Integer pageNo,Integer pageSize,HttpServletRequest req) { QueryWrapper<OperatStaff> queryWrapper = QueryGenerator.initQueryWrapper(operatStaff, req.getParameterMap()); Page<OperatStaff> page = new Page<OperatStaff>(pageNo, pageSize);(參數1:第幾頁,參數2:每頁數量) IPage<OperatStaff> pageList = operatStaffService.page(page, queryWrapper); return Result.ok(pageList); }
示例3:普通查詢器-復雜查詢+日期過濾+排序
public Result<?> queryPageQuery(String starttime,String endtime,String pscode,String outputcode,String monitorid) { QueryWrapper<OperatCollect> queryWrapper = new QueryWrapper<OperatCollect>(); queryWrapper.ge("start_time", DateUtil.strToDate(starttime,"yyyy-MM-dd HH:mm:ss")); queryWrapper.le("start_time",DateUtil.strToDate(endtime,"yyyy-MM-dd HH:mm:ss")); queryWrapper.eq(oConvertUtils.isNotEmpty(pscode),"pscode",pscode); queryWrapper.eq(oConvertUtils.isNotEmpty(outputcode),"outputcode",outputcode); queryWrapper.eq(oConvertUtils.isNotEmpty(monitorid),"monitorid",monitorid); queryWrapper.orderByAsc("start_time");//排序 //queryWrapper.apply(oConvertUtils.isNotEmpty(startdate)," start_time>='"+startdate+"'"); //queryWrapper.apply(oConvertUtils.isNotEmpty(endtime)," start_time<='{0}'",endtime); List<OperatCollect> pageList = operatCollectService.list(queryWrapper); return Result.ok(pageList); }
示例4:蘭博查詢器
LambdaQueryWrapper<SysRolePermission> query = new LambdaQueryWrapper<SysRolePermission>() eq(SysRolePermission::getPermissionId, permissionId) .eq(SysRolePermission::getRoleId,roleId); SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query);
LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>(); query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); query.orderByAsc(SysPermission::getSortNo); List<SysPermission> list = sysPermissionService.list(query);
LambdaQueryWrapper和QueryWrapper區別:
QueryWrapper 的列名匹配使用的是 “數據庫中的字段名(一般是下划線規則)”
LambdaQueryWrapper 的列名匹配使用的是“Lambda的語法,偏向於對象”,兼容性更好
炫技示例:
OperatCompany oc=this.operatCompanyService.getOne(new LambdaQueryWrapper<OperatCompany>().eq(OperatCompany::getName, username)); if (oc == null) return Result.error("用戶不存在!"); String passwordEncode = PasswordUtil.encrypt(oc.getId(), password, oc.getSalt()); operatCompanyService.update(new OperatCompany().setPassword(passwordEncode),new QueryWrapper<OperatCompany>().eq(oConvertUtils.isNotEmpty(username),"name",username));