IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot(三) -> 正文阅读

[Java知识库]springboot(三)

目录

一、按照项目的用途来进行分类配置

二、配置文件的优先级

三、与mybatis框架进行整合

一、pom文件引入依赖

二、配置文件中指定mapper放置的位置

演示整合案例如下:

需要思考的问题,我们的接口如何被发现呢?

四、mybatis优化(精髓在于mapper接口的代理技术)

springboot整合通用mapper

解决字段不一致的问题:

五、项目整合lombok

一、导入依赖

二、下载lombok插件,如果idea版本高的话它是自带lombok的!

三、常用的Lombok注解

四、使用方法


一、按照项目的用途来进行分类配置

spring.profiles.active = 文件名的后缀

设置活动的配置文件

比如spring.profiles.active = test

application-dev.yml

application-test.yml

首先它一定会先加载主配置文件,那么主配置文件可以这样写:?

?

?dev:

server:
  port: 8085

  #指定当前服务的名称,到时候微服务项目发布的时候需要用到
spring:
  application:
    name: service-demo2
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai
    username: root
    password: abc123
  #解决时差问题
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8


  #配置数组
pro:
  - id: 18
  - name: xxx

logging:
  level:
    com:
      lay:
        demo2: debug

test:

server:
  port: 8084

  #指定当前服务的名称,到时候微服务项目发布的时候需要用到
spring:
  application:
    name: service-demo2
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai
    username: root
    password: abc123
  #解决时差问题
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8


  #配置数组
pro:
  - id: 18
  - name: xxx

logging:
  level:
    com:
      lay:
        demo2: debug

二、配置文件的优先级

三、与mybatis框架进行整合

  1. 启动器
  2. 需要配什么?mybatis是orm框架
    1. 连接池
    2. 映射文件放在哪里,如何找到?
    3. 接口又如何找到
  3. 项目的架构是怎么样的?

一、pom文件引入依赖

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

二、配置文件中指定mapper放置的位置

配置文件中配置文件的路径,只要是符合的都会被扫描到?

?

演示整合案例如下:

项目文件:

实体类User:

package com.lay.demo2.entity;

/**
 * @author Dragon code!
 * @create 2022-04-27 15:39
 */
public class User {
    private Integer id;
    private String userName;
    private String passWord;
    private String realName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }
}

mapper.xml:

<?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.lay.demo2.mapper.UserMapper">
    <select id="findUserById" parameterType="java.lang.Integer" resultType="com.lay.demo2.entity.User">
        select *
        from user
        where id = #{id}
    </select>
</mapper>

UserMapper接口:

package com.lay.demo2.mapper;

import com.lay.demo2.entity.User;

/**
 * @author Dragon code!
 * @create 2022-04-27 15:42
 */
@Repository
public interface UserMapper {
    User findUserById();
}

MyController控制层:

restFul风格访问控制器方法:

package com.lay.demo2.controller;

import com.lay.demo2.entity.User;
import com.lay.demo2.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Dragon code!
 * @create 2022-04-26 16:29
 */
@RestController
public class MyController {
    @Autowired
    private UserService userService;

    @RequestMapping("/lay/{id}")
    public User hello(@PathVariable Integer id) {
        User user = userService.findUserById(id);
        return user;
    }
}

需要思考的问题,我们的接口如何被发现呢?

直接在启动类的上面加上MapperScan来扫描项目中的mapper接口!

package com.lay.demo2;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author Dragon code!
 * @create 2022-04-26 15:18
 */
@SpringBootApplication
//此注解相当于以前的配置文件中指定resource文件夹的位置(mapper.xml要么直接放在resource中要么指定代替的文件夹的名称)
@MapperScan("com.lay.demo2.mapper")
public class Demo2Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class);
    }
}

基于springboot开发微服务项目就不要向以前一样写接口然后再写他的实现类了,我们直接使用service类来作为服务层。

UserService:

package com.lay.demo2.service;

import com.lay.demo2.entity.User;
import com.lay.demo2.mapper.UserMapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author Dragon code!
 * @create 2022-04-27 15:46
 */
