SpringBoot部分笔记整理

第一节,创建springboot工程


1、微服务

概念:微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议

2、SpringBoot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者

3、环境约束

  1. jdk1.8以上版本(java -version 可查看jdk)
  2. 2maven 3.3以上版本

4、目录结构

  1. static:静态资源文件
  2. templates:模板文件
  3. application.properties:配置文件

5、注意(Spring boot)

  1. springboot内置了Tomcat,不需要配置Tomcat,可以在application.properties对端口号等服务端信息进行配置
  2. SpringBoot将各个应用/三方框架 设置成了一个个"stater",要用哪个场景引入哪个场景即可"开箱即用"
    • @SpringBootApplication:spring boot 的主配置类
    • @SpringBootConfiguration包含@Configuration,表示“配置类”
    • @EnableAutoConfiguration:使spring boot可以自动配置

6、运行SpringBoot主程序测试

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

7、将程序打包成一个可以执行的jar包

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

8、总结

  1. 自己写的代码通过@SpringBootConfiguration自动帮我们配置
  2. 三方依赖通过@EnableAutoConfiguration开启使用即可

第二节,SpringBoot基本配置


一、SpringBoot默认使用的全局配置文件

  • application.properites
  • application.yml
  • 作用:可以对一些默认配置值进行修改
  • 注意:配置文件的名称是固定的

二、如何修改springBoot的默认配置

模式:

  1. SpringBoot在自动配置组件的时候,会先看容器中有没有用户自己配置的(@Bean、@Component)如果没有才自动配置,如果有些组件可以有多个(ViewResolver),会将用户的配置和自己的默认的结合起来

三、.yml(YAML)

YAML(YAML Ain’t Markup Language)一种简洁的标记语言的文件,以数据为中心比json、xml等更适合做配置文件

sercer:
	port:8090

四、.yml基本语法

1、语法规则
  1. 大小写敏感
  2. 使用缩进表示 层级关系
  3. 缩进时不允许使用 tab键,只允许使用空格
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
2、值的写法
  1. 字符串默认不用加上单引号或者双引号
  • “”:双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思
  • ‘’:单引号:会转义特殊字符,特殊字符终只是一个普通的字符串数据
  1. 对象 (对象的一组键值对,使用冒号结构表示)
#普通写法
firends:
	name: 张三
	age: 20
	
#行内写法
firends: {name: 张三,age: 20}
  1. 数组 (用值表示数据中的一个元素)
#普通写法
person:
  - student
  - boss
  - teacher
#行内写法
person:[student, boss, teacher]
  1. Map (直接使用键值对)
#普通写法
name: tian
age: 12
#行内写法
{name: tian, age: 12}

五、配置文件

  1. 配置文件乱码解决方式
    在这里插入图片描述

  2. @Value获取值和@ConfigurationProperties获取值比较

    功能 @ConfigurationProperties @Value
    指定方式 批量注入配置文件中的属性 一个个指定
    松散语法 支持 不支持
    SpEl 不支持 支持
    JSR303数据校验 支持 不支持
  3. @Property Source & @ImportResource的区别

    @Property Source:加载指定的配置文件

    @ImportResource:导入Spring的配置文件,让配置文件里面的内容生效

六、配置文件占位符

  1. 随机数

    ${random.value}
    ${random.int}
    ${random.long}
    ${random.int(10)}
    ${random.int(1024,65536)}
    
  2. 可使用占位符获取之前配置的值,如果没有可以用 “:”指定默认值

七、激活指定profile

  1. 在配置文件中指定 spring.profiles.active=dev

  2. 命令行:

    java-jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

  3. 虚拟机参数

    -Dspring.profiles.active=dev

八、配置文件加载位置

​ -file:./config/

​ -file:./

​ -classpath:./config/

​ -classpath:/

​ 优先级由高到低,高优先级的配置会覆盖低优先级的配置,同时互补;

