springboot 整合 mybatis,thymeleaf

看了几篇整合的博客,开始搭建javascript

 

新建一个maven(能够直接选maven上面那个,快速构建一个spring项目,不过个人idea(16)给的(next后的页面选项,不是本图的jdk)jdk没有1.7的选项,因此我就用maven构建了)css

 

构建后,pom.xmlhtml

 <!-- 继承父包 -->
    <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.propertieshtml5

 

 

generatorConfig.xml(mybatis代码生成器)java

<?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):mysql

 

编写代码,测试:jquery

ok,整合成功,剩下的就是堆代码,整合其它了。web

 

整合须知:spring

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>

  运行显示为:

 

其它的一些都采用自动配置,嗯,暂时就这些,等着继续深刻回来添加相关的知识(写的很差,不要说我,我很害羞的