工程下载地址:https://files.cnblogs.com/files/xiandedanteng/MMSpringWeb20191027-1.rar

工程目录结构如图:

1.创建工程

有些网文推荐用New Spring Start Project生成工程,并把MyBatis/JDBC/MySql的依赖全选上,再加上必需的spring web和thymeleaf。我试了以下发现工程创建出来后STS总是在Build中,超过半个一个小时还没完,只好作罢。

于是从New Spring Start Project生成工程,只加上必需的spring web和thymeleaf依赖,工程自然迅速创建好了。

2.添加依赖

接下来在pom.xml中手动添加依赖项。具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hy</groupId>
    <artifactId>MMSpringWeb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MMSpringWeb</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

以上粗体部分是我手工填上去的。

3.添加log4j的配置文件

在src/main/resources下添加文件log4j.properties,内容如下:

#Output information(higher than info) to stdout and file.info/debug/error
log4j.rootLogger=INFO, stdout,File

#MyBatis log setting
log4j.logger.tk.mybatis.simple.mapper=TRACE

#Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

#File
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = d://log4j.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n

这一步不是关键步骤,如果跳过问题也不大。

4.在application.properties中添加数据库和MyBatis的相关配置,内容如下:

# MySql Database COnfigaration
spring.datasource.url=jdbc:mysql://192.168.161.129:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# Mapper.xml files location
mybatis.mapper-locations=classpath:mapper/*.xml

# Mapper.java files package
mybatis.type-aliases-package=com.example.demo.mapper

MySql数据库的配置毋庸多言,一目了然。而mybatis.mapper-locations实际在src/main/resources下的mapper目录,里面放的是写sql的xml文件(XXMapper.xml); mybatis.type-aliases-package是放Mapper接口文件的类路径,XXMapper接口文件和XXMappper.xml文件是一一对应的关系。

5.在src/main/resources/mapper中书写文件EmpMapper.xml,这个里面主要写sql语句

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hy.csvdld.dao.EmpMapper">

    <select id="selectTenEmp" resultType="com.hy.csvdld.Entity.Emp">
        select id,name,age,cdate as ctime from emp order by id limit 10
    </select>

</mapper>

6.书写与EmpMapper.xml对应的接口,这种类相当于SSH时代的dao:

package com.hy.csvdld.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.hy.csvdld.Entity.Emp;

@Mapper
public interface EmpMapper {
    List<Emp> selectTenEmp();
}

返回数据的实体类是:

package com.hy.csvdld.Entity;

import java.text.MessageFormat;

public class Emp {
    private long id;
    private String name;
    private int age;
    private String ctime;

    public Emp() {

    }

    public Emp(String name,int age,String ctime) {
        this.name=name;
        this.age=age;
        this.ctime=ctime;
    }

    public String toString() {
        Object[] arr={id,name,age,ctime};
        String retval=MessageFormat.format("Employee id={0},name={1},age={2},created_datetime={3}", arr);
        return retval;
    }

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getCtime() {
        return ctime;
    }
    public void setCtime(String ctime) {
        this.ctime = ctime;
    }
}

7.书写服务类

package com.hy.csvdld.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hy.csvdld.Entity.Emp;
import com.hy.csvdld.dao.EmpMapper;

@Service
public class EmpService {
    @Autowired
    private EmpMapper empMapper;

    public List<Emp> selectTenEmp(){
        return empMapper.selectTenEmp();
    }
}

8.书写控制器,里面通过service,再通过mapper从数据库取出数据准备传到页面上。

package com.hy.csvdld.ctrl;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.hy.csvdld.Entity.Emp;
import com.hy.csvdld.service.EmpService;

@Controller
public class WebCtrl {
    private static Logger log = Logger.getLogger(WebCtrl.class);

    @Autowired
    EmpService empService;

    @RequestMapping("/")
    public String index(Model model) {
        List<Emp> ls=empService.selectTenEmp();
        log.info(ls.size());
        for(Emp emp:ls) {
            log.info(emp);
        }

        model.addAttribute("emps", ls);
        log.info("进入index页");
        return "index.html";
    }
}

9.启动类,这个类是自动生成的,不用写

package com.hy.csvdld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MmSpringWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(MmSpringWebApplication.class, args);
    }

}

10.书写页面,页面在src/main/resources/templates下,:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Happy as larry</title>
</head>

<body>
    <h2>SpringBoot/MyBatis/MySql/thymeleaf/Log4j整合工程</h2>
    <hr/>
    <table border="1px">
        <caption>从数据库取出的员工信息</caption>
        <tr>
            <th>#</th><th>name</th><th>age</th><th>created timestamp</th>
        </tr>
        <tr th:each="emp:${emps}">
            <td><a th:text="${emp.id}"></a></td>
            <td><a th:text="${emp.name}"></a></td>
            <td><a th:text="${emp.age}"></a></td>
            <td><a th:text="${emp.ctime}"></a></td>
        </tr>
    </table>
</body>
</html>

到这里就完成了,如果有没有描叙清楚的请到工程里查吧,直接从下载工程改写也是一个不错的省事办法。

截图:

--END-- 2019年10月27日13:47:10

【SpringBoot】SpringBoot/MyBatis/MySql/thymeleaf/Log4j整合工程的更多相关文章

  1. Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket

    https://blog.csdn.net/a123demi/article/details/78234023  : Springboot集成mybatis(mysql),mail,mongodb,c ...

  2. SpringBoot 使用JPA+MySQL+Thymeleaf 总结 二

    SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一 SpringBoot 使用JPA+MySQL+Thymeleaf 总结 二 方法一 使用原生sql查询 或者 为方法名增加 ...

  3. SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一

    SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一 SpringBoot 使用JPA+MySQL+Thymeleaf 总结 二 pom引用 <?xml version=& ...

  4. springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

    @_@ 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) myba ...

  5. maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

    转自:https://www.cnblogs.com/lmei/p/7190755.html?utm_source=itdadao&utm_medium=referral @_@ 写在最前 之 ...

  6. Springboot+Shiro+Mybatis+mysql

    一 .shiro框架 Shiro是Apache 的一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.Shiro 主要分为两个部分就是认证和授权两部分 1.Subject代表了当前 ...

  7. SpringBoot 使用Mybatis+MySql

    pom配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  8. springboot+eureka+mybatis+mysql环境下报504 Gateway Time-out

    1.test环境下的数据库配置的 driver和url有问题, 在工程日志中的表现是不能打印出最新的日志,在部署前的日志能看到报错:

  9. spring-boot、mybatis整合

    一.MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 X ...

随机推荐

  1. 【Redis】事务 (超详细)

    一.概述 二.相关命令列表 2.1 MULTI 2.2 EXEC 2.3 DISCARD 2.4 WATCH key [key ...] 2.5 UNWATCH 三.命令示例 3.1 事务被正常执行 ...

  2. iptables网络防火墙和SNAT原理实战

    网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...

  3. SPI学习笔记1

    SPI 简介 SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口.是 Motorola首先在其 MC68HCXX 系列处理器上定义的. SPI ...

  4. I2C总线、设备、驱动

    I2C总线.设备.驱动 框架 I2C驱动框架可分为3个部分,分别是:I2C核心层.I2C总线驱动层(适配器层)以及I2C设备驱动层: I2C核心层 提供了统一的I2C操作函数,主要有两套函数smbus ...

  5. idou老师教你学Istio 15:Istio实现双向TLS的迁移

    在Istio中,双向TLS是传输身份验证的完整堆栈解决方案,它为每个服务提供可跨集群的强大身份.保护服务到服务通信和最终用户到服务通信,以及提供密钥管理系统.本文阐述如何在不中断通信的情况下,把现存I ...

  6. python3 基础二——基本的数据类型一

    一.基本的数据类型 Python3 中有六个标准的数据类型Number(数字). String(字符串). List(列表) .Tuple(元组). Sets(集合) .Dictionary(字典) ...

  7. 解决 分布式事务中HRESULT:0x8004D025 错误

    最近在开发分布式事务的过程中,碰到 该伙伴事务管理器已经禁止了它对远程/网络事务的支持. (异常来自 HRESULT:0x8004D025)的错误. 后来检查到,原来是数据库服务器的MSDTC 没有设 ...

  8. Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final

    笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ...

  9. Java 基础 面向对象: 接口(interface )概念 以及接口之练习3 -定义一个接口用来实现两个对象的比较并 判断instanceof是否为同类

    接口(interface )概念概念笔记 及测试代码: /** 面向对象: 接口(interface ) 是与类并行的一个概念: * 1.接口可以看成一个特殊的抽象类,它是常量与抽象方法的一个集合 * ...

  10. pipenv安装报错ReadTimeoutError

    原因:pip下载源默认设置为国外 解决:将pip下载源切换为国内地址 操作: 在C:\Users\Administrator\下新建pip文件夹,在创建pip.ini文件,拷贝下面代码进去,保存 切换 ...