九、自动配置原理

  1. SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration

  2. 每一个自动配置类进行自动配置功能

  3. 所有在配置文件中能配置的属性都是在xxxxProperties类中封装,可以参照功能对应的属性类

  4. 我们能配置的属性都是来源于Properties

  5. 一但配置类生效,配置类会给容器中添加各种组件,组件的属性是从对应的properties类中获取的,properties类里面的每一个属性又是和配置文件绑定的

  6. 精髓:①、SpringBoot启动会加载大量的自动配置类

    ​ ②、先看我们需要的功能有没有SpringBoot默认写好的自动配置类

    ​ ③、再看这个自动配置类有哪些组件(要用的组件有,就不用自己配置了)

    ​ ④、给容器中自动配置类添加组件的时候,会从properties类中获取属性,可以在配置文件中指定这些 属性的值

    ​ ⑤、自动配置类必须在一定的条件下才能生效,可以通过配置debug=true打印自动配置报告

    @Configuiation								//表示这是一个配置类
    @EnableConfiguiationProperties(xxx.class)	//启动指定类的功能进行绑定
    @ConditionalOnWebApplication	//判断当前是否是web应用,如果是当前配置生效
    @ConditionalOnClass(xxx.class)	//判断当前项目有没有xxx类
    	//CharacterEncodingFilter:SpringMvc中进行乱码解决的过滤器
    @ConditionalOnProperty			//判断配置文件中是否存在某个配置
    @Bean	//给容器中添加一个组件
    

第三节,日志


一、常用日志框架

  1. 市面上常用的日志框架:JUL,JCL,jboss-Logging,logback,log4j,log4j2,slf4j…

    日志门面 日志实现
    JCL(jakarta Commons Logging)
    slf4j(Simple Logging Facade for java)
    jboss-Logging
    log4j
    log4j2
    JUL(java.util.logging)
    Logback
    springboot选用slf4jLogback

二、如何让系统中所有的日志都统一到slf4j

  1. 将系统中其他日志框架先排除掉
  2. 用中间包来替换原有的日志框架
  3. 导入slf4j其他的实现
  4. SpringBoot能自动适配所有的日志,如果要引入其他框架,一定要把其他框架的默认日志依赖移除掉
  5. 在这里插入图片描述
  • 查看依赖关系:右击Diagram→Show Dependencies…

三、日志配置的修改与格式

  1. 日志输出配置修改

    #指定日志级别
    logging.level.com.sboot.firstboot=trace
    #指定输出日志位置
    logging.path=/spring/log
    #指定控制台输出日志格式
    logging.pattern.console=控制台日志
    #指定文件输出日志格式
    logging.pattern.file=文件日志
    #激活开发环境
    spring.profiles.active=dev
    #禁用缓存
    spring.thymeleaf.cache=false
    
  2. 日志输出格式

    %d:表示日期时间

​ %thread:表示线程名

​ %-5level:表示级别从左显示5个字符宽度

​ %logger{50}:表示logger名字最长50个字符,否则按照句点分割

​ %msg:表示日志消息

​ %n:表示换行

​ eg:%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n

  1. 指定配置

    logback.xml:直接被日志框架识别了

    logback-spring.xml:日志框架不加载,由springBoot加载,可使用springboot的高级功能

第四节,SpringBoot WEB开发


一、开发步骤

  1. 创建SpringBoot应用,选中我们需要的模块、、、、、
  2. 在配置文件中指自己编写业务代码

二、SpringBoot对静态资源的映射规则

  1. webjars:以jar包的方式引入静态资源

  2. 访问当前项目静态资源

    "classpath:/META-INF/resources"
    "classpath:/resources"
    "classpath:/static"
    "classpath:/public"
    "/"	//当前项目根路径
    
  3. 欢迎页/首页 默认访问静态资源文件夹下的 index.html

  4. 网页图标默认访问静态资源文件下的 /favicon.ico

三、模板引擎

常用引擎:jsp、Velocity、Freemarker、thymeleaf(Spring推荐)

  1. Thymeleaf使用&语法

    把HTML页面放在classpath:/templates/下 Thymeleaf就可以自动渲染

    使用:

    ①导入thymeleaf的语法空间

    <html lang="en" xmlns:th="http://www.thymelealf.org"/>
    

    ②使用thymeleaf语法

