https://blog.csdn.net/sxzlc/article/details/120679525

目录

■相关知识1(其他代码)

■相关知识2(补充说明)

■目录结构

■配置文件

■POM

└默认会导入SLF4j和logback相关的jar

■logback-spring.xml

■application.properties

・注意点(配置文件)

■DB

■Java代码

1.HelloWorldMainApplication (启动类)

2.UserController  (控制类)

3.User

4.UserMapper.java (关联对应的DB操作相关的UserMapper.xml文件 【@Mapper】)

5.UserRepositoryImpl (@Repository 层)

6.UserRepository

7.UserService  (@Service 层)

@Transactional的属性

■xml代码

■访问效果

■DB数据

■启动Log

■加载顺序(application.properties)



■相关知识1(其他代码)

SpringBoot + Thymeleaf 之 HelloWorld_sun0322-CSDN博客

SpringBoot + MyBatis + Thymeleaf 之 HelloWorld_sun0322-CSDN博客

■相关知识2(补充说明)

只是helloWorld,关于DB操作时的事物处理,并没有事物的具体使用。

(只是使用了一个标注(@Transactional),意思一下)

■目录结构

更新:添加了logback

---

■配置文件

■POM

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>sxz.com</groupId><artifactId>SpringBootStaduy001</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>SpringBootStaduy001</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 画面,thymeleaf,需要使用的驱动类  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 访问数据库,需要使用的驱动类  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- 纯MyBatis使用的类(比如@Mapper)  --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!-- MyBatis与Spring结合,使用到的类(比如@MapperScan)  --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.0</version></dependency><!-- MyBatis与Spring结合,使用到的类(没有启动时会报错)  --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency><!-- Log4j  --><!-- <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId></dependency> --><!-- lombok  --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins>
</build></project>

└默认会导入SLF4j和logback相关的jar

■logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern></encoder></appender><appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder><pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern></encoder><file>J:/logs/sxz-web.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>logs/sports-web.-%d{yyyyMMdd}.%i.log</fileNamePattern><!-- 每天一个日志文件,当天的日志文件超过10MB时,生成新的日志文件,当天的日志文件数量超过totalSizeCap/maxFileSize,日志文件就会被回滚覆盖。 --><maxFileSize>10MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>10GB</totalSizeCap></rollingPolicy> </appender><logger name="com.sxz" level="DEBUG" additivity="false"><appender-ref ref="STDOUT"/><appender-ref ref="LOG_FILE"/><!--<appender-ref ref="myAppender"/>--></logger><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="LOG_FILE"/><!--<appender-ref ref="mqAppender"/>--></root>
</configuration>

■application.properties

