查询用户耗时
注册用户耗时
从上图,我们明显能看出来我们每一次的请求耗时,之后就可以针对性的对每一个方法进行优化!!!
sql日志追踪在我们开发的过程中,往往会遇到针对数据库的CRUD的操作,但是,因为我们使用了mybatis 动态生成了简单的SQL查询,而不是手动编写的,比如我们在UserServiceImpl.java中实现的用户查询以及用户注册代码中的tk.mybatis.mapper.entity.Example 以及 this.usersMapper.insertSelective(user);
public Users findUserByUserName(String username) { // 构建查询条件 Example example = new Example(Users.class); val condition = example.createCriteria() .andEqualTo("username", username); return this.usersMapper.selectOneByExample(example); } @Transactional(propagation = Propagation.REQUIRED) @Override public Users createUser(UserRequestDTO userRequestDTO) throws Exception { log.info("======begin create user : {}=======", userRequestDTO); val user = Users.builder() .id(sid.next()) //生成分布式id .username(userRequestDTO.getUsername()) .password(MD5GeneratorTools.getMD5Str(userRequestDTO.getPassword())) .birthday(DateUtils.parseDate("1970-01-01", "yyyy-MM-dd")) .nickname(userRequestDTO.getUsername()) .face(this.FACE_IMG) .sex(SexEnum.secret.type) .createdTime(new Date()) .updatedTime(new Date()) .build(); this.usersMapper.insertSelective(user); log.info("======end create user : {}=======", userRequestDTO); return user; }一旦遇到了问题之后,我们往往不知道到底是哪里出现了错误,这个时候我们的SQL是否有问题我们也不知道,因此,接下来我们来配置一种可以让我们看到SQL的小实现:
1.设置日志配置(如图)
2.修改mybatis配置(log-impl: org.apache.ibatis.logging.stdout.StdOutImpl)
3.SELECT效果演示
4.INSERT效果演示
从上图可以看出控制台JDBC操作进行了2次,其实第一次是对我们的用户名进行校验。第二次INSERT是真实的插入。
通过上面的演示结果,大家可以想到,这个日志针在我们日常的开发中解决问题是非常有必要的。但是一定记得,在上生产的时候,日志一定要关闭,否则数据量一旦大了之后,会对系统的性能造成严重伤害!!!
源码下载Github 传送门
Gitee 传送门
下一节我们将继续开发我们电商的核心部分-商品以及广告的展示,在过程中使用到的任何开发组件,我都会通过专门的一节来进行介绍的,兄弟们末慌!