看了几篇整合的博客,开始搭建
新建一个maven(可以直接选maven上面那个,快速构建一个spring项目,不过我的idea(16)给的(next后的页面选项,不是本图的jdk)jdk没有1.7的选项,所以我就用maven构建了)
构建后,pom.xml
<!-- 继承父包 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 热部署-->
<!--springloaded :实现修改类文件的热部署-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<!--页面,代码的热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<!--Mybatis-generator-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
梳理项目结构:
application.properties
generatorConfig.xml(mybatis代码生成器)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--
出现错误:Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
解决办法:将本地的MAVEN仓库中的mysql驱动引入进来
-->
<classPathEntry location="C:\work\mavenFile\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar"/>
<context id="mysqlgenerator" targetRuntime="MyBatis3Simple">
<!--不生成注释-->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!-- 配置数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/huahua"
userId="lsl"
password="123456" />
<!-- 指定javaBean生成的位置 -->
<javaModelGenerator targetPackage="com.lsl.store.entity" targetProject="src/main/java" >
<!-- 在targetPackage的基础上,根据数据库的schema再生成一层package,最终生成的类放在这个package下,默认为false -->
<property name="enableSubPackages" value="true" />
<!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources" >
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 指定dao接口生成的位置,mapper接口 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.lsl.store.mapper" targetProject="src/main/java" >
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 选择一个table来生成相关文件,可以有一个或多个table,必须要有table元素
选择的table会生成一下文件:
1,SQL map文件
-->
<table tableName="%" >
<!-- 参考 javaModelGenerator 的 constructorBased属性-->
<property name="constructorBased" value="false"/>
<!-- 默认为false,如果设置为true,在生成的SQL中,table名字不会加上catalog或schema; -->
<property name="ignoreQualifiersAtRuntime" value="false"/>
<!-- 参考 javaModelGenerator 的 immutable 属性 -->
<property name="immutable" value="false"/>
<!-- 指定是否只生成domain类,如果设置为true,只生成domain类,如果还配置了sqlMapGenerator,那么在mapper XML文件中,只生成resultMap元素 -->
<property name="modelOnly" value="false"/>
<!-- 如果设置为true,生成的model类会直接使用column本身的名字,而不会再使用驼峰命名方法,比如BORN_DATE,生成的属性名字就是BORN_DATE,而不会是bornDate -->
<property name="useActualColumnNames" value="false"/>
</table>
</context>
</generatorConfiguration>
开始生成代码(生成器插件在pom.xml):
编写代码,测试:
ok,整合成功,剩下的就是堆代码,整合其它了。
整合须知:
mybatis的映射文件必须放在resources内,否则报错找不到。(可能是xml吗,可以试试注解,
需要在启动类添加@MapperScan (扫描mapper接口
idea自动编译:setting-complier-auto.....
springboot热部署:pom.xml里有
嗯,暂时就折磨多!
继续堆代码之事务:
自动配置自动配置自动配置,(你也可以自己搞,不过默认的已经够用了,毕竟个人的的项目很小
1.自动配置事务管理器:
在使用JDBC作为数据访问技术时,(pom.xml自己看),springboot会我们定义PlatformTransaction Manager的实现DataSourceTransactionManager的bean,
配置见源码:jdbc.DataSourceTransactionManagerAutoConfiguration类中的定义。
在使用jpa,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,JpaTransactionManager的bean,
,,,,,jpa.JpaBaseConfiguration类中的定义
(本项目使用jdbc的事务管理器)
2.自动开启注解事务的支持:
springboot专门用于配置事务的类:TransactionAutoConfiguration,该类依赖于上述两个源码类
在DataSourceTransactionManagerAutoConfiguration里自动开启了对声明式事务的支持,所以jdbc(pom.xml),所以在启动类无须显示开启使用@EnableTransactionManagement
所以使用jdbc的事务,啥都不用,(貌似使用jpa还需显示开启
所以测试下把:在serivce模拟移除删除:
继续在controller编写响应的代码,测试(不截图了,懒,反正回滚了,反正没删掉,写错的话,不要打我啊
ok,事务这块暂时就到这,以后有新发现再添加。
继续堆代码之前端: thymeleaf 和 layui
添加依赖(去掉web的依赖,因为thymeleaf包含了web
第二个依赖解决问题:
thymeleaf标签必须由匹配的结束标记终止(thymeleaf对html5检查过严)
application.properties中:
#关闭模板缓存,更新页面可以及时得出
spring.thymeleaf.cache=false
#解决thymeleaf对html5检查过严
spring.thymeleaf.mode=LEGACYHTML5
继续完善项目结构
在自动配置类addResourceHandlers定义了静态资源的配置
把类路径下的/static /public /resources /META-INF/resources 文件下的静态文件直接映射为/**,可以通过http://localhost:8080/**来访问。
springboot通过.autoconfigure.thymeleaf包对thymeleaf进行自动配置:
通过包内的ThymeleafProperties来配置Thymeleaf,在application.properties中以spring.thymeleaf开头来配置,通过源码可以得到一些默认配置:
前缀:springboot默认的模板放置在: classpath:/templates/ 目录下
后缀: .html 模板默认为:html5 编码为:UTF-8 媒体类型:text/html 默认开启缓存,(开发时需要关闭
以一个登陆为例:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
<link rel="stylesheet" th:href="@{/layui/css/layui.css}"/>
</head>
<style>
.login {
margin: 150px auto;
padding-top: 70px;
width: 400px;
height: 200px;
background-color: white;
}
</style>
<body style="background-color: #f2f2f2">
<form class="layui-form login" action="/user/login">
<div class="layui-form-item">
<label class="layui-form-label">用户名</label>
<div class="layui-input-inline">
<input type="text" name="name" required="required" lay-verify="required" placeholder="请输入用户名" autocomplete="off" class="layui-input"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码框</label>
<div class="layui-input-inline">
<input type="password" name="password" required="required" lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"/>
</div>
<div class="layui-form-mid layui-word-aux">辅助文字</div>
</div>
<div class="layui-form-item btn-wei">
<div class="layui-input-block">
<button lay-submit="" lay-filter="login" class="layui-btn">登录</button>
</div>
</div>
</form>
</body>
<script th:src="@{/layui/js/jquery-1.12.4.js}" type="text/javascript"></script>
<script th:src="@{/layui/js/layui.js}" type="text/javascript"></script>
<script th:src="@{/layui/js/index.js}" type="text/javascript"></script>
</html>
运行显示为:
其它的一些都采用自动配置,嗯,暂时就这些,等着继续深入回来添加相关的知识(写的不好,不要说我,我很害羞的