server.port=443
server.ssl.key-store: .keystore
server.ssl.key-store-password: tomcat
server.ssl.keyStoreType: JKS
server.ssl.keyAlias: myTomcat# 画面 thymeleaf 配置
spring.thymeleaf.enabled:true
spring.thymeleaf.cache: false
spring.thymeleaf.mode: html# 数据库连接配置
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver
spring.datasource.url: jdbc:mysql://localhost:3306/messageboard
spring.datasource.username: root
spring.datasource.password: root001
spring.datasource.sql-script-encoding: UTF-8#mybatis的相关配置
mybatis.mapper-locations: classpath:mapper/*.xml
mybatis.type-aliases-package: com.sxz.test.one.entity#开启驼峰命名
mybatis.configuration.map-underscore-to-camel-case: true

・注意点(配置文件)

・ 这一版springboot的配置文件,不支持阶梯式命名!!!

・数据库访问XML位置  (下面黄色标记(可自行定义文件夹结构))

・访问数据库,需要使用的驱动类(的Maven配置)

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

 ・通过Spring的基类,自动配置数据源

DataSourceAutoConfiguration

---

 ---

■DB

■Java代码

1.HelloWorldMainApplication (启动类)

package com.sxz.test.one;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;@SpringBootApplication
@MapperScan("com.sxz.test.one.mapper")
public class HelloWorldMainApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(HelloWorldMainApplication.class,args);}
}

---

@MapperScan

 在持久层的接口上添加@Mapper注解,编译后会生成相应的接口实现类,
   但由于要在每个接口上都进行配置,
      为了简化配置,所以产生了@MapperScan。

---

@MapperScan 是扫描mapper类的注解,
         在配置类中,使用@MapperScan注解之后,
         就不用在每个,持久层的接口上添加@Mapper注解
         (等同与,对每个持久层的接口,  都加上了@Mapper注解)

---

标注【@MapperScan】对应的Maven配置

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

注意,只是对应上面第一个依赖,但是第二个也要写,不写会出如下的错误

java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBean()
    at java.lang.reflect.Method.getDefaultValue(Method.java:612) ~[na:1.8.0_191]

2.UserController  (控制类)

package com.sxz.test.one.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.sxz.test.one.entity.User;
import com.sxz.test.one.service.UserService;@RestController
@RequestMapping("/user")
public class UserController {@AutowiredUserService userService;@RequestMapping("/findAll")public List<User> findAll(){return userService.findAll();}
}

有两个 @RequestMapping("/XXX")

所以访问时,按照下面的地址访问。

https://10.10.10.194/user/findAll

3.User

package com.sxz.test.one.entity;import java.io.Serializable;import lombok.Data;@Data
public class User implements Serializable {private String luId;private String luPass;private String luPermission;
}

注意,要提前引入lombok

    <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

・扩展(lombok安装)

Eclipse中,lombok安装_sun0322-CSDN博客

4.UserMapper.java (关联对应的DB操作相关的UserMapper.xml文件 【@Mapper】)

在持久层的接口上添加@Mapper注解,编译后会生成相应的接口实现类,

package com.sxz.test.one.mapper;import java.util.List;import org.apache.ibatis.annotations.Mapper;import com.sxz.test.one.entity.User;@Mapper
public interface UserMapper {public List<User> findAll();
}

标注【@Mapper】对应的Maven配置

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

・关联对应的xml文件

5.UserRepositoryImpl (@Repository 层)

package com.sxz.test.one.repository.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;import com.sxz.test.one.entity.User;
import com.sxz.test.one.mapper.UserMapper;
import com.sxz.test.one.repository.UserRepository;@Repository
public class UserRepositoryImpl implements UserRepository {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> findAll() {return userMapper.findAll();}
}

6.UserRepository

package com.sxz.test.one.repository;import java.util.List;import com.sxz.test.one.entity.User;public interface UserRepository {public List<User> findAll();
}

7.UserService  (@Service 层)

package com.sxz.test.one.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import com.sxz.test.one.entity.User;
import com.sxz.test.one.repository.UserRepository;@Service
// @Transactional
@Transactional(isolation=Isolation.READ_COMMITED, propagation=Propagation.REQUIRES_NEW)
public class UserService {@Autowiredprivate UserRepository userRepository;public List<User> findAll() {return userRepository.findAll();}
}

@Transactional的属性

=======

■xml代码

UserMapper.xml(关联代码【4.UserMapper】)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sxz.test.one.mapper.UserMapper"><select id="findAll" resultType="User">select * from login_user</select>
</mapper>

----

■访问效果

​​​​​​https://10.10.10.194/user/findAll

■DB数据

----

■启动Log

.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::       (v2.3.10.RELEASE)2021-10-10 13:18:51.809  INFO 2236 --- [           main] c.s.test.one.HelloWorldMainApplication   : Starting HelloWorldMainApplication on PC_NAME with PID 2236 (C:\dev\SpringBootHelloWorld\target\classes started by LOGIN_USER_NAME in C:\dev\SpringBootHelloWorld)
2021-10-10 13:18:51.813  INFO 2236 --- [           main] c.s.test.one.HelloWorldMainApplication   : No active profile set, falling back to default profiles: default
2021-10-10 13:18:53.102  INFO 2236 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 443 (https)
2021-10-10 13:18:53.112  INFO 2236 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2021-10-10 13:18:53.112  INFO 2236 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.45]
2021-10-10 13:18:53.200  INFO 2236 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-10-10 13:18:53.200  INFO 2236 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1335 ms
2021-10-10 13:18:53.653  INFO 2236 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2021-10-10 13:18:53.738  INFO 2236 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2021-10-10 13:18:54.400  INFO 2236 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 443 (https) with context path ''
2021-10-10 13:18:54.406  INFO 2236 --- [           main] c.s.test.one.HelloWorldMainApplication   : Started HelloWorldMainApplication in 2.989 seconds (JVM running for 3.38)
2021-10-10 13:19:05.084  INFO 2236 --- [-nio-443-exec-9] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-10-10 13:19:05.084  INFO 2236 --- [-nio-443-exec-9] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-10-10 13:19:05.100  INFO 2236 --- [-nio-443-exec-9] o.s.web.servlet.DispatcherServlet        : Completed initialization in 16 ms
2021-10-10 13:19:05.175  INFO 2236 --- [-nio-443-exec-9] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2021-10-10 13:19:05.534  INFO 2236 --- [-nio-443-exec-9] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

---

■加载顺序(application.properties)

如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。

①project:/config/(项目根目录下面config文件夹里的配置文件)

②project:/config/*/(项目根目录下面config文件夹里的配置文件)
③project:/(项目根目录下面的配置文件)
④classpath:/config/(Resources文件夹下面config文件夹里的配置文件)
⑤classpath:/(Resources文件夹下面的配置文件))

