spingboot打造教育平台(谷粒学院课程笔记)
第一单fqb 申明,项目的框架技术架构,前端运行时node 后端框架spring 开发前准备:mysbatis官网随时看文档,IDEa 202编释器2 环境配置,idea配置一下mavem路径,配置文件编码,配置编释器版本1.8.
初始化项目,使用sping Initializr,初始化spring Boot工程, 相关信息为:Group: com.atguigu Artifact: mybatis_plus 版本2.2.1.RELEASE
注意引用MyBatis_plus之后不要再次引用MyBatis,避免版本差异带来的新问题。
版本选择主版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
第一个demo 先让程 序跑起来,
先安装依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?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.2 . 1 .RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo1</artifactId> <version> 0.0 . 1 -SNAPSHOT</version> <name>demo1</name> <description>demo1</description> <properties> <java.version> 1.8 </java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <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> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version> 3.3 . 1 </version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional> true </optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version> 3.0 . 1 </version> </plugin> </plugins> </build> </project> |
再配置 数据库
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://192.168.3.138:3306/xsy_test?characterEncoding=utf-8&useSSL=false
#带时区写法
#spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
#另一种 简写
#spring.datasource.url = jdbc:mysql://192.168.3.138:3306/xsy_test?serverTimezone = GMT%2B8
spring.datasource.username= xsy
spring.datasource.password = 3RSG1v7Sz,iv
spring.datasource.username= xsyspring.datasource.password = 3RSG1v7Sz,iv
由于用到springboot 需要进行包扫描,在入口文件配置上mapper包的路径
@SpringBootApplication
@MapperScan("com.atguigu.mybatis_plus.mapper")
public class MybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisPlusApplication.class, args);
}
}
实现第一个demo 很简音,先写一个对应表的实体结构对象,第二步,mapper类继承一个mybits的类,将泛型指向这个类就好,这样这个mapper 类就有好了很多方法
第一步,实现实体表的对应对象:

第二步,新建mapper文件,
第三步的话时候mapper就有好多功能了,可以在测试中试用一下方法:新方法: usr.forEach(System.out::printLn)
为了查看sql语名,应 在配置 文 件中增加一句
mybatis-plus.configuration.log-impl = org.apache.ibatis.logging.stdout.StdOutImpl
这个在mybatis也有这个配置,只是做了升级。
控制台输出执行SQL语句
mybatis的配置文件----mybatis-config.xml如下:
1 2 3 4 5 6 7 8 9 10 | <?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" > <configuration> <settings> <!-- 打印sql日志 --> <setting name= "logImpl" value= "STDOUT_LOGGING" /> </settings> </configuration> |
增加一条记录示例:
在增l加对象的时候,如果没有的手工增加Id ,mybatis_plus 也会生成id ,但是Id号为内部实现的随机雪花算法,所以如果需要,我们使用以下方法产生自己想要的格式Id
如果要使用自增id 需要数据库配置 为id自增, 然后增加以下注解,
@TableId(type = IdType.AUTO)
public class User { @TableId(type = IdType.ASSIGN_ID) //注意是Long而不是long //若使用long 将无法随机生成id(仅生成0) private long id;
以上注解代码可以不写反正是默认,如果可以换成自增才需要使用自增ID注解
public class User {
// 以下注解会主健自增
@TableId(type = IdType.AUTO)
// 如果没有写默认会是雪花算法生成id
private Long id;
private String name;
private Integer age;
private String email;
}
组件自增从多少开始增,在数据库存的配置高级中可以设置,但是我的工具没有找到这个配置
如果每个实体都要上自增ID的注解,可以用配置 来解决,配置 文 件中加入
#全局设置主健生成策略,
mybatis-plus.global-config.db-config.id-type=auto

按id更新 注意那个id 写法(1L)指id为1的长整型

在规划中每一条数据都要记录更新时间,操作时间,所以得需要在表中建相关字段create_time,(类型 datetime)
update_time,
然后在java结构体中也增加privte Date createTime private Date updateTimeo
数据库表中有下划线,但是结构体中可以不写,但是下划线后面的单司首字线是大写可以了
然后每次插入,删除,或更新字段时手动更新关于时间的字段,这儿自导包的包是Utle工具类的包
user.setCreateTime(new Date())
user.setUpdateTime(new Date())
关于时间的字段可以优化,解决方案有通过数据库设置默认值,但不推荐,建议在业务层解决
通过new Date() 取值放放太麻烦,所以mybatis-puls 帮我提供了插件 可以成,新建一个配置类,内容为:

package com.example.demo.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(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 2 3 4 | @TableField (fill = FieldFill.INSERT) private Date createTime; @TableField (fill = FieldFill.INSERT_UPDATE) private Date updateTime; |
以下为图片记录:先是配置类
然后结构体对应表
乐观锁内容笔记
在练习sql 锁之前,得准备一张数据库表:使用以下sql语句创建表:
CREATE TABLE product ( id BIGINT(20) NOT NULL COMMENT '主键id', name VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称', price INT(11) DEFAULT 0 COMMENT '价格', version INT(11) DEFAULT 0 COMMENT '乐观锁版本', PRIMARY KEY(id) );
乐观锁是一种 配置,需要新建配置类,加上配置注解,然后在使用的地方加上乐观锁的注解。
项是中肯定有事务,需要加上事务标记
乐观锁处理,
查询多条的的方法:
条件查询and
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)