目录
1.版本的选择
博主选择的是:
<version>2.1.9.RELEASE</version>
如果选择较高版本,如2.2.0那么与之前的版本会存在一些问题,如:在运动JPA时候,2.1.9版本的Sort类与Pagealbe类的构造器是public属性的,而2.2.0是private属性,那么就不能显示的构造。怎么解决,我也还不知道。。。,代码如下:
Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageable = new PageRequest(start, size, sort);
如果你用的是2.2.0或者更高级的版本,就不能这样初始化sort与pageable。
2.pom.xml总结
下面主要总结了,这次学习项目用到的依赖,以及它们的作用。
- 增加对JSP支持,需要增加的依赖:
同时在src/main/resources目录下增加application.properties文件,如果有直接修改。用于视图重定向jsp文件位置。<!-- servlet依赖. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <!-- JSTL. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!-- tomcat的支持.--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <!-- springboot tomcat 支持,貌似没有这个依赖也是OK的 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency>
spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
- 让SpringBoot自动重启,又名热部署。作用:当你启动程序之后,你修改了JSP文件之后,不需要关掉程序然后重新启动程序,就能看到修改后的结果。注:html静态文件,不需要热部署修改之后刷新之后也能直接看到效果。
方法:一个依赖+一个插件(这个插件一般是默认添加上的)
另外,如果想要修改了类之后,也能自动重启,那么需要如下设置:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- 这个需要为 true 热部署才有效 --> </dependency> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
1)Idea的settings中找到Compiler里面的Build project automatically勾选上。(这一步也许可以省略第二步才是关键)
2)到application.properties中加上:spring.thymeleaf.cache=false spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java
注:如上配置后,的确控制台会自动重启,但是不知道为啥,修改了类的内容,却没有达到效果。
- 增加对JPA支持,JAP是Sun官方提出的Java持久化规范,方便操作数据库。
同时需要mysql的依赖。<!-- jpa--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
还需要在application.properties配置:(数据库链接必须的参数)<!-- mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
如果写上这条配置,会自动更新表结构,也就是说数据库中没有那个表,执行程序的话会自动创建更新。spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
- 增加Mybatis的依赖:同时也需要mysql依赖。
<!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
在application.properties新增数据库链接必须的参数:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/jdbctest?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
配置了上面的东西Mybatis可以用注解方式来操作数据库CRUD了,想用xml方式那么还需要配置:
在application.properties中增加Mybatis xml配置:#Mybatis xml的配置 mybatis.mapper-locations=classpath:com/jtl/springboot/mapper/*.xml mybatis.type-aliases-package=com.jtl.springboot.bean
但是可能是我路径写的有问题,在调用mapper里操作数据库的方法时会出现错误:
Resolved [org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jtl.springboot.mapper.CategoryMapper2.findAll]
产生这个问题的表现为:打包或运行程序时*Mapper.xml没有自动复制到target中的classes输出目录mapper类包下。
解决方式:换一种配置方案(可以去掉application.properties中的xml配置),在pom文件中添加mybatis加载配置文件的配置:添加在pom.xml的 build节点下,让编译器把src/main/java目录下的xml文件一同编译到classes文件夹下。<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </build>
- 分页:Mybatis需要有PageHelper插件的支持,而JPA不需要多余的插件依赖。
除此之外还需要一个PageHelperConfig的配置类。代码,略。<!-- pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency>
- 单元测试
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- springboot test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
其他的总结:
- 关于Tomcat
本次项目是一个web程序,但是启动方式不是启动的Tomcat,而是启动SpringbootApplication类的主方法,原因是因为这个类把Tomcat嵌入进去了。