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

淮安网站建设报价色一把看片网 做最好的在线看片网站

淮安网站建设报价,色一把看片网 做最好的在线看片网站,wordpress 禁用 事件,做网站的系统目录 一、分页插件 1、添加配置类 2、添加分页插件 3、测试分页 二、XML自定义分页 1、UserMapper中定义接口方法 2、定义XML 3、测试 三、乐观锁 1、场景 2、乐观锁方案 3、乐观锁实现流程 4、优化流程 四、wapper介绍 1、Wrapper家族 2、创建测试类 五、Qu…目录 一、分页插件 1、添加配置类 2、添加分页插件 3、测试分页 二、XML自定义分页 1、UserMapper中定义接口方法 2、定义XML 3、测试 三、乐观锁 1、场景 2、乐观锁方案 3、乐观锁实现流程 4、优化流程 四、wapper介绍  1、Wrapper家族 2、创建测试类 五、QueryWrapper 1、例1组装查询条件 2、例2组装排序条件 3、例3组装删除条件 4、例4条件的优先级 5、例5组装select子句 6、例6实现子查询 六、UpdateWrapper 例7需求同例4 七、condition 例8动态组装查询条件 八、LambdaXxxWrapper 1、例9Query - 需求同例8 2、例10Update - 需求同例4 Mybatis-Plus快速入门尚融宝02-mybatisplus复习尚融宝03-mybatisplus基本CRUD和注解 一、分页插件 MyBatis Plus自带分页插件只要简单的配置即可实现分页功能 1、添加配置类 创建config包创建MybatisPlusConfig类 package com.atguigu.mybatisplus.config;Configuration MapperScan(com.atguigu.mybatisplus.mapper) //可以将主类中的注解移到此处 public class MybatisPlusConfig {} 2、添加分页插件 配置类中添加Bean配置 Bean public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor; } 3、测试分页 创建类InterceptorTests package com.atguigu.mybatisplus;SpringBootTest public class InterceptorTests {Resourceprivate UserMapper userMapper;Testpublic void testSelectPage(){//创建分页参数PageUser pageParam new Page(1,5);//执行分页查询userMapper.selectPage(pageParam, null);//查看分页参数的成员System.out.println(pageParam);} } 二、XML自定义分页 1、UserMapper中定义接口方法 /*** 查询 : 根据年龄查询用户列表分页显示** param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位* param age 年龄* return 分页对象*/ IPageUser selectPageByPage(Page? page, Integer age); 2、定义XML select idselectPageByPage resultTypecom.atguigu.mybatisplus.entity.UserSELECT include refidBase_Column_List/ FROM user WHERE age #{age} /select 3、测试 Test public void testSelectPageVo(){PageUser pageParam new Page(1,5);userMapper.selectPageByPage(pageParam, 18);ListUser users pageParam.getRecords();users.forEach(System.out::println); } 三、乐观锁 1、场景 一件商品成本价是80元售价是100元。老板先是通知小李说你去把商品价格增加50元。小李正在玩游戏耽搁了一个小时。正好一个小时后老板觉得商品价格增加到150元价格太高可能会影响销量。又通知小王你把商品价格降低30元。 此时小李和小王同时操作商品后台系统。小李操作的时候系统先取出商品价格100元小王也在操作取出的商品价格也是100元。小李将价格加了50元并将10050150元存入了数据库小王将商品减了30元并将100-3070元存入了数据库。是的如果没有锁小李的操作就完全被小王的覆盖了。 现在商品价格是70元比成本价低10元。几分钟后这个商品很快出售了1千多件商品老板亏1万多。 接下来将我们演示这一过程 step1数据库中增加商品表 CREATE TABLE product (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,name VARCHAR(30) NULL DEFAULT NULL COMMENT 商品名称,price INT(11) DEFAULT 0 COMMENT 价格,version INT(11) DEFAULT 0 COMMENT 乐观锁版本号,PRIMARY KEY (id) );INSERT INTO product (id, NAME, price) VALUES (1, 笔记本, 100); step2创建实体类 package com.atguigu.mybatisplus.entity; Data public class Product {private Long id;private String name;private Integer price;private Integer version; } step3创建Mapper package com.atguigu.mybatisplus.mapper;public interface ProductMapper extends BaseMapperProduct {} step4测试 Resource private ProductMapper productMapper;Test public void testConcurrentUpdate() {//1、小李Product p1 productMapper.selectById(1L);//2、小王Product p2 productMapper.selectById(1L);//3、小李将价格加了50元存入了数据库 10050150p1.setPrice(p1.getPrice() 50);int result1 productMapper.updateById(p1);System.out.println(小李修改结果 result1);//4、小王将商品减了30元存入了数据库 100-3070覆盖了小李的150p2.setPrice(p2.getPrice() - 30);int result2 productMapper.updateById(p2);System.out.println(小王修改结果 result2);//最后的结果Product p3 productMapper.selectById(1L);System.out.println(最后的结果 p3.getPrice()); } 2、乐观锁方案 数据库中添加version字段取出记录时获取当前version SELECT id,name,price,version FROM product WHERE id1 更新时version 1如果where语句中的version版本不对则更新失败 UPDATE product SET priceprice50, versionversion 1 WHERE id1 AND version1 接下来介绍如何在Mybatis-Plus项目中使用乐观锁 3、乐观锁实现流程 step1修改实体类 在version字段上添加 Version 注解 Version private Integer version; step2添加乐观锁插件 Bean public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//乐观锁interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor; }step3重新执行测试 小王的修改失败 4、优化流程 失败后重试 if(result2 0){//更新失败重试System.out.println(小王重试);//重新获取数据p2 productMapper.selectById(1L);//更新p2.setPrice(p2.getPrice() - 30);productMapper.updateById(p2); } 四、wapper介绍  1、Wrapper家族 在MP中我们可以使用通用MapperBaseMapper实现基本查询也可以使用自定义Mapper自定义XML来实现更高级的查询。当然你也可以结合条件构造器来方便的实现更多的高级查询。   Wrapper 条件构造抽象类最顶端父类       AbstractWrapper 用于查询条件封装生成 sql 的 where 条件         QueryWrapper 查询条件封装         UpdateWrapper Update 条件封装     AbstractLambdaWrapper 使用Lambda 语法         LambdaQueryWrapper 用于Lambda语法使用的查询Wrapper         LambdaUpdateWrapper Lambda 更新封装Wrapper 2、创建测试类 SpringBootTest public class WrapperTests {Resourceprivate UserMapper userMapper; } 五、QueryWrapper 1、例1组装查询条件 查询名字中包含n年龄大于等于10且小于等于20email不为空的用户 Test public void test1() {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.like(name,n).between(age, 10, 20) // 大于等于10小于等于20.isNotNull(email);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println); } 2、例2组装排序条件 按年龄降序查询用户如果年龄相同则按id升序排列 Test public void test2() {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.orderByDesc(age).orderByAsc(id);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println); } 3、例3组装删除条件 删除email为空的用户 Test public void test3() {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.isNull(email);int result userMapper.delete(queryWrapper); //条件构造器也可以构建删除语句的条件System.out.println(delete return count result); } 4、例4条件的优先级 查询名字中包含n且年龄小于18或email为空的用户并将这些用户的年龄设置为18邮箱设置为 useratguigu.com Test public void test4() {//修改条件QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.like(name, n).and(i - i.lt(age, 18).or().isNull(email)); //lambda表达式内的逻辑优先运算User user new User();user.setAge(18);user.setEmail(useratguigu.com);int result userMapper.update(user, queryWrapper);System.out.println(result); } 5、例5组装select子句 查询所有用户的用户名和年龄 Test public void test5() {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.select(name, age);//selectMaps()返回Map集合列表通常配合select()使用避免User对象中没有被查询到的列值为nullListMapString, Object maps userMapper.selectMaps(queryWrapper);//返回值是Map列表maps.forEach(System.out::println); } 6、例6实现子查询 查询id不大于3的所有用户的id列表 Test public void test6() {QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.inSql(id, select id from user where id 3);//selectObjs的使用场景只返回一列ListObject objects userMapper.selectObjs(queryWrapper);//返回值是Object列表objects.forEach(System.out::println); } 但上面的方式容易引发sql注入即最后添加一个true使得条件永真 // 或插叙出所有用户id queryWrapper.inSql(id, select id from user where id 3 or true); 可是使用下面的查询方式替换 queryWrapper.in(id, 1, 2, 3 ); // 或 queryWrapper.le(id, 3 ); 六、UpdateWrapper 例7需求同例4 查询名字中包含n且年龄小于18或email为空的用户并将这些用户的年龄设置为18邮箱设置为 useratguigu.com Test public void test7() {//组装set子句UpdateWrapperUser updateWrapper new UpdateWrapper();updateWrapper.set(age, 18).set(email, useratguigu.com).like(name, n).and(i - i.lt(age, 18).or().isNull(email)); //lambda表达式内的逻辑优先运算//这里必须要创建User对象否则无法应用自动填充。如果没有自动填充可以设置为nullUser user new User();int result userMapper.update(user, updateWrapper);System.out.println(result); } updatewrapper有set方法 七、condition 例8动态组装查询条件 查询名字中包含n年龄大于10且小于20的用户查询条件来源于用户输入是可选的 Test public void test8() {//定义查询条件有可能为null用户未输入String name null;Integer ageBegin 10;Integer ageEnd 20;QueryWrapperUser queryWrapper new QueryWrapper();if(StringUtils.isNotBlank(name)){queryWrapper.like(name,n);}if(ageBegin ! null){queryWrapper.ge(age, ageBegin);}if(ageEnd ! null){queryWrapper.le(age, ageEnd);}ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println); } 上面的实现方案没有问题但是代码比较复杂我们可以使用带condition参数的重载方法构建查询条件简化代码的编写 Test public void test8Condition() {//定义查询条件有可能为null用户未输入String name null;Integer ageBegin 10;Integer ageEnd 20;QueryWrapperUser queryWrapper new QueryWrapper();queryWrapper.like(StringUtils.isNotBlank(name), name, n).ge(ageBegin ! null, age, ageBegin).le(ageEnd ! null, age, ageEnd);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println); } 八、LambdaXxxWrapper 1、例9Query - 需求同例8 Test public void test9() {//定义查询条件有可能为null用户未输入String name null;Integer ageBegin 10;Integer ageEnd 20;LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();queryWrapper//避免使用字符串表示字段防止运行时错误.like(StringUtils.isNotBlank(name), User::getName, n).ge(ageBegin ! null, User::getAge, ageBegin).le(ageEnd ! null, User::getAge, ageEnd);ListUser users userMapper.selectList(queryWrapper);users.forEach(System.out::println); } 2、例10Update - 需求同例4 Test public void test10() {//组装set子句LambdaUpdateWrapperUser updateWrapper new LambdaUpdateWrapper();updateWrapper.set(User::getAge, 18).set(User::getEmail, useratguigu.com).like(User::getName, n).and(i - i.lt(User::getAge, 18).or().isNull(User::getEmail)); //lambda表达式内的逻辑优先运算User user new User();int result userMapper.update(user, updateWrapper);System.out.println(result); }
http://www.dnsts.com.cn/news/152275.html