四、扩展和接管SpringMVC

1)扩展SpringMVC

​ 方法:编写一个配置类(@Configuration),是WebMvcConfigurAdapter类型,不能标注@EnableWebMvc,SpringBoot既保留了自动配置,也能用我们扩展的配置。

改名快捷键:shift+f6

2)全面接管SpringMVC

方法:如果SpringBoot对SpringMVC的自动配置不需要了,所有的都想自己配置,需要在配置类中添加@EnableWebMVC(所有的SpringMVC自动都失效了);

原理:@EnableWebMVC将WebMvcConfigurationSupport组件导入进来WebMvcConfigurationSupport只是SpringMvc的基本功能

五、实验

1)国际化

default Setting →全局默认设置,可以解决配置文件中文乱码问题

  • springMVC的做法:
  1. 编写配置文件

  2. 管理国际化资源文件

  3. 在页面使用fmt:message取出国际化内容

  • springBoot的做法
  1. 编写国际化配置文件,抽取页面需要显示的国际化消息

    ​ xxx_en_US.properties → 代表英文配置文件

    ​ xxx_zh_CN.properties → 代表中文配置文件

    #配置文件如果直接放在类路径下则不用进行配置,否则须在application.properties里配置
    spring.message.basename=你的路径
    
  2. SpringBoot自动进行国际化资源文件的配置

  3. 去页面获取国际化的值

    <div th:text="#{配置文件里的名字 eg.login.btn}">内容内容内容</div>
    

2) 错误消息提示

<!-- 有错误就提示 -->
<p style="color: red" th:text="${msg}" th:if="not #strings.isEmpty(msg)"></p>

3) 防止表单重复提交

//转发产生的表单重复提交可以用重定向来解决
return "redirect:/index.html";
//转发
return "forward:/index.html";

4) 提取公共部分

<!--1、抽取公共片段-->
<div th:fragment="copy" id="id">内容内容内容内容</div>
<!--2、引入公共片段-->
<!--语法1:模板名::片段明-->
<div th:insert/replace/include="~{footer::copy}"></div>
<!--语法2:模板名::选择器-->
<div th:insert/replace/include="~{footer::#id}"></div>
<!--简写语法-->
<div th:insert/replace/include="footer::copy"></div>
<!--三种方法的区别-->
<div>
    th:insert(将公共片段整个插入到声明元素中)
    th:replace(将声明引入的元素整个替换为公共片段)
    th:include(将被引入的片段内容包含进这个标签中)
</div>

六、错误处理

定制错误响应页面与数据

有模板引擎的情况

页面能获取的信息:

timestamp:时间戳

status:状态码

error:错误提示

exception:异常对象

message:异常消息

errors:JSR303数据校验错误

没有模板引擎的情况

可以放在静态资源文件夹下,不能获取错误信息

除网页之外的其他方式访问返回错误的json数据

七、嵌入式servlet容器(TomCat)

SpringBoot默认使用Tomcat作为嵌入式的Servlet容器;

1、定制和修改Servlet容器的相关配置;

1).修改和server有关的配置(ServerProperties【也是EmbeddedServletContainerCustomizer】);

