扫盲内容
如果想学习java相关的可以打开来看一下,如果只是想快速应付一下作业就不用打开了,避免浪费你的时间,哈哈! [aru_36]
点击查看完整内容
- 一、SSM是什么?博主的这个文章算SSM吗?
- 引用百度百科:SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
- 算! [aru_56]
- 二、后端项目没有界面的吗?为什么我没有看到界面?前端是啥?后端是啥?
- 目前主流都是前后端分离,也就是前端人员做前端,后端人员做后端,选择了JAVA,基本我们就是后端人员了,很多公司都会使用一些开源框架来自动生成前端页面(eladmin、若依等),甚至出现很多零代码前端框架(博主就在宣传现场,直接把前端人员干没的节奏 [aru_34] 。
- 举个例子说明前后端:购物下订单
- 前端:拿出手机,选择商品,点击立即购买。订单生成成功!
- 用户和软件的交互过程
- 用户所看到的全部内容
- 后端:防重提交、确认收货地址、获取最新购物项和价格、订单验价、获取优惠券、验证价格、锁定优惠券、锁定商品库存、创建订单对象、创建子订单对象、发起延时消息——用于自动关单、创建支付信息——对接第三方支付。。。。。。 [aru_39]
- 所有重要数据的逻辑操作均在后端进行
- 用户所看不到内容
从零搭建视频一览
一、快速创建meven项目
通过上面的方式生成了项目之后,我们新建一个JsonData.java,将下面的代码复制进去。
直接传送门
二、在写之前,我们先要有Mybatic-Plus,具体是什么,传送门如下
小提示
这里是方便小白不知道pom文件是什么,以及不知道meven包在哪里添加,如果你知道了,就不用展开了
点击查看完整内容
三、项目完全成功后的结构图——目的是让读者知道对应的java类应该在什么地方合适!
其中箭头指的java类,你现在应该一个都没有,继续往下看就好啦![aru_50]
四、我们看一下我们简单的数据库,很简单,就一个id,一个name没有了
MyBatisPlusGenerator
点击查看完整内容
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class MyBatisPlusGenerator {
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
// 是否支持AR模式
config.setActiveRecord(true)
// 作者
.setAuthor("DBC")
// 生成路径,最好使用绝对路径,window路径是不一样的
//TODO TODO TODO TODO
.setOutputDir("C:\\Users\\dbc\\Desktop")
// 文件覆盖
.setFileOverride(true)
// 主键策略
.setIdType(IdType.AUTO)
.setDateType(DateType.ONLY_DATE)
// 设置生成的service接口的名字的首字母是否为I,默认Service是以I开头的
.setServiceName("%sService")
//实体类结尾名称
.setEntityName("%sDO")
//生成基本的resultMap
.setBaseResultMap(true)
//不使用AR模式
.setActiveRecord(false)
//生成基本的SQL片段
.setBaseColumnList(true);
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
// 设置数据库类型
dsConfig.setDbType(DbType.MYSQL)
.setDriverName("com.mysql.cj.jdbc.Driver")
//TODO TODO TODO TODO
.setUrl("jdbc:mysql://你的IP:3306/st-test?useSSL=false")
.setUsername("root")
.setPassword("你的密码");
//3. 策略配置globalConfiguration中
StrategyConfig stConfig = new StrategyConfig();
//全局大写命名
stConfig.setCapitalMode(true)
// 数据库表映射到实体的命名策略
.setNaming(NamingStrategy.underline_to_camel)
//使用lombok
.setEntityLombokModel(true)
//使用restcontroller注解
.setRestControllerStyle(true)
// 生成的表, 支持多表一起生成,以数组形式填写
//TODO TODO TODO TODO
.setInclude("tb_user");
//4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
//TODO TODO TODO TODO 你的包位置,具体看上面的结构图
pkConfig.setParent("com.example.test05.demo")
.setMapper("mapper")
.setService("service")
.setController("controller")
.setEntity("model")
.setXml("mapper");
//5. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig);
//6. 执行操作
ag.execute();
System.out.println("=======DBC——李白 Done 相关代码生成完毕 ========");
}
}
4.1 TbUserController
点击查看完整内容
package com.example.test05.demo.controller;
import com.example.test05.demo.model.TbUserDO;
import com.example.test05.demo.service.TbUserService;
import com.example.test05.demo.tool.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 前端控制器
* </p>
*
* @author DBC
* @since 2021-11-05
*/
@RestController
@RequestMapping("/tbUserDO")
public class TbUserController {
@Autowired
private TbUserService tbUserService;
@GetMapping("chaxun")
public JsonData chaxun(int id) {
JsonData jsonData = tbUserService.chaxun(id);
return jsonData;
}
@PostMapping("xinzeng")
public JsonData xinzeng(@RequestBody TbUserDO userDO) {
JsonData jsonData = tbUserService.xinzeng(userDO);
return jsonData;
}
@DeleteMapping("shanchu")
public JsonData shanchu(int id) {
JsonData jsonData = tbUserService.shanchu(id);
return jsonData;
}
@PutMapping("xiugai")
public JsonData xiugai(@RequestBody TbUserDO userDO) {
JsonData jsonData = tbUserService.xiugai(userDO);
return jsonData;
}
}
4.2 TbUserMapper
点击查看完整内容
import com.example.test05.demo.model.TbUserDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author DBC
* @since 2021-11-05
*/
@Mapper
public interface TbUserMapper extends BaseMapper<TbUserDO> {
}
4.3 TbUserDO
点击查看完整内容
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author DBC
* @since 2021-11-05
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("tb_user")
public class TbUserDO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
} 4.4 TbUserServiceImpl
因为这里是最重要的地方,我将会写超详细的注释说明,基本注释到每一行代码!其他地方相信小伙伴们可以自己理解!
点击查看完整内容
package com.example.test05.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.test05.demo.mapper.TbUserMapper;
import com.example.test05.demo.model.TbUserDO;
import com.example.test05.demo.service.TbUserService;
import com.example.test05.demo.tool.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author DBC
* @since 2021-11-05
*/
@Service
public class TbUserServiceImpl extends ServiceImpl<TbUserMapper, TbUserDO> implements TbUserService {
// 将这个类注入,类似于之前我们JAVA学的TbUserMapper userMapper = new TbUserMapper();
// 这样说应该就很清晰了
@Autowired
private TbUserMapper userMapper;
/**
* 根据ID查询数据
* @param id id标识
* @return
*/
@Override
public JsonData chaxun(int id) {
// 这里我们看到我们调用的接口是selectOne,懂英文的应该都知道,查询的就是一个的意思
// new QueryWrapper<TbUserDO>()这里一般是通用的查询操作
// 让我们来看这个 .eq("id",id)
// .eq就是精确查找的意思 第一个"id"相信很简单,指的就是数据库中id的名字 第二个id指的就是我们传进来的值
TbUserDO userDO = userMapper.selectOne(new QueryWrapper<TbUserDO>().eq("id",id));
// 这里只解释一次,JsonData就是一个结果通知的封装类,会让我们的结果看起来好看一点,大公司通常会有自己的一套
// 结果通知类给我们使用。小公司一般不会有,一般就直接用那种框架自带的,十分臃肿,难受至极。。。。
return JsonData.buildSuccess(userDO);
}
/**
*
* @param userDO 用户对象类
* @return
*/
@Override
public JsonData xinzeng(TbUserDO userDO) {
// 先看这句userMapper.insert 很明显insert就是代表的新增的意思
// int row = userMapper.insert(userDO) int row 什么意思呢,当我们在mysql操作的时候,操作成功它是不是会返回给我们
// 操作成功,并影响多少行的结果信息?有印象吗?这里就是判断,如果操作成功的话,mysql会返回给我们影响了1行数据,1>0,所以我们
// 就判断成功了,反之则失败。
// 这种判断是最简单的,在企业中新增一个用户可能会涉及到很多表的新增,一个用户对应很多表,分表操作,所以这样判断当然是不完美的,
// 会涉及到事务操作,跑题了。。。懂了就行
int row = userMapper.insert(userDO);
if (row>0){
return JsonData.buildSuccess();
}else {
JsonData.buildError("新增失败");
}
return null;
}
/**
* 同理可得
* @param id
* @return
*/
@Override
public JsonData shanchu(int id) {
int row = userMapper.deleteById(id);
if (row>0){
return JsonData.buildSuccess();
}else {
JsonData.buildError("失败");
}
return null;
}
/**
* 同理可得
* @param userDO
* @return
*/
@Override
public JsonData xiugai(TbUserDO userDO) {
int row = userMapper.updateById(userDO);
if (row>0){
return JsonData.buildSuccess();
}else {
JsonData.buildError("失败");
}
return null;
}
}
4.5 TbUserService
点击查看完整内容
import com.example.test05.demo.model.TbUserDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.test05.demo.tool.JsonData;
/**
* <p>
* 服务类
* </p>
*
* @author DBC
* @since 2021-11-05
*/
public interface TbUserService extends IService<TbUserDO> {
JsonData chaxun(int id);
JsonData xinzeng(TbUserDO userDO);
JsonData shanchu(int id);
JsonData xiugai(TbUserDO userDO);
}
4.6 TbUserMapper.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.example.test05.demo.mapper.TbUserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.example.test05.demo.model.TbUserDO">
<id column="id" property="id" />
<result column="name" property="name" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name
</sql>
</mapper>
4.7 application.yml
点击查看完整内容
#配置数据源
spring:
#==============================数据库相关配置========================================
#数据库配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://你的IP地址:3306/st-test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 填写你的密码
#配置plus打印sql日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 有些小伙伴想使用连接池,这里推荐阿里数据库连接池Druid
点击查看完整内容
4.8 pom.xml
点击查看完整内容
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example.test05</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- mybatis --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> <!-- 代码自动生成依赖 begin --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <!-- velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <!-- 代码自动生成依赖 end--> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
运行项目
将上面的代码全都复制粘贴好了之后,运行主程序,如图所示。
出现和博主一样的画面,就是运行成功了! [aru_51]
五、postman测试(博主精品软件中也有)
5.1 增加
5.2 根据id删除
5.3 修改、编辑
5.4 根据id查询
六、大功告成
经过上面的一系列操作,可能有些小伙伴应该已经头晕了,[aru_1],其实这只是最简单的,以后弄多了就简单了,在公司也是一样的操作,这基本上就是公司的实操了,没有什么区别,唯一的区别就是impl里面可能会更复杂一点而已,需求不一样,代码难度就不一样。很多学习Java的小伙伴不知道学习了java来了有什么用,具体能做什么,没错,一般程序员就是做增删改查,和上面的例子基本一样,就是数据库字段多一点,需求怪一点,但是流程就是和博主一样的,没有区别。如果有懂哥来杠我高并发、分布式之类的不一样当我没说[aru_13],这里只是说简单的增删改查!
List<TbUserDO> list = new ArrayList<>();
list = userMapper.selectList(new QueryWrapper<TbUserDO>()); 具体详情可以看这篇文章:浅谈HTTP中Get、Post、Put与Delete的区别
常见问题汇总
一、时区问题
两个位置添加对应的时区,这里如果你使用的是本地mysql数据库,就有可能出现这个问题,如果使用的是云服务器,那么一般不会出现这个问题。
修改为以下的代码
jdbc:mysql://你的ip:3306/st-test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
application.yml
MyBatisPlusGenerator
本文作者为DBC,转载请注明。












爱你
@小源#[哈哈]
棒
@然[aru_1]
这个包对应的是什么呀?
查看图片
@固游对应的就是你自己包,如下图
查看图片