相关文章:

  • 专线网站建设微信公众号小说网站怎么做
  • 网站有做货网站建设公司推荐乐云seo
  • 京东物流网站岳塘区建设路街道网站
  • 长春网站建设公司排名泰安口碑好的网站建设
  • 网站伪静态设置网站联盟的基本流程
  • 网站放自己服务器备案wordpress 钱包
  • 哪个网站做3d模型免费科技
  • 导航类网站源码杭州小程序建设
  • 17网站一起做网店的流程网站开发与维护
  • 汽车网站开发流程绿色网站设计
  • 里水哪里做有做网站网站首页引导页
  • pk10代码网站开发淘宝客如何建设自己的网站
  • 深圳做网站的好公司营销型企业网站优化
  • 网站备份 ftp启动培训网站建设的请示
  • 做分析图很好用的网站做网站申请多少类商标
  • 网站服务费一年多少钱手机端网站尺寸规范
  • 网站名称和网址wordpress安裝
  • 网创项目资源网站兰州网络技术服务中心
  • 哪些网站可以做外贸免费wordpress建立
  • 动易网站后台管理功能工作的拼音
  • 做网站有哪些费用百度一下你就知道官网网页版
  • 开题报告旅游网站建设wordpress换字体
  • 做网站商业欺骗赔多少wordpress邀请码注册
  • 中国建设工程造价管理协会网站招聘网软志成学校网站管理系统官方商业正式版
  • 百度网站排名查询工具企业网站建设有什么
  • 云南高端建设网站苏州手机网站制作
  • 中国建设招标网网站首页互联网行业发展前景分析报告
  • 荣县网站建设wordpress it模板
  • 黑龙江省城市建设工程学校官方网站南昌网站排名优化报
  • 新手学做网站学要做哪些7一12岁手工科技小制作