超市订单管理系统

GitHub: github.com/hsowan/soms

SOMS

Supermarket Orders Management System 超市订单管理系统

Day 01

使用MyBatis

MyBatis 官方文档

Refer: www.mybatis.org/mybatis-3/z…

类型别名

类型别名是你的好帮手。使用它们,你就可以不用输入类的完全限定名称了。比如:

select id, username, hashedPassword from some_table where id = #{id}复制代码

log4j2

Refer: logging.apache.org/log4j/2.x/m…

Eclipse for Mac 快捷键

删除一行

Command + D

Refer: www.cnblogs.com/TankXiao/p/…

格式化代码

Shift + Command + F

Day 02

MyBatis 核心配置

mybatis-config.xml 配置

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件
    • environments(环境配置) environment(环境变量) transactionManager(事务管理器) dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

Refer: www.mybatis.org/mybatis-3/z…

mapper.xml 配置

  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句
  • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
  • sql – 可被其他语句引用的可重用语句块。
  • cache – 对给定命名空间的缓存配置。
  • cache-ref – 对其他命名空间缓存配置的引用。

Refer: www.mybatis.org/mybatis-3/z…

使用单例模式创建SqlSessionFactory

/** * 主配置文件路径 */private static String config = “mybatis-config.xml”;private static SqlSessionFactory sqlSessionFactory;/** * 使用单例模式获取SqlSessionFactory * @return */private static synchronized SqlSessionFactory getSqlSessionFactory() {if (sqlSessionFactory == null) {try {// 创建输入流读取配置文件InputStream is = Resources.getResourceAsStream(config);// 创建SQLSession工厂sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return sqlSessionFactory;}复制代码

Maven

Using JUnit

添加下面的插件到pom.xml中:

org.apache.maven.pluginsmaven-surefire-plugin3.0.0-M3复制代码

执行单元测试: mvn test

Refer: maven.apache.org/surefire/ma…

Skipping Tests

mvn install -DskipTests

Refer: maven.apache.org/surefire/ma…

JSP 九大内置对象+四大域对象

Refer: my.oschina.net/u/3805464/b…

Java 八大基本类型

byte/8char/16short/16int/32float/32long/64double/64boolean/~复制代码

Day 03

动态SQL

官方文档

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach
  • bind

www.mybatis.org/mybatis-3/z…

if

改写UserMapper.xml:

select id, username, passwordfrom userwhere username like #{username}limit #{start}, #{count}复制代码

改写单元测试 testListByUsername(使用map进行传参):

Map params = new HashMap();params.put(“username”, “%user%”);List users = session.selectList(“com.ncucoder.mapper.UserMapper.listByUsername”, params);复制代码

执行结果:

==> Preparing: select id, username, password from user where username like ? ==> Parameters: %user%(String)复制代码

添加单元测试 testListByUsernameUsingLimit:

Map params = new HashMap();params.put(“username”, “%user%”);params.put(“start”, 0);params.put(“count”, 2);List users = session.selectList(“com.ncucoder.mapper.UserMapper.listByUsername”, params);复制代码

执行结果:

==> Preparing: select id, username, password from user where username like ? limit ?, ? ==> Parameters: %user%(String), 0(Integer), 2(Integer)复制代码

bind 模糊查询

修改UserMapper.xml:

select id, username, passwordfrom userwhere username like #{username}limit #{start}, #{count}复制代码

修改单元测试 testListByUsername():

Map params = new HashMap();// params.put(“username”, “%user%”);params.put(“username”, “user”);List users = session.selectList(“com.ncucoder.mapper.UserMapper.listByUsername”, params);复制代码

执行结果:

==> Preparing: select id, username, password from user where username like ? ==> Parameters: %user%(String)复制代码

SQL优化 in

查询user表中id小于5的记录

使用in的查询执行计划(QEP):

mysql> explain select id, username, password from user where id in (1, 2, 3, 4, 5);+—-+————-+——-+————+——+—————+——+———+——+——+———-+————-+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+—-+————-+——-+————+——+—————+——+———+——+——+———-+————-+| 1 | SIMPLE | user | NULL | ALL | PRIMARY | NULL | NULL | NULL | 10 | 50.00 | Using where |+—-+————-+——-+————+——+—————+——+———+——+——+———-+————-+1 row in set, 1 warning (0.00 sec)复制代码

使用<的QEP:

mysql> explain select id, username, password from user where id < 6;+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+| 1 | SIMPLE | user | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 5 | 100.00 | Using where |+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+1 row in set, 1 warning (0.00 sec)复制代码

使用between的QEP:

mysql> explain select id, username, password from user where id between 1 and 5;+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+| 1 | SIMPLE | user | NULL | range | PRIMARY | PRIMARY | 4 | NULL | 5 | 100.00 | Using where |+—-+————-+——-+————+——-+—————+———+———+——+——+———-+————-+1 row in set, 1 warning (0.00 sec)复制代码

  • type表示对表所使用的访问方式(最优到最差: NULL > system > const > eq_ref > ref > range > index > All)
  • key表示MySQL Query Optimizer从possible_keys中所选择使用的索引
  • rows表示MySQL Query Optimizer通过系统收集到的统计信息估算出来的结果集记录条数, 简单理解为查询需要扫描的记录数

分析: 使用in作为查询条件时没有使用索引而进行了全表扫描(ALL), 使用<和between作为查询条件时使用到主键索引以及索引范围扫描, 所以三者比较in的执行效率是最低的

MySQL 批量插入测试数据

— 获取指定长度的随机字符串drop function if exists `rand_string`;create function `rand_string`(n int) returns varchar(255) charset ‘utf8’begin DECLARE chars_str varchar(100) DEFAULT ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’; DECLARE return_str varchar(255) DEFAULT ”; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str = concat(return_str, substring(chars_str, FLOOR(1 + RAND() * 62), 1)); SET i = i + 1; END WHILE; RETURN return_str;end;– 插入指定数量的用户drop procedure if exists `create_users`;create procedure `create_users`(n int)begin declare i int default 0; while (i < n) do insert into user(username, password) values (rand_string(10), rand_string(32)); set i = i + 1; end while;end;– 调用存储过程call create_users(1000);复制代码

Day 04

MyBatis Generator

官方文档

www.mybatis.org/generator/c…

问题:

  • 改用MySQL8时, 与其他数据库(mysql库)表名相同时出现错误

添加依赖和插件

mybatis-generator-core:

org.mybatis.generator mybatis-generator-core ${mybatis-generator.version}复制代码

mybatis-generator-maven-plugin:

org.mybatis.generator mybatis-generator-maven-plugin ${mybatis-generator.version} true true 复制代码

添加配置文件

  • generatorConfig.xml

生成对应的映射文件、实体类和接口类

cd ${your_project}mvn mybatis-generator:generator复制代码

Refer:

  • www.cnblogs.com/hhhshct/p/9…
  • blog.csdn.net/liyonghong3…

集成SpringMVC

添加依赖

org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-beans ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-test ${spring.version} test org.springframework spring-jdbc ${spring.version} org.springframework spring-tx ${spring.version} org.mybatis mybatis-spring ${mybatis-spring.version} com.alibaba druid ${druid.version}复制代码

修改web.xml配置文件

soms-dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring/spring-*.xml 1 true soms-dispatcher / encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /*复制代码

添加Spring的配置文件

  • spring-web.xml
  • spring-dao.xml
  • spring-service.xml

使用MySQL8

修改依赖版本(pom.xml):

8.0.16复制代码

修改驱动路径(db.properties):

driver=com.mysql.cj.jdbc.Driver复制代码

Day 05

JWT + SpringSecurity

github.com/hsowan/jwt-…

作者:K8sCat链接:https://juejin.cn/post/7056040075947147295

郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
(0)
用户投稿
上一篇 2022年6月30日
下一篇 2022年6月30日

相关推荐

  • 「十二星座」3/15-3/21 天枰座|天蝎座 一周整体运势

    天枰座一周整体运势 天枰座在本周工作上面的速度算是挺快的,很多事情你都可以得心应手。人际关系上大家也都非常乐意帮助你,不过要注意的是在本周你有一点急躁了。 天枰座在急躁的时候做事就…

    2022年8月22日
  • 「技术分享」微服务开发的幸福感,是如何提升的?

    阅读原文:【技术分享】微服务开发的幸福感,是如何提升的? 点击关注“八戒技术团队”,阅读更多技术干货 随着微服务的流行,越来越多公司使用了微服务架构,但由于公司业务的特殊性、技术栈…

    2022年6月28日
  • 还记得守望先锋联赛弹幕现状刷的“这个世界并不需要守望先锋”吗

    在2021年5月5日,owl职业联赛众多队伍,其中一个队伍——首尔王朝队的CBOB在直播中rh(在中国假装认同‘一个中国’原则很累,但是为了赚钱只能当狗)在被发现并引起众怒时CBO…

    2022年6月30日
  • 肺热的表现有什么症状,你知道么?

    肺热的表现症状有咳嗽、咳痰、痰黄、咳声高亢、口渴、喜凉饮、大便干结、小便黄或小便短赤(小便量少,颜色深黄)等。 肺热比较常见的证型有风热犯肺(风热邪气侵犯肺脏)、表寒肺热和肺热炽盛…

    2022年8月25日
  • 红魔 7S 系列官宣 7 月 11 日发布

    品玩7月4日讯,红魔游戏手机官方今天宣布,红魔 7S 系列暨游戏新装备发布会将于 7 月 11 日 15:00 举行。 根据此前的报道,红魔 7S 系列将包括两款手机。而从工信部的…

    2022年7月4日
  • 同事都有对象单身女服务员趴桌大哭 只想找个厨师

    现如今,很多女生对另一半的要求很高,不仅要有房有车,还有存款以及几十万的彩礼等。同事都有对象单身女服务员趴桌大哭,网友纷纷质疑她是不是要求太高的原因,所以一直没有脱单,具体详情跟小…

    2022年10月15日
  • 阿里云与识庐慧图完成产品生态集成认证

    近日,西安识庐慧图信息科技有限公司(以下简称“识庐科技”)与阿里云数据库达成全新技术合作,旗下核心产品“图模型开发平台”和阿里云图数据库GDB经过严格的产品测试,完成产品生态集成认…

    2022年6月18日
  • 全职宝妈的悲哀

    今天带大宝一起去超市买东西,由于大宝没有吃早餐,就走到当地美食城,一看最便宜的一碗粉都要十五块钱,一路上还念叨着想来一杯果汁,刚好那些吃的全是辣的,找个理由带了出来,走到超市旁边的…

    2022年8月18日
  • 游戏体验显著提升,王者荣耀开启夏日行动,对摆烂行为重拳出击

    作为一名峡谷老玩家,这片承载了无数欢声笑语的峡谷陪伴了玩家许多年,但是恶意摆烂的行为实在是很伤大家的热情和心情。 所以今年的王者荣耀夏日开启了特别行动:要让恶意信息与行为,全都退无…

    2022年7月31日
  • 安全管理框架,用Shiro还是用Spring Security?

    开发Java应用项目的时候,安全管理通常来讲是必不可少的功能。常用的安全管理框架有Apache Shiro和Spring Security,那么作为一名开发人员的话,该如何选择自己…

    2022年6月16日

联系我们

联系邮箱:admin#wlmqw.com
工作时间:周一至周五,10:30-18:30,节假日休息