一、创建测试数据库、测试表和测试数据
二、搭建Maven+SSM框架,粗浅的学习了一下pom文件中每个依赖的作用,基于Spring MVC实现了一个根据staff_id查询员工信息的controller
三、添加spring boot依赖,基于Spring boot实现一个查询员工(staff)信息的RESTFul服务(有关Spring boot的内容暂时到此为止)
四、实现查改删增:
当属性为空时,jsp页面会出现错误;
生成的staff类中Date是java.util.date类,而缺省的构造函数的入参是java.sql.date类,因此产生了一系列奇怪的提问,需要进一步排查和分析;
需要引入git管理代码;
Bug:获取到的日期存入数据库后比实际输入日期早一天,如输入2010.10.10,数据库中存储的日期为2010.10.09
Solution:数据库时区设置问题,开发时要保持java程序和数据库的时区一致
Bug:从前端页面新增员工信息时,数据库中的新增记录里日期为null
Solution:虽然在前端页面中,日期输入框的type是Date,但是后端从requst中获取到的是日期字符串,需要将字符串转换成日期,才能正确地保存到数据库中
五、重构代码,构建模块化的工程
Bug:controller无法扫描到定义的bean
Solution:service和service-impl代码在独立的module中,使用@Component注解标注了接口实现类后,还需要在service-impl模块中新建spring应用上下文配置文件,配置启动组件扫描。然后在web模块的上下文中引入service-impl的中的spring上下文。
六、使用Spring Boot配置项目依赖,整合MyBatis和SpringMVC等框架
Step 1: Spring boot整合Druid和MyBatis
classpath:指的是工程编译后生成的target/classes目录,存放src目录下所有文件编译后的结果。(.class、.xml、.properties等文件)
ClassPathResource的用法:初始化String参数需要是classpath路径下具体的文件,不能使用类似*.xml的方式,会找不到文件.
如下代码可以匹配多个文件
PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources("classpath:mapper/*.xml"));
Bug:application.properties中配置的参数不生效
Solution:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
关闭DRUID和DataSource的自动配置
Bug:java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
Solution:MyBatis在1.2.0版本中取消了自动注入SqlSessionFactory 和 SqlSessionTemplate,需要手动创建有关的Bean
@Import引入.class配置
@ImportResource引入.xml配置
Step 2: Spring boot整合SpringMVC
Bug: https://github.com/spring-projects/spring-boot/issues/12398
!!!!!!构建Spring boot web jsp 应用需要的依赖!!!!!!
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
org.springframework.boot
spring-boot-starter-web
javax.servlet
jstl
org.springframework.boot
spring-boot-starter-tomcat
provided
org.apache.tomcat.embed
tomcat-embed-jasper
provided
org.springframework.boot
spring-boot-starter-test
test
为配置类添加了@EnableWebMvc就关闭了SpringMVC的自动配置!!!
Bug:
配置了application.properties和WebApplication.java,所有都无误出现此问题
Solution:
https://bbs.csdn.net/topics/392343798?page=1
mvn clean install:清理、资源处理、编译、测试、打包,将打包生成的jar包和pom文件安装到maven本地仓库
mvn clean package:清理、资源处理、编译、测试,对编译生成的文件进行打包,默认名称是artifactId-version
mvn clean compile:清理、资源处理、编译、完成。编译所有源文件产生的.class文件保存在target/class目录下
REST API通过post传递参数的时候,不要直接将参数赋值给DO类的Bean,更好的做法是DTO类的Bean用于接收post请求中的参数,然后在controller的具体方法中将DTO转换成DO,然后操作数据库
工程整合和Dubbo后,用于在Controller层和Service层之间传递数据的DO对象需要实现Serializable接口
dao层的配置文件在Service层加载,web模块不需要在依赖dao模块和service-impl模块
启动一个非web的springboot应用程序,在main方法中使用如下代码启动,这样就不用为应用程序准备一个内嵌的web服务器:
new SpringApplicationBuilder(ServiceApplication.class)
.web(WebApplicationType.NONE)
.run(args);
SpringBoot使用Commons Logging进行所有内部日志记录,但底层日志实现保持开放状态。为Java Util Logging,Log4j2和Logback提供了默认配置。
SpringBoot能自动适配所有的日志,引入其他框架的时候,只需要把这个框架依赖的日志框架排除掉,SpringBoot默认帮我们配置好了日志,我们直接即可。
整合redis后,第一次查询报错,待修复
spring boot web应用程序全局异常处理:
@ControllerAdvice和@ExceptionHandler组合,默认情况下@ControllerAdvice监控所有的@RequestMapping方法,也可以对指定过滤的条件
StaffManagementSystem 2.0
1. Spring数据校验
通过实现Validator接口而实现的数据检验将会覆盖基于注解的JSR-303数据校验