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 先让程 序跑起来,
先安装依赖:
<?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如下:
<?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); } }
然后在结构体上增加自增注解:
@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