server.port=8081
server.context-path=/crud
server.tomcat.uri-encoding=UTF-8
#修改SpringMvc的前端控制器默认拦截的请求路径
# / 不会拦截jsp请求 /* 会拦截jsp请求
server.servletPath=/*

2).编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置

    //配置嵌入式的servlet容器
    @Bean  //一定要将这个定制器加入到容器中
    public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
        return new WebServerFactoryCustomizer<ConfigurableWebServerFactory>() {
            @Override
            public void customize(ConfigurableWebServerFactory factory) {
                //定制嵌入式的Servlet容器相关的规则
                factory.setPort(8084);
            }
        };
    }

2、注册三大组件

由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件

SpringBoot注册三大组件用以下方式

  • ServletRegistrationBean
  • FilterRegistrationBean
  • ServletListenerRegistrationBean
//注册三大组件
//1
@Bean
public ServletRegistrationBean myServlet(){
    ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
    return registrationBean;
}
//2
@Bean
public FilterRegistrationBean myFilter(){
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    registrationBean.setFilter(new MyFilter());
    registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
    return registrationBean;
}
//3
@Bean
public ServletListenerRegistrationBean myListener(){
  ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
        return registrationBean;
}

3、为SpringBoot替换其他嵌入servlet容器

SpringBoot可支持 Jetty(长连接)和Undertow(不支持jsp,并发处理性能高)容器

 <!-- 排除tomcat -->
 <!-- 默认使用TomCat -->
      <exclusion>
         <artifactId>spring-boot-starter-tomcat</artifactId>
         <groupId>org.springframework.boot</groupId>
      </exclusion>
   </exclusions>
<!-- jetty容器 -->
<dependency>
   <artifactId>spring-boot-starter-jetty</artifactId>
   <groupId>org.springframework.boot</groupId>
</dependency>
<!-- undertow容器 -->
<dependency>
   <artifactId>spring-boot-starter-undertow</artifactId>
   <groupId>org.springframework.boot</groupId>
</dependency>

原理

  1. SpringBoot根据导入的依赖,给容器中添加相应的EmbeddedServletContainerFactory
  2. 容器中某个组件要创建对象(嵌入式的servlet工厂)就会触发后置处理器EmbeddedServletContainerBeanPostProcessor;
  3. 后置处理器会从容器中获取所以的EmbeddedServletContainer,然后调用定制方法

4、嵌入式Servlet容器的优缺点

  • 优点:简单、便携;
  • 缺点:默认不支持jsp、优化定制比较复杂;

5、如何使用外置的servlet容器

  1. 创建一个war项目;
  2. 将嵌入式的TomCat指定为provide;
  3. 编写一个SpringBootServletInitializer的子类;(ServletInitializer),并调用configure方法;
  4. 创建web工程的相关目录结构(web.xml等);
  5. 启动服务器就可以使用了;

第五节,docker


一、Docker的使用步骤

  1. 安装Docker

    安装docker
    1、检查内核版本
    	uname -r
    2、升级软件包及内核(高于3.10可以不升级)
    	yun update
    3、安装docker
    	yun install docker
    4、启动docker
    	systemctl start docker
    5、查看docker版本号
    	docker -v
    6、将docker服务设为开机启动
    	systemctl enable docker
    7、关闭docker
    	systemctl stop docker
    
  2. 去Docker仓库找到某个软件的镜像

    #搜索镜像
    docker search 镜像名
    #拉取镜像
    docker pull 镜像名:版本号(不写版本号就下载latest)
    #查看镜像列表
    docker images
    #删除镜像
    docker rmi image-镜像id
    
  3. 使用Docker运行这个镜像,会生成一个Docker容器

    #根据镜像启动容器
    docker run --name 自定义容器名 -d 镜像名:版本号
    #查看运行中的容器
    docker ps
    #查看所有的容器
    docker ps -a
    #停止运行中的容器
    docker stop 容器id
    #启动运行中的容器
    docker start 容器id
    #删除容器(必须在停止状态)
    docker rm 容器id
    #启动的同时做端口映射
    docker run -d -p 8888:8080 镜像名:版本号
    -d:后台运行
    -p:将主机的端口映射到容器的一个端口
    #查看日志
    docker logs 容器名/容器id
    
  4. 对容器的启动停止就是对软件的启动停止

第六节,springBoot连接数据库与Druid连接池


一、数据库连接配置

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://127.0.0.1:3306/studentdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
    driver-class-name: com.mysql.jdbc.Driver

二、测试

package com.test.boottest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;
import java.util.Map;

@Controller
public class jdbcController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @ResponseBody
    @GetMapping("/query")
    public Map<String,Object> map(){
        List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from `classes`");
        return list.get(0);
    }
}

三、druid连接池配置方法

  1. 在pom中加入druid-spring-boot-starter依赖 (点击查询最新版本)
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.20</version>
</dependency>

  <!-- LOG4J -->
<dependency>
	<groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    <scope>compile</scope>
</dependency>
  1. 配置信息

    spring:
      # 数据源配置
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource   # MYSQL 5 驱动:com.mysql.jdbc.Driver,MYSQL 6+ 驱动:com.mysql.cj.jdbc.Driver
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=GMT%2B8
        username: root
        password: 123456
        # 连接池配置
        druid:
          # 初始化大小,最小,最大
          initial-size: 5
          min-idle: 5
          max-active: 20
          # 配置获取连接等待超时的时间
          max-wait: 60000
          # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
          time-between-eviction-runs-millis: 60000
          # 配置一个连接在池中最小生存时间
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 1 FROM sys_user
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          # 打开 PSCache,并且指定每个连接上 PSCache 的大小
          pool-prepared-statements: true
          max-pool-prepared-statement-per-connection-size: 20
          # 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
          filters: stat,wall,log4j
          # 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
          connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
          # 配置 DruidStatFilter
          web-stat-filter:
            enabled: true
            url-pattern: /*
            exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
          # 配置 DruidStatViewServlet
          stat-view-servlet:
            url-pattern: /druid/*
            # IP 白名单,没有配置或者为空,则允许所有访问
            allow: 127.0.0.1
            # IP 黑名单,若白名单也存在,则优先使用
            deny: 192.168.31.253
            # 禁用 HTML 中 Reset All 按钮
            reset-enable: false
            # 登录用户名/密码
            login-username: root
            login-password: 123
    
  2. 进入druid的ui控制台

    http://localhost:8080/druid/login.html
    

第七节,springBoot与MyBatis


一、开启驼峰命名法

  • 方法一:配置文件
mybatis:
  configuration:
    map-underscore-to-camel-case: true
  • 方法二:配置类
@Configuration
public class MybatisConfig {

    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return new ConfigurationCustomizer() {
            @Override
            public void customize(org.apache.ibatis.session.Configuration configuration) {
                configuration.setMapUnderscoreToCamelCase(true);
            }
        };
    }
}

二、配置MyBatis

#指定MyBatis配置文件和映射文件的位置
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

三、扫描Mapper类,可以不写@Mapper注解

//在springboot启动类上加上@MapperScan
@MapperScan("cn.test.springbootmybatis.mapper")

四、Lombok的基本使用

1)什么是Lombok

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。

以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

2)引入相应的maven包

<!--引入LomBok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

3)添加IDE工具对Lombok的支持

IDEA中引入Lombok支持如下:

点击 File → Settings → Plugins 设置界面,安装Lombok插件

4)Lombok实现原理

自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用。

Lombok就是一个实现了"JSR 269 API"的程序。在使用javac的过程中,它产生作用的具体流程如下:

  1. javac对源代码进行分析,生成一棵抽象语法树(AST)
  2. javac编译过程中调用实现了JSR 269的Lombok程序
  3. 此时Lombok就对第一步骤得到的AST进行处理,找到Lombok注解所在类对应的语法树 (AST),然后修改该语法树(AST),增加Lombok注解定义的相应树节点
  4. javac使用修改后的抽象语法树(AST)生成字节码文件

5)常用注解和用法示例

  1. @Getter/@Setter:

    作用于类上,生成所有成员变量的getter/setter方法;

    作用于成员变量上,生成该成员变量的getter/setter方法;

    可以设定访问权限及是否懒加载等;

  2. @ToString:

作用于类,覆盖默认的toString()方法,通过of属性限定显示某些字段,通过exclude属性排除某些字段 ;

  1. @EqualsAndHashCode:

    作用于类,覆盖默认的equals和hashCode**;

  2. @NonNull:

    主要作用于成员变量和参数中,标识不能为空,否则抛出空指针异常;

  3. @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor:

    作用于类上,用于生成构造函数。有staticName、access等属性;

    staticName属性一旦设定,将采用静态方法的方式生成实例;

    access属性可以限定访问权限;

  4. @NoArgsConstructor:

    生成无参构造器;

  5. @RequiredArgsConstructor:

    生成包含final和@NonNull注解的成员变量的构造器;

  6. @AllArgsConstructor:

    生成全参构造器

  7. @Data:作用于类上,是以下注解的集合:

    @ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor;

  8. @Builder:

    作用于类上,将类转变为建造者模式;

  9. @Log:

    作用于类上,生成日志变量;

  10. @Cleanup:

自动关闭资源,针对实现了java.io.Closeable接口的对象有效;
  1. @Synchronized:
作用于方法级别,可以替换synchronize关键字或lock锁,用处不大; 

-------------------------------------------------示例-------------------------------------------------------

package com.test.boottest.pojo;

import lombok.Getter;
import lombok.Setter;

/**
 * 使用Lombok的实体类示例
 */
