您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Maven从入门到精通 pringBoot搭建SSM项目的完整过程 !

时间:2023-02-09 13:57:23  来源:掘金  作者:Nakano_May

01、新建一个springboot项目

 

 

选择依赖和版本

 

SpringBoot整合lombok

lombok是一个快速生成JAVAbean的一个工具工程和生成日志的工具。未来给我们提供了很大的遍历。

需要在idea中安装插件和pom.xml中进行依赖才可以使用生效:

 

pom.xml依赖如下:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
复制代码

SpringBoot在依赖的过程,为什么有的要加版本号,有的不加?

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

<dependency>
    <groupId>MySQL</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.27</version>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>MyBatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
复制代码
  • mysql
  • mybatis-plus 都不属于springboot父工程管理,自然必须把自己的version加上去!

SpringBoot整合Mybatis-Plus和数据源

1、在pom.xml中依赖如下:

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

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>
复制代码

2、准备一个数据库表kss_user

CREATE TABLE `kss_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_AI_ci DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `real_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `gender` int DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
复制代码

3、配置数据源和mybatis配置

在项目的resource目录下的Application.yaml配置如下:

server:
  port: 8080

# 数据源配置
spring:
  application:
    name: pug-springboot-ssm
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/ssm_db?serverTimezone=GMT%2b8&useUnicode=true&useSSL=false&characterEncoding=UTF-8
    username: root
    password: 123456
    hikari:
      connection-timeout: 60000
      validation-timeout: 3000
      idle-timeout: 60000
      login-timeout: 5
      max-lifetime: 60000
      maximum-pool-size: 30
      minimum-idle: 10
      read-only: false


