扫盲内容
如果想学习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]
这个包对应的是什么呀?
查看图片
@固游对应的就是你自己包,如下图
查看图片