@Service
@Transactional
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User findUserById(Integer id) {
        return userMapper.findUserById(id);
    }
}

数据库导入数据:

最终结果:

四、mybatis优化(精髓在于mapper接口的代理技术)

大多数项目中针对表的操作80%以上都是单表的操作,微服务内部的功能会很少,一个微服务往往只操作一个表,所以在一个微服务的项目中95%都是单表操作。

对mybatis的映射文件的内容,如果statement只是针对单表,写起来很简单,另外写的内容无非与表名和entity类有关。

基于以上情形,mybatis提供了两种扩展的应用方式,他们可以很方便的实现对单表的操作。

(1)mybatis-plus

(2)通用mapper(推荐使用,简单)

springboot整合通用mapper

删除mybatis的启动器

添加以下通用mapper的启动器:

        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.2</version>
        </dependency>

项目结构:可以看到我们直接删除了resource下的mapper包以及里面的*mapper.xml文件

关键步骤,让mapper接口去继承通用mapper所提供的接口!

tk表示通用

查看BaseMapper

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package tk.mybatis.mapper.common;

import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.base.BaseDeleteMapper;
import tk.mybatis.mapper.common.base.BaseInsertMapper;
import tk.mybatis.mapper.common.base.BaseSelectMapper;
import tk.mybatis.mapper.common.base.BaseUpdateMapper;

@RegisterMapper
public interface BaseMapper<T> extends BaseSelectMapper<T>, BaseInsertMapper<T>, BaseUpdateMapper<T>, BaseDeleteMapper<T> {
}

再次进入其中的BaseSelectMapper接口:

@RegisterMapper
public interface BaseSelectMapper<T> extends SelectOneMapper<T>, SelectMapper<T>, SelectAllMapper<T>, SelectCountMapper<T>, SelectByPrimaryKeyMapper<T>, ExistsWithPrimaryKeyMapper<T> {
}

由此可见

BaseMapper<User> 接口还继承了其他的接口,包括了所有的增删改查的操作,每种操作都由接口提供了方法,通用mapper会把接口的方法与泛型的entity实体结合在一起,按照映射文件中statement的书写规律利用代理技术自动生成执行接口方法所对应功能的代理对象,此代理对象中就包含了需要执行的自动生成的SQL命令

不用再写映射文件,配置文件中可以不再指定映射文件的位置。

删除以下部分

但是在启动类中需要添加针对mapper接口的包的扫描的注解!

注意一定要选tk的?

注意点:mapper接口中没必要写自定义的方法了,删除自定义方法

?mapper接口中不需要写自定义的方法,需要调用方式时从被继承的接口中去选择,任何的针对单表的操作的方法都有!

解决字段不一致的问题:

?

解决方法:

在实体类里面指定列名

最终结果:成功访问

五、项目整合lombok

一、导入依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>provided</scope>
        </dependency>

二、下载lombok插件,如果idea版本高的话它是自带lombok的!

?

三、常用的Lombok注解

@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;
	作用于成员变量上,生成该成员变量的getter/setter方法。

@ToString: 作用于类,覆盖默认的toString()方法

@EqualsAndHashCode: 作用于类,覆盖默认的equals和hashCode

@NoArgsConstructor:生成无参构造器;

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

@AllArgsConstructor:生成全参构造器

@Data: 作用于类上,注解集合,使用它相当于使用下列注解:
	@ToString 
	@EqualsAndHashCode 
	@Getter 
	@Setter 
	@RequiredArgsConstructor

@Builder: 作用于类上,将类转变为建造者模式

@Log: 作用于类上,生成日志变量

四、使用方法

/**
 * @author Dragon code!
 * @create 2022-04-27 15:39
 */
@Data
public class User {
    @Id
    private Integer id;
    @Column(name = "userName")
    private String userName;
    @Column(name = "passWord")
    private String passWord;
    @Column(name = "realName")
    private String realName;
}

成功访问:

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 11:57:32  更:2022-04-29 12:00:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:46:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码