当前位置: 首页 > news >正文

外贸网站建设费用移动电子商务网站建设研究

外贸网站建设费用,移动电子商务网站建设研究,搭建公司介绍网站,wordpress用七牛核心功能 P5 条件构造器 mybatisplus支持各种复杂的where条件#xff0c;可以满足日常开发的所有需求 wrapper就是条件构造器,wrapper就是顶层的#xff0c; 示例#xff1a; 查询出名字带0#xff0c;存款大于等于1000的人的id,username,info,balance字段 Testvoid te…核心功能 P5 条件构造器 mybatisplus支持各种复杂的where条件可以满足日常开发的所有需求 wrapper就是条件构造器,wrapper就是顶层的 示例 查询出名字带0存款大于等于1000的人的id,username,info,balance字段 Testvoid testQueryWrapper() {// 1.构建查询条件可以wrapper.实现也可以下方的链式编程QueryWrapperUser wrapper new QueryWrapperUser().select(id, username, info, balance).like(username, o).ge(balance, 1000);// 2.查询ListUser users userMapper.selectList(wrapper);users.forEach(System.out::println);}更新用户名为jack的用户的余额为2000 Testvoid testQueryWrapper() {// 1.构建查询条件可以wrapper.实现也可以下方的链式编程QueryWrapperUser wrapper new QueryWrapperUser().select(id, username, info, balance).like(username, o).ge(balance, 1000);// 2.查询ListUser users userMapper.selectList(wrapper);users.forEach(System.out::println);}P6 核心功能-自定义SQL 什么时候自定义SQL构造where语句时可以利用mybatis plus构造复杂的where条件然后自定义SQL语句中剩下的部分。 例如需要将id在指定范围的用户的余额扣减指定值可以怎么做 手写SQL: update id updateBalanceByIdsUPDATE userSET balance balance - #{amount}WHERE id INforeach collectionids separator, itemid open( close)#{id}/foreach /update以上用mp实现如下但是将sql写在了业务层中不提倡 ListLong ids List.of(1L, 2L, 4L); UpdateWrapperUser wrapper new UpdateWrapperUser().setSql(balance balance - 200).in(id, ids); userMapper.update(null, wrapper);这里就用到自定义SQL即使用mybatisplus构建where条件但是更新查询的sql语句还是自己在mapper中写然后将条件传递到mapper中去即可。例如下面的步骤 基于wrapper构建where条件 Testvoid testMyCustomSqlUpdate() {// 自定义sql的实现ListLong ids List.of(1L, 2L, 4L);int amount 200;// 定义条件QueryWrapperUser wrapper new QueryWrapperUser().in(id, ids);// 调用自定义的方法userMapper.updateBalanceByIds(wrapper, amount);}在mapper方法参数中用param注解声明wrapper变量名必须是ew void updateBalanceByIds(Param(Constants.WRAPPER) QueryWrapperUser wrapper, Param(amount) int amount); 自定义sql update idupdateBalanceByIdsUPDATE user SET balance balance - #{amount} ${ew.customSqlSegment}/updateP7 核心功能-Iservice接口基本用法 接口基本上还是增删改查但是很多基本用法例如批量新增 批量删除等操作 业务层我们知道要定义接口并实现如果接口继承了mybatisplus的IService但是没有实现里面的方法也是不行的所以mybatis plus也提供了实现类ServiceImpl 例如接口的继承public interface IUserService extends IServiceUser ,IService中指定泛型 例如实现类的继承需要加上两个ServiceImplM extends BaseMapper, T extends Object P8 核心功能-IService开发基础业务接口 例如 这里介绍一个知识点在controller中注入service之前是使用autowired这里不用这种注解spring中推荐使用构造函数例如下面 private final IUserService userService;public UserController(IUserService userService) {this.userService userService; }但是上述方法中如果有多个成员变量名则还要继续增加不是很方便 因此可以使用lombok注解不是全参构造而是RequireArgsConstructor同时给service加上final表名是一个常量则在类初始化过程中就必须会完成变量的初始化。 在保存新增的时候要先考虑mybatis plus有没有实现方法。 实现新增接口中可能会遇到属性拷贝的问题这里介绍一下通过源码可知BeanUtils.copyProperties通过java反射将类中当前属性字段对应的内容复制到另外一个类中属性必须具有get/set方法不然拷贝值为null。 当然这里遇到新增时拷贝的user中info为空的原因不是因为没有get、set方法而是因为User实体类中的info属性的注解使用了类型转换器JacksonTypeHandler.class被指定为类型转换器这意味着该字段的数据将通过Jackson库进行序列化和反序列化。Jackson库通常用于处理JSON数据因此这个注解可能用于将数据库中的JSON格式数据与Java对象进行映射和转换。例如在数据库中存储的信息为{age: 24, intro: 英文老师, gender: female}所以新增的时候也要传入json格式数据。 例如 import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(userFormDTO, user);P9 核心功能-IService开发复杂业务接口 例如扣减用户余额不能直接写sql对用户进行扣减要充分考虑各种状态例如用户状态用户余额等。 业务实现示例 OverrideTransactionalpublic void deductBalance(Long id, Integer money){// 获取当前用户User user this.getById(id);// 判断当前状态if (user null || user.getStatus() UserStatus.FROZEN){throw new RuntimeException(用户状态异常);}// 检查余额if (user.getBalance() money){throw new RuntimeException(用户余额不足);}// 实现mapper方式userMapper.deductBalance(id, money);}P10 核心功能-IService的Lambda方法 lambda的查询 例如实现一个根据复杂条件查询用户的接口查询条件为 name可以为空 status可以为空 minBalance最小余额可以为空 maxBalance最大余额可以为空 实现 controller实现一个请求实体对象接受请求并在业务层处理最终返回用户信息也用VO实体封装 例如controller的实现 ApiOperation(根据复杂条件查询用户)GetMapping(/list)public ListUserVO queryUsers(UserQuery userQuery){// 将请求传过来的实体中的信息获取传到业务层ListUser users userService.queryUsers(userQuery.getName(), userQuery.getStatus(), userQuery.getMinBalance(), userQuery.getMaxBalance());return BeanUtil.copyToList(users, UserVO.class);}使用lamdaquery可直接构建条件。 Overridepublic ListUser queryUsers(String name, Integer status, Integer minBalance, Integer maxBalance) {return lambdaQuery().like(name ! null, User::getUsername, name).eq(status ! null, User::getStatus, status).ge(minBalance ! null, User::getBalance, minBalance).le(maxBalance ! null, User::getBalance, maxBalance).list();}lambda的更新 例如更新余额操作 lambdaUpdate().set(User::getBalance, remainBalance).set(remainBalance 0, User::getStatus, UserStatus.FROZEN).eq(User::getId, id).eq(User::getBalance, user.getBalance()) // 乐观锁避免多线性造成.update(); // 上述只是构建条件这一句是执行更新P11 核心功能-IService的批量新增 例如批量插入10万条数据 尝试使用for循环依次插入时间勉勉强强 使用批量插入考虑到一次网络请求数据量的大小可以分10x1000进行插入进行批量新增效率提升接近10倍saveBatch会先预编译成sql语句但是也是一条条的执行 把上述预编译sql变换成一条条的数据插入例如下面的方式虽然数据很对但是只有一条sql语句这样才是真正的批处理 使用mybatis plus的批处理开启rewriteBatchedStatementstrue参数指重写批处理语句是mysql里面的配置默认false改写为true则会转写为下面的形式实际上是mysql驱动实现的不是mybatis plus的原因 实现配置的操作如下所示末尾加上这个参数并修改为true spring: datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/ShanghairewriteBatchedStatementstrue
http://www.pierceye.com/news/974702/

