首页 > 其他分享 >SpringBoot02_Mybatis和配置文件

SpringBoot02_Mybatis和配置文件

时间:2023-05-18 15:37:28浏览次数:49  
标签:map 配置文件 SpringBoot02 private public application Mybatis yml

关于本文的大体框架在上一篇博客

一、SpringBoot 整合 Mybatis

(一)配置文件

​ 引入 springboot 与 mybatis 整合包以及 java-connector

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>

​ 在 yml 配置文件中设置练级数据库参数,需要注意:yml 文件的值与前面的 ":" 之间有空格;不要把 username 写成 name,否则会有奇怪的 404 错误:Public Key Retrieval is not allowed。image-20230507153206920

#开发环境
server:
  port: 8080
  servlet:
    context-path: /springboot01
#链接数据库参数
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=UTC&allowPublicKeyRetrieval=true
    name
    username: root
    password: 
    driver-class-name: com.mysql.cj.jdbc.Driver

(二)完成业务逻辑

​ 要是一路从 spring 、mybatis 过来的相比下面的完全能理解。

sql

CREATE TABLE `book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `book_name` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `book_author` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

1.POJO

package com.qlu.springboot01.pojo;
@Data
@Accessors(chain = true)
public class Book {
    private Long id;
    private String bookName;
    private String bookAuthor;
    private Date createTime;
    private Date updateTime;
}

2.controller

package com.qlu.springboot01.controller;

@RestController
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;

    @RequestMapping("/list")
    public List<Book> list() {
        return bookService.findAll();
    }
}

3.service

package com.qlu.springboot01.service;
public interface BookService {
    /**
     * 查询所有
     * @return
     */
    List<Book> findAll();
}
//——————————————————————————————————————————————————————————————————
package com.qlu.springboot01.service.impl;
@Service("bookService")
public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper bookMapper;
    @Override
    public List<Book> findAll() {
        return bookMapper.listAll();
    }
}


4.dao

​ 直接采用注解的方式在对应的方法上写,再也不用 xml 文件,遥遥领先。

package com.qlu.springboot01.mapper;
@Mapper
public interface BookMapper {
    @Select("select * from book")
    List<Book> listAll();
}

​ 可以看到他基本上是跑出来了

image-20230507154849516

(三)解决 db 与 pojo 的对应关系

​ 我们都知道在 java 中多单词属性采用的是驼峰命名法,在 db 中多单词字段采用的是短横线隔开的方式。在上面 Service 中 listAll 返回值要求是一个的是一个 Book 的 List ,就是把我们从数据库查出来的 book 的各个字段的值挨个 new 成 POJO 中的 Book 对象,但是 db 中的 book 字段与 POJO 不匹配,自然就是 null。

​ 在Springboot中,可以通过设置map-underscore-to-camel-case属性为true来开启驼峰功能。

#数据库中字段与pojo字段对应
mybatis:
  configuration:
    map-underscore-to-camel-case: true

image-20230507160902526

二、SpringBoot 配置文件

(一)Maven 插件打包

​ 在 Idea 自动生成的 SpringBoot 项目会自动引入 Maven 的打包插件,默认将程序打为 jar 包。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                    </exclude>
                </excludes>
            </configuration>
        </plugin>
    </plugins>
</build>

image-20230515181438741

​ 你还可以自定义打包后的名字,如下

image-20230516192228382

(二)自定义 Application

​ 在入门篇的时候,我们说过可以自定义引导类来调用 run 方法,下面是自行创建对象调用 SpringApplication 的成员方法,比如添加监视器等。

package com.qlu.springboot01;
@SpringBootApplication
public class Application {
    public static void runServer(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}


package com.qlu.springboot01;
@SpringBootApplication
public class Application {
    public static void runServer(String[] args){
//        SpringApplication.run(Application.class,args);
        SpringApplication springApplication = new SpringApplication(Application.class);
        springApplication.run(Application.class,args);
    }
}



image-20230515114359601

(三)配置文件的使用

​ 在 SpringBoot 中有着 “约定大于配置” 的说法,所有的配置文件都是以 application 开头的,不管是 properties 还是 yml。

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种[标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

1、yml 文件的基本用法

#properties 扁平化、键值对
server.port=9999
#yml 树状
server:
  port: 7777
  servlet:
    context-path: /springboot01

​ 相较于 properties 文件的键值对的 k-v 形式,yml 配置文件的机构是树状的,本质上也是键值对的数据;

​ yml 的 value 前面的 空格 不可省略,且 yml 配置中使用 缩进 来控制层级关系,相同缩进的在同一层次;

​ yml 的属性和值对大小写敏感,当有特殊字符(%、$等)应该使用单引号包起来。

2、配置文件的加载顺序

​ springboot启动会扫描一下位置的application.properties或者application.yml作为默认的配置文件

#工程根目录:./config/
#工程根目录:./
#classpath:/config/
#classpath:/

​ 加载的优先级顺序是从上向下加载,并且所有的文件都会被加载,高优先级的内容会覆盖底优先级的内容,形成互补配置,如果是一个 pom 工程,工程的根目录指的是父工程和父工程下的 /config 。

​ 感兴趣可以自己试一下,这里就不截图了。

image-20230515195139642

如果在不同的目录中存在多个配置文件,properties优先级大于yml优先级,它的读取顺序是:

1、config/application.properties 

2、config/application.yml 

3、application.properties

4、application.yml 

5、resources/config/application.properties 

6、resources/config/application.yml 

7、resources/application.properties 

8、resources/application.yml

3、运行时配置文件的读取

​ 如果在部署时显式的指定端口 / 目录,则会根据显式指定内容配置

java -jar xxxx.jar --server.port = 8087	

​ 也可以通过指定配置spring.config.location来改变默认配置,一般在项目已经打包后,我们可以通过指令 来加载外部的配置;

java -jar xxxx.jar --spring.config.location=D:\config\application.yml
java -jar xxxx.jar --spring.config.location=D:\config/

​ 若不指定配置,则会在部署的时候自动加载 jar 包同级的配置文件,如果在发布时仅仅是指定了配置文件的位置目录,也会优先加载同 jar 包目录下的配置文件。

​ PS:要是你啥都不指定,jar包同目录也没有,那就是用的你内部的配置文件。

​ 实测在2.7.11中优先级依次为

1、显式指定(即指定端口/路径 --server.port = 8087)
2、显式指定配置文件 / 配置文件位置
2、jar 包同目录

4、多环境开发

​ 除了像下面这样选择激活某个环境,也可以在打包后使用 java -jar 选择配置文件中有的环境。

​ 所以说上面的前提条件是 “内部的”。

#application.yml 激活某个环境
spring:
  profiles:
    active: dev
#开发环境 dev application-dev.yml
server:
  port: 8080
#测试环境 test application-test.yml
server:
  port: 8081
#生产环境 pro application-pro.yml
server:
  port: 8082

​ 使用命令

java -jar "模块" --spring.profiles.active = "环境名称" 即可

image-20230515201308422

(四)配置文件的注入

1、value 普通值(String、boolean 、Interger..)

#注入值
bootversion: 1.1.0
package com.qlu.springboot01.controller;

@RestController
@RequestMapping("hello")
public class HelloController {

    @Value("${bootversion}")
    private String version;

    @Autowired
    private Person person;

    @RequestMapping("h1")
    public Map hello() {
        Map<String,Object> map = new HashMap();
        map.put("version",version);
        return map;
    }

image-20230516102412646

2、注入对象

​ 配置文件中写入对象信息

#person
person:
  name: lisi
  age: 22
  flag: true
  birth: 2022/01/01
  map: {k1: v1,k2: v2}
  list:
    - a1
    - a2
    - a3

​ bean 放到容器中管理

package com.qlu.springboot01.bean;
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {
    private String name;
    private Integer age;
    private boolean flag;
    private Date brith;
    private Map map;
    private List list;
}
@RequestMapping("h2")
public Map person() {
    Map<String,Object> map = new HashMap();
    map.put("mesg","success");
    System.out.println(person);
    return map;
}

image-20230516111944419

​ 根据这个原理,我们就可以把一些配置打成对象的形式放在 yml 文件中作为配置了,比如说 jdbc

#jdbcvalue
jdbc:
  url: jdbc:mysql://3306
  username: 12345
  password: 12345
package com.qlu.springboot01.bean;
@Component
@Data
@ConfigurationProperties(prefix = "jdbc")
public class JdbcValue {
    private String url;
    private String username;
    private String password;
}
@Autowired
private JdbcValue jdbc;

@RequestMapping("h3")
public Map jdbc() {
    Map<String,Object> map = new HashMap();
    map.put("mesg","jdbc");
    System.out.println(jdbc);
    return map;
}

image-20230516113904043

标签:map,配置文件,SpringBoot02,private,public,application,Mybatis,yml
From: https://www.cnblogs.com/purearc/p/17412057.html

相关文章

  • Golang - viper读取配置文件
    一、介绍Viper是一个方便Go语言应用程序处理配置信息的库。它可以处理多种格式的配置。它支持的特性:设置默认值从JSON、TOML、YAML、HCL和Javaproperties文件中读取配置数据可以监视配置文件的变动、重新读取配置文件从环境变量中读取配置数据从远端配置系统中读取数据,并......
  • 通过1分钟生成其它线的bar配置文件
    import jsonfrom datetime import datetime, timedeltaimport math# 获取开始时间和结束时间start_time = datetime.strptime("00:00:00", "%H:%M:%S")end_time = datetime.strptime("23:59:00", "%H:%M:%S")# 创建字典,以时间字符串为键,值为所属时间段的开......
  • Hadoop的核心配置文件
    1.core-site.xml:该配置文件包含了Hadoop通用配置,例如Hadoop的文件系统和I/O设置、Hadoop日志目录、Hadoop缓存设置等。2.hdfs-site.xml:该配置文件包含了Hadoop分布式文件系统(HDFS)的配置,例如HDFS的副本数、块大小、数据目录、安全设置等。3.yarn-site.xml:该配置文件包含了Hado......
  • MyBatis 学习(二)
    一、XML配置文件1、XML映射配置文件的结构configuration配置properties属性settings设置typeAliases类型别名typeHandlers类型处理器objectFactory对象工厂plugins插件environments环境environment环境变量......
  • 使用k8s configmap保存nginx.conf配置文件
    创建一个包含Nginx配置的文件(例如nginx.conf)。创建一个ConfigMap对象,将Nginx配置文件添加为其中的数据。kubectlcreateconfigmapnginx-config--from-file=nginx.conf这将创建一个名为"nginx-config"的ConfigMap,并将nginx.conf文件的内容作为其中的数据存......
  • Spring Boot整合Mybatis Plus逆向工程
    1.导入依赖主要导入Mybatis-Plus-generator版本需要与Mybatis-Plus版本一致<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</versio......
  • mybatis 之 if test 条件查询,参数为0时,查询出所有结果
    一、工作问题:在工作中发现使用MyBatis时在boolean如果传值为0时 ,并没有按照"0"进行筛选选,而是查出了所有的数据。"<iftest='exeStatus!=nullandexeStatus!=""'>","andexe_status=#{exeStatus}","</if>",二、mybatis源码:首......
  • 老杜MyBatis框架从入门到精通(一)MyBatis概述
    mybatis做为目前国内最为流行的开源orm框架,我们平时在使用时会感受到其带来的诸多便利,但是很少去深入分析,mybatis源码代码量不多,功能丰富,是一个很好的学习样例,本系列文章就和大家一起来学习mybatis框架本系列笔记根据动力节点B站上老杜讲的mybatis教程整理~学习地址:https://www......
  • Oracle版面本的MySQL8.0的配置文件 my.cnf
    ##############################创建用户和用户组:groupaddworkuseraddwork  准备目录:mkdir-p/home/work/mysql_3306mkdir-p/home/work/mysql_3306/datamkdir-p/home/work/mysql_3306/etcmkdir-p/home/work/mysql_3306/tmpmkdir-p/home/work/mysql_3306/logmkd......
  • Eclipse使用mybatis generator自动生成代码
    一、写在前面           Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。通过在Eclipse中集成mybatis-generater插件,自动生成Mybatis相关的model、dao、Mapping......