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

缙云县城乡建设局网站页面设计要怎么做

缙云县城乡建设局网站,页面设计要怎么做,赣州网站建设jxgzg3,如何建立一个个人博客网站文章目录 1.分页插件2.自定义分页3.乐观锁3.1 场景3.2 乐观锁与悲观锁3.3 模拟修改冲突3.4 乐观锁解决问题 1.分页插件 MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能 添加配置类MyBatisPlusConfig Configuration MapperScan("com.atguigu.mybatis…

文章目录

    • 1.分页插件
    • 2.自定义分页
    • 3.乐观锁
      • 3.1 场景
      • 3.2 乐观锁与悲观锁
      • 3.3 模拟修改冲突
      • 3.4 乐观锁解决问题

1.分页插件

MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能

  • 添加配置类MyBatisPlusConfig

    @Configuration
    @MapperScan("com.atguigu.mybatisplus.mapper")
    public class MyBatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
    }
    
  • 编写测试方法

    @Test
    public void testPage(){//new Page()中的两个参数分别是当前页码,每页显示数量Page<User> page = userMapper.selectPage(new Page<>(1, 2), null);List<User> users = page.getRecords();users.forEach(System.out::println);
    }
    

2.自定义分页

上面调用的是MyBatis-Plus提供的带有分页的方法,那么我们自己定义的方法如何实现分页呢?

  • UserMapper接口中定义一个方法

    /*** 根据年龄查询用户列表,分页显示 * @param page 分页对象,xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位 * @param age 年龄 * @return */
    Page<User> selectPageVo(@Param("page") Page<User> page,@Param("age") Integer age);
    
  • UserMapper.xml中编写SQL实现该方法

    <select id="selectPageVo" resultType="User">select id,username as name,age,email from t_user where age > #{age}
    </select>
    
  • 编写测试方法

    @Test
    public void testPageVo(){Page<User> page = userMapper.selectPageVo(new Page<User>(1,2), 20);List<User> users = page.getRecords();users.forEach(System.out::println);
    }
    

3.乐观锁

作用:当要更新一条记录的时候,希望这条记录没有被别人更新

乐观锁的实现方式:

  • 取出记录时,获取当前 version
  • 更新时,带上这个 version
  • 执行更新时, set version = newVersion where version = oldVersion
  • 如果 version 不对,就更新失败

3.1 场景


  • 一件商品,成本价是80元,售价是100元。老板先是通知小李,说你去把商品价格增加50元。小李正在玩游戏,耽搁了一个小时。正好一个小时后,老板觉得商品价格增加到150元,价格太高,可能会影响销量。又通知小王,你把商品价格降低30元。
  • 此时,小李和小王同时操作商品后台系统。小李操作的时候,系统先取出商品价格100元;小王也在操作,取出的商品价格也是100元。小李将价格加了50元,并将100+50=150元存入了数据库;小王将商品减了30元,并将100-30=70元存入了数据库。是的,如果没有锁,小李的操作就完全被小王的覆盖了。
  • 现在商品价格是70元,比成本价低10元。几分钟后,这个商品很快出售了1千多件商品,老板亏1万多。

3.2 乐观锁与悲观锁


  • 上面的故事,如果是乐观锁,小王保存价格前,会检查下价格是否被人修改过了。如果被修改过了,则重新取出的被修改后的价格,150元,这样他会将120元存入数据库。
  • 如果是悲观锁,小李取出数据后,小王只能等小李操作完之后,才能对价格进行操作,也会保证最终的价格是120元。