# mybatis-plus配置
mybatis-plus:
  configuration:
    log-impl: org.Apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations:
    - classpath*:/mapper/*.xml
复制代码

4、在resource新建一个mapper文件用来存放mybatis的xml文件

5、springboot整合mybatis-plus

package com.ksd.pug;

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

@SpringBootApplication
@MapperScan("com.ksd.pug.mapper")
public class PugSpringbootSsmApplication {

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

}
复制代码

SpringBoot实现对用户表的CRUD操作

01、pojo

package com.ksd.pug.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("kss_user")
public class User implements Serializable {

    @TableId(type = IdType.AUTO)
    private Integer id;
    private String username;
    private String password;
    private String realName;
    private Integer gender;
    private Date birthday;

}
复制代码

02、mapper

package com.ksd.pug.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ksd.pug.pojo.User;

public interface UserMapper extends BaseMapper<User> {
}
复制代码

03、service和serviceImpl

package com.ksd.pug.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ksd.pug.pojo.User;

public interface IUserService extends IService<User> {
}
复制代码
package com.ksd.pug.service;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ksd.pug.mapper.UserMapper;
import com.ksd.pug.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class IUserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
}
复制代码

04、controller

package com.ksd.pug.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ksd.pug.config.exception.BusinessException;
import com.ksd.pug.config.results.Code;
import com.ksd.pug.config.results.Result;
import com.ksd.pug.pojo.User;
import com.ksd.pug.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @PostMapping
    public Result save(User user){
        boolean flag = userService.saveOrUpdate(user);
        return new Result(flag ? Code.SAVE_OK:Code.SAVE_ERROR);
    }

    @PutMapping
    public Result update(User user){
        boolean flag = userService.updateById(user);
        return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERROR);
    }

    @DeleteMapping("/{id}")
    public Result delete(Integer id){
        boolean flag = userService.removeById(id);
        return new Result(flag ? Code.DELETE_OK:Code.DELETE_ERROR);
    }

    @GetMapping("/{id}")
    public Result get(@PathVariable("id")Integer id) throws BusinessException {
        User user = userService.getById(id);
        // 模拟出现异常,使用条件控制,便于测试结果
        if (id == 10) {
            throw new BusinessException("查询出错了,请重试!",Code.GET_ERROR);
        }
        return new Result(null != user ? Code.GET_OK :Code.GET_ERROR,user);
    }

    @GetMapping("/{pageNo}/{pageSize}")
    public Result getAll(@PathVariable Integer pageNo,@PathVariable Integer pageSize){
        // 1、设置分页
        Page page = new Page<>(pageNo,pageSize);
        // 2、设置条件
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 3、查询分页返回
        IPage page1 = userService.page(page, lambdaQueryWrapper);
        return new Result(null != page1 ? Code.GET_OK :Code.GET_ERROR,page1);
    }


}
复制代码

Mybatis-Plus的分页失效问题

@Configuration
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}
复制代码

Mybatis-Plus的创建时间和更新时间回填问题

  1. 定义个回填配置类
@Slf4j
@Component 
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill...");
        //default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}
复制代码
  1. 在pojo中使用@TableFiled(fill=xxx)指定回填触发方法
package com.ksd.pug.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("kss_user")
public class User implements Serializable {

    @TableId(type = IdType.AUTO)
    private Integer id;
    private String userName;
    private String password;
    private String realName;
    private Integer gender;
    private Date birthday;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

}
复制代码

数据库级别的解决方案

 

首先将字段设置为timestamp,然后设置不是null,根据当前时间戳更新,在这里注意我们的create_time是不根据当前时间戳更新的!这种方式虽然可以但是不建议!

在mysql低版本的时候可能会出现一个问题,你的sql语句无法导入,而导致这个的原因是有的他只可以设置一个timestamp(在这里提示:mysql5.7 、mysql8.0是可以的!)

Mybatis-Plus是怎么做到不写sql但是可以实现CRUD操作

  • 背后绝对是拼接SQL语句,然后调用mybatis底层执行sql。

具体需要学习mp!


作者:Nakano_May
链接:
https://juejin.cn/post/7183739358883610680



Tags:SSM   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Meta发布 AI 模型SeamlessM4T,可转录和翻译近100种语言
(图片来源@视觉中国)钛媒体App获悉,当地时间8月22日,科技巨头Facebook母公司Meta 对外发布了一款最新人工智能(AI)翻译引擎SeamlessM4T,可以更轻松地跨文本语音翻译和转录近100种语...【详细内容】
2023-08-23  Search: SSM  点击:(103)  评论:(0)  加入收藏
Maven从入门到精通 pringBoot搭建SSM项目的完整过程 !
01、新建一个springboot项目 选择依赖和版本 SpringBoot整合lomboklombok是一个快速生成javabean的一个工具工程和生成日志的工具。未来给我们提供了很大的遍历。需要在ide...【详细内容】
2023-02-09  Search: SSM  点击:(183)  评论:(0)  加入收藏
nssm,一个可以把任何exe注册为系统服务的利器
在Windows下把一个exe可执行文件注册为系统服务有很多种方法,常用的有sc命令、instsrv+srvany以及本文重点介绍的nssm。 &hearts;引言这阵子为单位编写了一个小工具,作用是禁...【详细内容】
2022-05-23  Search: SSM  点击:(631)  评论:(0)  加入收藏
java开发框架之SSM整合框架
一、搭建环境1、创建数据库表和表结构create table account(id INT identity(1,1) primary key,name varchar(20),[money] DECIMAL2、创建maven的工程SSM,在pom.xml文件引入...【详细内容】
2021-11-11  Search: SSM  点击:(355)  评论:(0)  加入收藏
SSM三大框架整合详细教程
SSM三大框架整合详细教程(SPRING+SPRINGMVC+MYBATIS)使用 SSM ( Spring 、 SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想...【详细内容】
2021-06-10  Search: SSM  点击:(453)  评论:(0)  加入收藏
基于SSM实现的个人网盘系统源码
项目简介给大家分享一款我的作业ssm实现的个人网盘系统,项目是基于网上搜索的一款类似源码,修改了部分发现的bug,项目主要实现了用户的登录注册,用户管理,文件管理,文件夹管理,文件...【详细内容】
2020-11-07  Search: SSM  点击:(348)  评论:(0)  加入收藏
最通俗易懂的ssm框架整合讲解
环境 MySQL 8.0.161 Mybatis1.1 数据库配置文件jdbc.driver=com.mysql.cj.jdbc.Driver# 如果使用mysql 6+,增加一个时区的配置jdbc.url=jdbc:mysql://localhost:3306/ssmbuil...【详细内容】
2020-09-21  Search: SSM  点击:(300)  评论:(0)  加入收藏
Dubbo/SSM/Elasticsearch/Redis/MySQL搭建分布式电商购物商城
关注本头条号@Java架构师技术栈分享转发文章之后私信回复【源码】即可免费获取到项目全部源码文档等!基于SOA架构的分布式购物电商商城 后台管理系统:管理商品、订单、类目、...【详细内容】
2020-05-20  Search: SSM  点击:(316)  评论:(0)  加入收藏
如何在CentOS/RHEL 7上借助ssm管理LVM卷?
逻辑卷管理器(LVM)是一种极其灵活的磁盘管理工具,它让用户可以从多个物理硬驱创建逻辑磁盘卷,并调整大小,根本没有停机时间。不过,其强大的功能也有其缺点:学用起来有点难度;与管理...【详细内容】
2020-05-11  Search: SSM  点击:(292)  评论:(0)  加入收藏
解析SSH和SSM两大框架的组成及其区别
前言熟悉当下流行的两种企业开发MVC开源框架,是Java程序猿必备知识。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。M是指业务模型,V是...【详细内容】
2019-11-08  Search: SSM  点击:(690)  评论:(0)  加入收藏
▌简易百科推荐
Qt与Flutter:在跨平台UI框架中哪个更受欢迎?
在跨平台UI框架领域,Qt和Flutter是两个备受瞩目的选择。它们各自具有独特的优势,也各自有着广泛的应用场景。本文将对Qt和Flutter进行详细的比较,以探讨在跨平台UI框架中哪个更...【详细内容】
2024-04-12  刘长伟    Tags:UI框架   点击:(6)  评论:(0)  加入收藏
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(22)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(59)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(50)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(41)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(53)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(71)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(91)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条