@Getter
@Setter
public class ClassInfo {
    private Integer id;
    private String name;
}

五、MybatisGenerator(MyBatis逆向工程)

1)什么是MyBatis逆向工程

MyBatis Generator简称(MBG)是一个可以用来生成Mybatis dao,entity,Mapper文件的一个工具,在项目的过程中可以省去很多重复的工作,我们只要在MyBatis Generator的配置文件中配置好要生成的表名与包名即可。

官网: http://mybatis.org/generator/

2) MybatisGenerator使用步骤

  1. idea添加 mybatis-generator 插件

  2. 引入工程

    这里使用的是maven包管理工具,在pom.xml添加以下配置,以引入mybatis.generator

     <!-- mybatis-generator自动生成代码插件 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>
        </plugins>
    </build>
     <!-- MySql -->
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    
  3. 创建database.properties配置文件

    jdbc.driverLocation=D://Maven//LocalWarehouse//mysql//mysql-connector-java//5.1.28//mysql-connector-java-5.1.28.jar
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://127.0.0.1:3306/studentdb?useUnicode=true&characterEncoding=utf-8
    user=root
    password=root
    

    注意:database.properties里面的jdbc.driverLocation指向是你本地maven库对应mysql-connector地址

  4. 编写 generatorConfig.xml 文件

    <?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>
        <!--导入属性配置-->
        <properties resource="database.properties"></properties>
        <!--指定特定数据库的jdbc驱动jar包的位置(绝对路径)-->
        <classPathEntry location="${jdbc.driverLocation}"/>
        <context id="testTable" targetRuntime="MyBatis3">
            <commentGenerator>
                <!--是否去除自动生成的注释 true是:false 否-->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库连接-->
            <jdbcConnection driverClass="${driver}" connectionURL="${url}" userId="${user}" password="${password}"></jdbcConnection>
            <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal -->
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!--targetPackage目标包,生成实体类的位置-->
            <javaModelGenerator targetPackage="com.st.entity" targetProject="src/main/java">
                <!--enableSubPackages,是否让schema作为包的后缀-->
                <property name="enableSubPackages" value="false"/>
                <!--从数据库返回的值被清除前后空格-->
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!--targetProject:mapper映射文件生成的位置-->
            <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
                <property name="enableSubPackages" value="false"></property>
    
            </sqlMapGenerator>
            <!--targetPackage:mapper接口生成的位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.st.dao" targetProject="src/main/java">
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
            <!--指定数据库表,要和数据库中进行对应,否则将会出错-->
            <table tableName="classes"  domainObjectName="classes"
                   enableCountByExample="false" enableUpdateByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   selectByExampleQueryId="false"></table>
            <table tableName="student"  domainObjectName="student"
                   enableCountByExample="false" enableUpdateByExample="false"
                   enableDeleteByExample="false" enableSelectByExample="false"
                   selectByExampleQueryId="false"></table>
        </context>
    </generatorConfiguration>
    

第八节,高级

<待整理>

原创文章 6 获赞 10 访问量 265

猜你喜欢

转载自blog.csdn.net/ShaoTo/article/details/105856682
今日推荐