3.3 模拟修改冲突


  • 数据库中增加商品表

    CREATE TABLE t_product ( id BIGINT(20) NOT NULL 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 t_product (id, NAME, price) VALUES (1, '外星人笔记本', 100);
    
  • 添加一个实体类Product

    @Data
    public class Product {private Long id;private String name;private Integer price;private Integer version;
    }
    
  • 添加一个Mapper接口ProductMapper

    public interface ProductMapper extends BaseMapper<Product> {}
    
  • 测试方法

    @Test
    public void testProduct01(){//1.小李获取商品价格Product productLi = productMapper.selectById(1);System.out.println("小李获取的商品价格为:" + productLi.getPrice());//2.小王获取商品价格Product productWang = productMapper.selectById(1);System.out.println("小李获取的商品价格为:" + productWang.getPrice());//3.小李修改商品价格+50productLi.setPrice(productLi.getPrice()+50);productMapper.updateById(productLi);//4.小王修改商品价格-30productWang.setPrice(productWang.getPrice()-30);productMapper.updateById(productWang);//5.老板查询商品价格Product productBoss = productMapper.selectById(1);System.out.println("老板获取的商品价格为:" + productBoss.getPrice());
    }
    
  • 执行结果

    image-20220521225803162

3.4 乐观锁解决问题


  • 实体类version字段添加注解@Version

    @Data
    public class Product {private Long id;private String name;private Integer price;@Versionprivate Integer version;
    }
    
  • 添加乐观锁插件配置

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//添加乐观锁插件interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());return interceptor;
    }
    
  • 再次执行测试方法

    小李查询商品信息:

    ​ SELECT id,name,price,version FROM t_product WHERE id=?

    小王查询商品信息:

    ​ SELECT id,name,price,version FROM t_product WHERE id=?

    小李修改商品价格,自动将version+1

    ​ UPDATE t_product SET name=?, price=?, version=? WHERE id=? AND version=?

    ​ Parameters: 外星人笔记本(String), 150(Integer), 1(Integer), 1(Long), 0(Integer)

    小王修改商品价格,此时version已更新,条件不成立,修改失败

    ​ UPDATE t_product SET name=?, price=?, version=? WHERE id=? AND version=?

    ​ Parameters: 外星人笔记本(String), 70(Integer), 1(Integer), 1(Long), 0(Integer)

    最终,小王修改失败,查询价格:150

    ​ SELECT id,name,price,version FROM t_product WHERE id=?

  • 优化执行流程

    @Test
    public void testProduct01(){//1.小李获取商品价格Product productLi = productMapper.selectById(1);System.out.println("小李获取的商品价格为:" + productLi.getPrice());//2.小王获取商品价格Product productWang = productMapper.selectById(1);System.out.println("小李获取的商品价格为:" + productWang.getPrice());//3.小李修改商品价格+50productLi.setPrice(productLi.getPrice()+50);productMapper.updateById(productLi);//4.小王修改商品价格-30productWang.setPrice(productWang.getPrice()-30);int result = productMapper.updateById(productWang);if(result == 0){//操作失败,重试Product productNew = productMapper.selectById(1);productNew.setPrice(productNew.getPrice()-30);productMapper.updateById(productNew);}//5.老板查询商品价格Product productBoss = productMapper.selectById(1);System.out.println("老板获取的商品价格为:" + productBoss.getPrice());
    }
    

    image-20220521230448577


文章转载自:

http://WozPJ5vS.fbxLj.cn
http://kpreqaZU.fbxLj.cn
http://JQUGGB5F.fbxLj.cn
http://eL0gCMC6.fbxLj.cn
http://z8MLmfxi.fbxLj.cn
http://9efzrxx6.fbxLj.cn
http://02RCO4L8.fbxLj.cn
http://KfDIQcqB.fbxLj.cn
http://IarRBS5F.fbxLj.cn
http://l7b1yVXY.fbxLj.cn
http://G3Ssxe32.fbxLj.cn
http://cOnpuUEx.fbxLj.cn
http://LQUIFF5G.fbxLj.cn
http://PEfsTqbv.fbxLj.cn
http://0dht51sW.fbxLj.cn
http://4IgWcZCf.fbxLj.cn
http://Hr9BHoAX.fbxLj.cn
http://MTkRlFIa.fbxLj.cn
http://0pDUPQPQ.fbxLj.cn
http://ytXFzYUC.fbxLj.cn
http://Lg5YMZU6.fbxLj.cn
http://kWjyt1Db.fbxLj.cn
http://TwIeUCVY.fbxLj.cn
http://IZfWDAfT.fbxLj.cn
http://wpJSr6zi.fbxLj.cn
http://DDiPnLbS.fbxLj.cn
http://KHtjrpBM.fbxLj.cn
http://QkHiEBQk.fbxLj.cn
http://YoHsynvY.fbxLj.cn
http://UGkXDNqI.fbxLj.cn
http://www.dtcms.com/wzjs/684837.html

相关文章:

  • 网站建设成都云免费外链发布平台
  • 视频剪辑教程自学网站做网站公司赚钱吗?
  • 凡科网站做网站多少钱网站优化seo教程
  • icp备案网站要先建好吗华为品牌vi设计
  • 购物网站的做网站制作网址
  • 企业网站建设 英铭中国佛山手机网站建设
  • 工信和信息化网站备案系统广西工商网站查询企业信息
  • 如何将百度地图加入网站谷城网站定制
  • 千博企业网站管理系统旗舰版保定网站建设方案
  • ip网站架设邹平 建设项目 网站公示
  • 漯河网站建设网站建设大学生网页设计怎么做
  • 珠海网站建设 金碟江西做网站的
  • 沈阳网站开发招聘发布网站域名设置
  • 上传 wordpress网站手机优化
  • 网站建设用户调查报告怎么才能创建个人网站
  • 网站站内推广计划书中际城市建设有限公司网站
  • 宜昌制作网站公司运城盐湖区姚孟信通网站开发中心
  • 色一把做最好的看片网站想注册个网站做短租房投资多少钱
  • 网站改版对网站优化影响最大的问题有哪些中小企业网站建设济南兴田德润o厉害吗
  • 企业网站开发期末报告苏州门户网站建设电话
  • wordpress评论不准设置网站视频广告联盟平台
  • 深圳做分销网站的公司内蒙古最新消息
  • 如今做那个网站能致富深圳网站建设 贴吧
  • 网站怎么做首页比较好网站开发工程师心得总结
  • 在网站上使用特殊字体wordpress可以移动端
  • 泰州建设局网站wordpress typecho 大数据库
  • 网站版权符号做淘宝用那些网站发货
  • 网站搜索查询wordpress云服务器安装教程
  • 创新的常州网站建设免费ppt模板300套
  • 网站的ftp地址怎么查中国交通建设集团英语网站