集成flyway所需要导入maven的插件
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
<plugin>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-maven-pluginartifactId>
<version>6.4.3version>
<configuration>
<url>jdbc:mysql://localhost:3306/info?useSSL=falseurl>
<user>rootuser>
<password>123456password>
configuration>
plugin>
集成flyway以后,将需要执行的数据库脚本写成:V1__Create_user_table.sql
的形式,然后在里面写你需要执行的相关的SQL语句。以后每需要执行一条SQL语句都需要写一个相应的VXX__版本的SQL脚本。
然后需要注意的一点就是,集成了flyway以后,就不能手动对数据库进行操作,对数据库的操作只能依赖于写一个VXX__版本的SQL脚本,然后执行命令:
mvn flyway:migrate
执行完毕以后会执行的相应的SQL语句,该创建表的就给你创建表,该修改数据库的就给你修改数据库,还会生成一张flyway_schema_history
校验表,如下图所示:
该表记录着flyway执行的操作,如果手动进行修改数据库,那么下次再使用mvn flyway:migrate
命令执行SQL脚本时,则会报错,因为数据校验不通过。flyway_schema_history
记录的操作中没有记录你的这一系列操作,数据对不上,flyway则没办法成功执行。
整合MyBatis时需要导入的插件
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>1.4.0version>
plugin>
同时使用MyBatis需要在application.properties配置:
mybatis.configuration.map-underscore-to-camel-case=true
最开始就是因为没有这么配置,导致映射失败。
该配置能使得MyBatis自动完成Java驼峰命名到数据库下划线命名的转化
比如useName ➡ user_name
我在数据库中定义了一个text类型的字段:
使用selectByExampleWithRowbounds
方法查出来的数据为null,应该使用selectByExampleWithBLOBsWithRowbounds
input标签采用th:value标签可以将值回显到input输入框中
<input type="text" class="form-control" id="title" name="title" placeholder="标题..." th:value="${title}">
textarea可以采用如下方式将值回显到输入框中
<textarea name="description" id="description" class="form-control" cols="30" rows="10" th:value="${description}">[[${description}]]textarea>
地址拼接
<a th:href="@{/(page=${page})}" th:text="${page}">1a>
比如:http://localhost:8080/?page=1
其中?后面的内容是请求所携带的参数
将项目部署到服务器以后莫名其妙的说我没有这张表,也没有那张表,但是我看数据库中明明都存在这些表,java代码执行的时候却找不到。
我进入MySQL执行命令时果然发现不对劲。我有一个数据库名字为info。我执行use info
。没问题,但是执行user INFO
却不行。按道理执行SQL语句的时候大小写应该忽略不计才对。
然后查阅资料才知道Linux中是不忽略SQL语句的大小写的。
执行show variables like '%case%';
得到如下信息。只有当lower_case_table_names为1的时候才能忽略大小写。
然后根据这个帖子重新安装了一遍MySQL便可以了。
帖子链接点此
设置Linux忽略大小写成功以后的输出结果:
当我们使用@EnableWebMvc的时候,就相当于是引入了WebMvcConfigurationSupport这个类,会导致自动配置不生效。比如使用了@EnableWebMvc注解以后,首页的页面找不到了
分析如下:
WebMvcAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass({
Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
//当WebMvcConfigurationSupport这个class不存在的时候自动配置才会生效,若这个类存在,Spring Boot的自动配置将不会生效
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
@AutoConfigureAfter({
DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
ValidationAutoConfiguration.class })
public class WebMvcAutoConfiguration
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
表示只有当WebMvcConfigurationSupport这个class不存在的时候自动配置才会生效,若这个类存在,Spring Boot的自动配置将不会生效。
@EnableWebMvc
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.TYPE})
@Documented
@Import({
DelegatingWebMvcConfiguration.class})
public @interface EnableWebMvc {
}
可以看到@EnableWebMvc注解引入了 DelegatingWebMvcConfiguration
。继续往上走而可以发现:
DelegatingWebMvcConfigurationextends WebMvcConfigurationSupport
也就是说使用了@EnableWebMvc
实际上就导入了WebMvcConfigurationSupport
所以会导致Spring Boot的自动配置失效。
return “user/welcome” 会自动跳转user路径下的welcome.html
而return "redirect: user/welcome"则会返回这个controller, 然后重新查找requestmapping的参数。 如果这个controller没有一个@requestmapping(value=“user”),那么就会报错。
因此, return+路径就是纯粹用于跳转页面。 而return+redirect就用于再次转向controller。如果使用model传输数据,使用return+redirect就会导致数据无效。在页面根本取不到相应的数据。
比如:
model.addAttribute("error", "用户未登录");
return "publish";
采用return "publish"的方式返回publish.html页面,就能从model中取出数据,可以在publish.html中使用${error}取值。
但是使用return "redirect:/publish"的方式则不可以