相关文章:

  • 微信公众号公众平台太原seo关键词优化
  • 沈阳网站建设方案二级网站怎样被百度收录
  • 厦门数字引擎 怎么打不开网站youku网站开发技术
  • 中小企业网站建设论文郑州网站服务公司
  • 工信部网站备案验证码文化传媒网站封面
  • 境外做网站网站百度代运营
  • 南京学校网站建设策划手机网站默认全屏
  • 东莞公司网站策划万网买网站
  • 建筑网站视频大全做外汇网站卖判刑多少年
  • 手机网站菜单网页怎么做东莞网站优化方案
  • 公众号免费素材网站wordpress无法开始安装
  • 建设银行互联网网站首页网站备案 视频
  • 免费优化网站建设做app和网站哪个比较好用
  • 韩国最牛的设计网站大全网站设计的尺寸
  • 一家专门做特卖的网站类似非小号的网站怎么做
  • 怎么建一个网站出口外贸交易平台
  • iapp用网站做软件代码徐州网络推广公司排名
  • 设计之路 网站wordpress自定义字段火车头
  • 用什么服务器做盗版小说网站吗邓州十九张麻将微信群app开发公司
  • 高端网站设计找哪个公司WordPress 移动文件夹
  • 做网站的资料新媒体网站建设十大的经典成功案例
  • 西安移动网站建设丹东做网站的
  • 石家庄网站建设优化建湖做网站哪家最好
  • 外贸电商做俄罗斯市场网站电子商务网站建设的步骤一般为(
  • 济南网站建设联 系小七太仓网页制作招聘
  • 大同网站建设公司建大网站
  • 网站开发 图片存放流量大的推广平台有哪些
  • 创意网站推荐深圳网站建设公司哪里有
  • 网站在百度无法验证码怎么办啊广州免费核酸检测地点查询
  • 山东网站建设公司哪家好怎么用html做个人的网页