---

SpringBoot + MyBatis 之 Hello World相关推荐

  1. Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊,管理员可对宠物 ...

  2. Java项目:实现个人博客系统(java+springboot+mybatis+redis+vue+elementui+Mysql)

    源码获取:博客首页 "资源" 里下载! springboot+mybatis+前端vue,使用前后端分离架构实现的个人博客系统,共7个模块,首页,写博客,博客详情页,评论管理,文章 ...

  3. Java项目:实现权限管理系统(java+SpringBoot+MyBatis+AOP+LayUI+Mysql)

    源码获取:博客首页 "资源" 里下载! springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统. 共五个模块,角色管理,菜单管理,实验室管理,学生管理,管 ...

  4. springboot+mybatis ,出现多于的参数导致查询数据缺少

    在springboot+mybatis 中,经常会有多于的字段遗留在xml文件中,这种情况正常人会以为会判断空和null状态,不影响sql语句,但是实际上会有影响, 因为在parameter中未定义, ...

  5. 一个基于SpringBoot + Mybatis + Vue的代码生成器

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! code-gen 一款代码生成工具,可自定义模板生成不同的 ...

  6. SpringBoot mybatis Interceptor分页实现

    环境准备 什么是拦截器 为什么要这样写 具体实现 什么是拦截器 SpringBoot mybatis interceptor拦截器是你在执行SQL语句之前对执行的SQL语句进行修改 分页的原理是通过拦 ...

  7. SpringBoot+Mybatis配置Druid多数据源

    开篇之前,说一句题外话.多数据源和动态数据源的区别. 多数据源,一般用于对接多个业务上独立的数据库(可能异构数据库). 动态数据源,一般用于大型应用对数据切分. 配置参考 如何配置多数据源,网上教程一 ...

  8. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel

    springboot+mybatis+sqlserver导出数据库数据并实现下载到excel 1.准备工作 1.1 下载一个springboot框架demo 1.2 配置maven 1.3 引入需要的 ...

  9. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描...

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  10. springboot mybatis plus 关闭驼峰式命名转换为下划线

    springboot mybatis plus 关闭驼峰式命名转换为下划线 报错信息是这样的: org.springframework.jdbc.BadSqlGrammarException: ### ...

最新文章

  1. [Manthan, Codefest 18][Codeforces 1037E. Trips]
  2. [c++] vector<vector<int>>排序
  3. Mysql 的使用方式,挺全的够用了
  4. shell实例第7讲:awk命令
  5. maven打包的各种方式和如何在使用maven-assembly-plugin打包时去掉assembly id
  6. ab flash player 8_FLASH 质子治疗的技术挑战
  7. .NET平台下几种SOCKET模型的简要性能供参考
  8. java 异步得到函数返回值_使用JavaScript进行异步编程
  9. AgileEAS.NET平台开发Step By Step系列-药店系统-索引
  10. 信息服务器 iis 5.0,使用IIS 5.0调整Web服务器的艺术与科学(4)
  11. WebService的网络协议
  12. c语言指针教学word,C语言中的指针和指针教学
  13. 顶尖作者介绍 | 心理学领域研究“情绪”的大牛们有哪些?
  14. 基于javaweb+mysql的高校学生会社团管理系统(前台、后台)
  15. 单模光电转换器怎么接_单纤光纤收发器a与b怎么放?如何使用光纤收发器的AB端?...
  16. easyui datagrid表格头部鼠标右键进行列隐藏和展示
  17. 2021-2028年按技术(2D、3D、面部分析)、应用程序(访问控制、安全和监控)、最终使用、地区和细分预测分列的面部识别市场规模、份额和趋势分析报告
  18. 世界上最常用的几种语言
  19. 数学分析(6): 微分
  20. 美在永雄,word哥

热门文章

  1. python编程常用类型_Python 高级编程系列__03:python 中常见的内置类型
  2. 是用于mac的linux,用于Mac OS X的Can(CUPS)ppd文件可用于Linux吗?
  3. c++ qml 数组_【QML与C++混合编程】用QVariantList传递数组类型成员
  4. 基于python的文件加密传输_Python优雅的加密传输文件
  5. redolog switch会发生完全检查点还是增量检查点?
  6. matlab作图图例,为scatter3 plot创建图例(Matlab)
  7. 比较连续分配、分页和分段三种存储分配机制的优缺点_第十九期-处理器存储模型概述(1)...
  8. js带开关的时钟_避雷器带计数器HY5WZ-17/45-JS
  9. LAMP架构(LAMP介绍,mysql/mariaDB介绍,Mysql安装)
  10. ES6解构赋值原理详解