SpringBoot2教程(二)整合Mybatis,dataSource,Thymeleaf


本篇主要内容讲springboot怎么整合Mybatis,Druid,Thymeleaf,Logback及基本运用。

源码地址:https://github.com/q200737056/Spring-Course/tree/master/springboot2Test2

一、项目环境

Java8+Maven3.3.9+SpringBoot2.0.4+Mybatis3+Druid+Thymeleaf3+Logback+Mysql+Eclipse


二、代码及配置讲解

1.引入依赖包

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath />
    </parent>
<dependencies>
        <!-- SpringBoot 核心包 ,包含了自动配置、日志logback和YAML-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- SpringBoot 支持aop切面 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        
        <!-- SpringBoot Web开发,包含了jackson,Tomcat和spring-webmvc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- 打成jar时需要注释掉下面的配置,springboot内置集成tomcat-->
             <!-- <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions> -->
        </dependency>
        <!-- SpringBoot集成thymeleaf模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        
        <!-- SpringBoot集成mybatis框架 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>HikariCP</artifactId>
                    <groupId>com.zaxxer</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--SpringBoot集成阿里数据库连接池 druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- Mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!-- springboot 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 表示依赖不会传递 -->
        </dependency>
  </dependencies>

2.application.yml配置

整合了Mybatis,Druid,Thymeleaf的配置,可以说非常方便,以下截取了配置部分。

# Spring配置
spring:
  #thymeleaf配置,默认前缀为templates
  thymeleaf:
    mode: HTML
    encoding: utf-8
    # 禁用缓存
    cache: false
  datasource:
    #springboot2.02版本默认使用HikariCP
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true
          &characterEncoding=utf-8&useSSL=false
    username: xxx
    password: xxx
  devtools:
    restart:
      #热部署开关
      enabled: true
# MyBatis配置
mybatis:
    # 搜索指定包别名
  typeAliasesPackage: com.springboot2.test2
    # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath:mapper/*Mapper.xml
    # 加载全局的配置文件
  configLocation: classpath:property/mybatis-config.xml

3.logback日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--参数 日志路径 -->
    <property name="log.path" value="e:\logs" />
    <!--参数 日志格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} 
[%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
              <!-- 临界值过滤器,过滤掉低于指定临界值的日志-->
 <!-- 日志级别排序为: TRACE < DEBUG < INFO < WARN < ERROR -->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <!-- 在日志配置级别的基础上过滤掉info级别以下的日志 -->
                       <level>INFO</level>
                 </filter>
    </appender>
    <!-- 输出到文件 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/springboot2Test2-info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling
                      .TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${log.path}/springboot2Test2-info.%d
{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <!-- 日志格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
          <!--级别过滤器,对特定某个级别的日志进行过滤-->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <!-- 过滤的级别 -->  
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 
        additivity属性默认为true,向上级(即root)传递
                如果未设置level,默认继承root的level;
        应没有设置appender-ref,此logger不输出日志
        主要用来对各个包下的日志分类输出
     -->
    <logger name="com.springboot2.test2" level="info" />
    <!--设置日志级别,统一输出到appender-ref
        注意如果存在log4j日志冲突,日志级别会变成debug,
                即使root设置了其它级别都不会生效
     -->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file_info" />
    </root>
</configuration> 

放在根目录下,配置文件名取logback.xml或logback-spring.xml,spring会默认加载。当然也可以取别的名称,在application.yml中配置,但不推荐这么做。

logging
  config: classpath:mylogback.xml

logback常见的appender

  • ch.qos.logback.core.ConsoleAppender : 输出到控制台
  • ch.qos.logback.core.FileAppender:输出到文件
  • ch.qos.logback.core.rolling.RollingFileAppender:输出到文件,可以配置滚动策略

常见的日志格式符号

  • %logger{n}:输出Logger对象类名,n代表长度
  • %class{n}:输出所在类名
  • %d{pattern}或者%date{pattern}:输出日志日期,格式同java
  • %L或%line:日志所在行号
  • %m或%msg:日志内容
  • %method:所在方法名称
  • %-5level: 级别从左显示5个字符宽度
  • %thread:所在线程名称
  • %n : 换行

4.Thymeleaf

Thymeleaf是一种用于Web和独立环境服务器端的Java模板引擎,而且非常容易扩展。
标准表达式语法

  • ${...} : 变量表达式。与spring集成后,使用spring EL。
  • *{...} : 选择表达式。
  • #{...} :消息 (i18n) 表达式。
  • @{...} : 链接 (URL) 表达式。
  • ~{...} : 片段表达式。

示例

//上下文相关URL
<a th:href="@{/order/list}">
//迭代列表
<tr th:each="user: ${productList}">
        <td th:text="${userStat.count}"></td>
         <td th:text="${user.name}"></td>
         <td th:text="${#numbers.formatDecimal(user.weight, 1, 2)}"></td>
         <td th:text="${#dates.format(user.logindate, 'dd-MM-yyyy')}"></td>
   </tr>

5.controller,mapperXML配置

@Controller
@RequestMapping("/index")
public class IndexController {
    //日志示例, springboot默认采用logback日志,
       //一般最好都用slf4j日志门面创建,可以兼容多个日志,
    //即使把 logback 换成 log4j2,日志代码都不会受到影响
    //logback 详细配置可 查看 根目录下logback.xml
    private static Logger log = LoggerFactory.getLogger(IndexController.class);
    @Autowired
    private IndexService indexService;
    /**
     * 首页登陆
     * @return
     */
    @RequestMapping(method=RequestMethod.GET)
    public String index(){
        return "index";
    }
    /**
     *  登陆
     *  @PostMapping相当于@RequestMapping(method=RequestMethod.POST)
     * @return
     */
    @PostMapping("/login")
    public String login(User user,ModelMap modelMap,HttpSession session){
        String pass = this.indexService.login(user.getName());
        if(pass==null){
            modelMap.put("msg", "用户名不存在!");
            return "index";
        }else if(!user.getPassword().equals(pass)){
            modelMap.put("msg", "密码错误!");
            return "index";
        }
        log.info("{}_用户登陆",user.getName());
        session.setAttribute("username", user.getName());
        return "forward:/index/userList";
    }
    /**
     * 列出 所有用户
     * @param modelMap
     * @return
     */
    @RequestMapping("/userList")
    public String userList(ModelMap modelMap){
        
        List<User> userList = this.indexService.findUserList();
        modelMap.put("userList", userList);
        return "userList";
    }
    @GetMapping("/toAdd")
    public String toAdd(){
        return "adduser";
    }
    /**
     * 新增用户
     * @param user
     * @return
     */
    @PostMapping("/addUser")
    public String addUser(User user){
        this.indexService.insertUser(user);
        // redirect 重定向
        return "redirect:/index/userList";
    }
    /**
     * 删除用户
     * @param id
     * @return
     */
    @GetMapping("/deleteUser")
    public String deleteUser(String id){
        this.indexService.deleteUser(id);
        return "redirect:/index/userList";
    }
}
<mapper namespace="com.springboot2.test2.mapper.IndexDao">
    <!-- 启动 mybatis 二级缓存,参数这里就不配置演示了,一般项目都会使用第三方缓存 -->
    <cache></cache>
    <select id="login" parameterType="string" resultType="string">
        SELECT PASSWORD FROM TEST_USER WHERE NAME=#{name}
    </select>
    <!-- 一般select  useCache默认true,flushCache默认false 
        insert,delete,update flushCache默认true 
    -->
    <select id="findUserList"  resultType="User" useCache="true" flushCache="false">
        SELECT * FROM TEST_USER
    </select>
    <insert id="insertUser" parameterType="User" keyProperty="id" useGeneratedKeys="true">
        <![CDATA[
        INSERT INTO TEST_USER (NAME,PASSWORD,EMAIL) values
        (#{name},#{password},#{email})
        ]]>
    </insert>
    <delete id="deleteUser" parameterType="string">
        DELETE FROM TEST_USER WHERE ID=#{id}
    </delete>
</mapper>

6.部分页面

<!DOCTYPE html>
<html  lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta name="keywords" content="springboot2实例教程">
    <meta name="description" content="springboot2实例教程">
       <title>登录成功</title>
</head>
<body>
<p><span th:text="${session.username}"></span>,登陆成功!</p>
<div style="width: 600px;margin: 10px auto;">
     <table border="1" style="width: 100%">
    <caption><b>用户列表</b></caption>
        <thead>
            <tr>
                <th>ID</th>
                <th>用户名</th>
                <th>密码</th>
                <th>电子邮箱</th>
                <th>操作</th>
            </tr>
        </thead>
        <!-- Thymeleaf迭代 语法 -->
        <tbody>
            <tr th:each="user : ${userList}">
                <td th:text="${user.id}">0</td>
                <td th:text="${user.name}"></td>
                <td th:text="${user.password}"></td>
                <td th:text="${user.email}"></td>
                <td><a th:href="@{/index/deleteUser(id=${user.id})}">删除</a></td>
            </tr>
        </tbody>
    </table>
    <a th:href="@{/index/toAdd}">新增</a>
</div>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容