Skip to content

Latest commit

 

History

History
514 lines (361 loc) · 26.9 KB

File metadata and controls

514 lines (361 loc) · 26.9 KB
CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT 'Primary key' AUTO_INCREMENT,
	name VARCHAR(30) NULL DEFAULT NULL COMMENT 'name',
	age INT(11) NULL DEFAULT NULL COMMENT 'age',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT 'email',
create_time datetime DEFAULT CURRENT_TIMESTAMP,
update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
	PRIMARY KEY (id)
);
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

@Data lombok

Distributed system id generation strategy https://www.cnblogs.com/haoxinyue/p/5208136.html

javascript can only deal with 16 digits of int, so id should be set to string for distributed system of snowflake

id Strategy

@TableId(type = IdType.ID_WORKER_STR)
private String id;
CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT 'Primary key' AUTO_INCREMENT,
	name VARCHAR(30) NULL DEFAULT NULL COMMENT 'name',
	age INT(11) NULL DEFAULT NULL COMMENT 'age',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT 'email',
create_time datetime,
update_time datetime,
	PRIMARY KEY (id)
);
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        System.out.println("inserted");
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        System.out.println("updated");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

optimal lock

use one colum to restrict your range to change

think about another thread is running the same as below to update

update user set name ='Xiong' , version=version +1 where id =2 and version=1;

Code way

@Version
private Integer version;
@EnableTransactionManagement
@MapperScan("com.example.mybatis_plus.mapper")
@Configuration
public class MybatisPlusConfig {

    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

pagination

@TableLogic
private Integer deleted;
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

wrapper

Wrapper

AbstractWrapper : for select encapsulation, generate sql where clause

QueryWrapper: Entity Object encapsulation

UpdateWrapper: Update

AbstractLambdaWrapper: user lambda to get column

LambdaQueryWrapper: select

LambdaUpdateWrapper: Lambda to encapsulate Wrapper

How to optimize database?

sql

database design --> split database, split tables (5 millons or 2G,30 fields)(horizontally, vertically)

reduce multiple tables join , redundant column

no any foreign key constrains

https://blog.csdn.net/csdn265/article/details/79768009

guli

/* SQLyog Ultimate v12.09 (64 bit) MySQL - 5.7.21-log : Database - guli_edu


*/

/*!40101 SET NAMES utf8 */;

/!40101 SET SQL_MODE=''/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 /; /!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /; /!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' /; /!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; /*Table structure for table edu_chapter */

DROP TABLE IF EXISTS edu_chapter;

CREATE TABLE edu_chapter ( id char(19) NOT NULL COMMENT '章节ID', course_id char(19) NOT NULL COMMENT '课程ID', title varchar(50) NOT NULL COMMENT '章节名称', sort int(10) unsigned NOT NULL DEFAULT '0' COMMENT '显示排序', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_course_id (course_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='课程';

/*Data for the table edu_chapter */

insert into edu_chapter(id,course_id,title,sort,gmt_create,gmt_modified) values ('1','14','第一章:HTML',0,'2019-01-01 12:27:40','2019-01-01 12:55:30'),('15','18','第一章:Java入门',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('3','14','第二章:CSS',0,'2019-01-01 12:55:35','2019-01-01 12:27:40'),('32','18','第二章:控制台输入和输出',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('44','18','第三章:控制流',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('48','18','第四章:类的定义',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('63','18','第五章:数组',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('64','18','第六章:继承',0,'2019-01-01 12:27:40','2019-01-01 12:27:40'),('65','18','第七章:多态性和抽象类',0,'2019-01-01 12:27:40','2019-01-01 12:27:40');

/*Table structure for table edu_course */

DROP TABLE IF EXISTS edu_course;

CREATE TABLE edu_course ( id char(19) NOT NULL COMMENT '课程ID', teacher_id char(19) NOT NULL COMMENT '课程讲师ID', subject_id char(19) NOT NULL COMMENT '课程专业ID', subject_parent_id char(19) NOT NULL COMMENT '课程专业父级ID', title varchar(50) NOT NULL COMMENT '课程标题', price decimal(10,4) unsigned NOT NULL DEFAULT '0.0000' COMMENT '课程销售价格,设置为0则可免费观看', lesson_num int(10) unsigned NOT NULL DEFAULT '0' COMMENT '总课时', cover varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '课程封面图片路径', buy_count bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '销售数量', view_count bigint(10) unsigned NOT NULL DEFAULT '0' COMMENT '浏览数量', version bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁', status varchar(10) NOT NULL DEFAULT 'Draft' COMMENT '课程状态 Draft未发布 Normal已发布', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_title (title), KEY idx_subject_id (subject_id), KEY idx_teacher_id (teacher_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='课程';

/*Data for the table edu_course */

insert into edu_course(id,teacher_id,subject_id,subject_parent_id,title,price,lesson_num,cover,buy_count,view_count,version,status,gmt_create,gmt_modified) values ('10','1','1101348944971091969','1101348944920760321','零基础入门学习Python课程学习','1.0000',10,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/06/866e9aca-b530-4f71-a690-72d4a4bfd1e7.jpg',80,165,21,'Normal','2018-03-26 00:00:28','2019-02-21 20:46:36'),('14','1','1101348944971091969','1101348944920760321','XHTML CSS2 JS整站制作教程课程学习','0.0000',3,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/d0086eb0-f2dc-45f7-bba1-744d95e5be0f.jpg',3,38,15,'Normal','2018-04-02 18:33:34','2019-04-10 11:36:38'),('15','1','1101348944971091969','1101348944920760321','HTML5入门课程学习','0.0000',23,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/22997b8e-3606-4d2e-9b4f-09f48418b6e4.jpg',0,39,17,'Normal','2018-04-02 18:34:32','2019-03-13 06:04:22'),('17','2','1101348944971091969','1101348944920760321','MySql从入门到精通','0.0000',100,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/258d399d-27fc-4f87-9534-619118028b39.jpg',34,130,4,'Normal','2018-04-02 21:13:58','2019-03-13 06:00:56'),('18','1','1101348944971091969','1101348944920760321','Java精品课程','111111.9900',20,'http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/06/866e9aca-b530-4f71-a690-72d4a4bfd1e7.jpg',150,601,6,'Normal','2018-04-02 21:28:46','2019-04-10 11:34:57'),('25','3','223','','听力口语训练营','0.0000',0,'',0,13,14,'Normal','2018-02-26 19:23:48','2019-02-21 20:46:42'),('26','4','223','','CAD4零基础教学','0.0000',0,'',0,34,35,'Normal','2018-02-26 19:24:44','2019-02-21 20:46:43');

/*Table structure for table edu_course_description */

DROP TABLE IF EXISTS edu_course_description;

CREATE TABLE edu_course_description ( id char(19) NOT NULL COMMENT '课程ID', description text COMMENT '课程简介', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程简介';

/*Data for the table edu_course_description */

insert into edu_course_description(id,description,gmt_create,gmt_modified) values ('1104870479077879809','

11

','2019-03-11 06:23:44','2019-03-11 06:23:44'),('14','','2019-03-13 06:04:43','2019-03-13 06:05:33'),('15','','2019-03-13 06:03:33','2019-03-13 06:04:22'),('17','','2019-03-13 05:59:11','2019-03-13 06:00:56'),('18','

本套Java视频完全针对零基础学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。

\n

------------------------------------

\n

视频特点:

\n

通过学习本Java视频教程,大家能够真正将Java基础知识学以致用、活学活用,构架Java编程思想,牢牢掌握"源码级"的Javase核心技术,并为后续JavaWeb等技术的学习奠定扎实基础。

1.通俗易懂,细致入微:每个知识点高屋建瓴,深入浅出,简洁明了的说明问题
2.具实战性:全程真正代码实战,涵盖上百个企业应用案例及练习
3.深入:源码分析,更有 Java 反射、动态代理的实际应用等
4.登录尚硅谷官网,技术讲师免费在线答疑

','2019-03-06 18:06:36','2019-03-06 19:45:30');

/*Table structure for table edu_subject */

DROP TABLE IF EXISTS edu_subject;

CREATE TABLE edu_subject ( id char(19) NOT NULL COMMENT '课程类别ID', title varchar(10) NOT NULL COMMENT '类别名称', parent_id char(19) NOT NULL DEFAULT '0' COMMENT '父ID', sort int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_parent_id (parent_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='课程科目';

/*Data for the table edu_subject */

insert into edu_subject(id,title,parent_id,sort,gmt_create,gmt_modified) values ('1101348944920760321','后端开发 ','0',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348944971091969','Java','1101348944920760321',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945050783746','Python','1101348944920760321',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945101115393','前端开发 ','0',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945155641345','HTML/CSS','1101348945101115393',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945235333122','JavaScript','1101348945101115393',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945352773634','云计算 ','0',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945411493889','Docker','1101348945352773634',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1101348945482797058','云服务','1101348945352773634',0,'2019-03-01 13:10:25','2019-03-01 13:10:25'),('1103221675555667970','系统/运维 ','0',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221675761188866','Linux','1103221675555667970',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221675840880641','Windows','1103221675555667970',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221675895406594','数据库 ','0',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221675928961025','MySQL','1103221675895406594',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221676012847105','MongoDB','1103221675895406594',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221676071567362','大数据 ','0',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221676134481922','Hadoop','1103221676071567362',0,'2019-03-06 17:11:59','2019-03-06 17:11:59'),('1103221676209979394','Spark','1103221676071567362',0,'2019-03-06 17:11:59','2019-03-06 17:11:59');

/*Table structure for table edu_teacher */

DROP TABLE IF EXISTS edu_teacher;

CREATE TABLE edu_teacher ( id char(19) NOT NULL COMMENT '讲师ID', name varchar(20) NOT NULL COMMENT '讲师姓名', intro varchar(255) NOT NULL COMMENT '讲师资历,一句话说明讲师', career text COMMENT '讲师简介', level int(10) unsigned NOT NULL COMMENT '头衔 1高级讲师 2首席讲师', avatar varchar(255) DEFAULT NULL COMMENT '讲师头像', sort int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序', is_deleted tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='讲师';

/*Data for the table edu_teacher */

insert into edu_teacher(id,name,intro,career,level,avatar,sort,is_deleted,gmt_create,gmt_modified) values ('1','刘德华9','毕业于师范大学数学系,热爱教育事业,执教数学思维6年有余','具备深厚的数学思维功底、丰富的小学教育经验,授课风格生动活泼,擅长用形象生动的比喻帮助理解、简单易懂的语言讲解难题,深受学生喜欢',2,'http://guli-file.oss-cn-beijing.aliyuncs.com/avatar/2019/02/27/073eb5d2-f5f4-488a-82ed-aec8a5289a5d.png',10,1,'2018-03-30 17:15:57','2019-02-23 05:48:45'),('10','唐嫣','北京师范大学法学院副教授','北京师范大学法学院副教授、清华大学法学博士。自2004年至今已有9年的司法考试培训经验。长期从事司法考试辅导,深知命题规律,了解解题技巧。内容把握准确,授课重点明确,层次分明,调理清晰,将法条法理与案例有机融合,强调综合,深入浅出。',1,'http://guli-file.oss-cn-beijing.aliyuncs.com/avatar/2019/02/27/073eb5d2-f5f4-488a-82ed-aec8a5289a5d.png',20,0,'2018-04-03 14:32:19','2019-02-22 02:01:26'),('2','周润发','中国人民大学附属中学数学一级教师','中国科学院数学与系统科学研究院应用数学专业博士,研究方向为数字图像处理,中国工业与应用数学学会会员。参与全国教育科学“十五”规划重点课题“信息化进程中的教育技术发展研究”的子课题“基与课程改革的资源开发与应用”,以及全国“十五”科研规划全国重点项目“掌上型信息技术产品在教学中的运用和开发研究”的子课题“用技术学数学”。',2,'http://guli-file.oss-cn-beijing.aliyuncs.com/avatar/2019/02/26/e99253b5-8235-4952-90b3-b0151ccc0d53.jpg',1,0,'2018-03-30 18:28:26','2019-02-22 02:01:26'),('3','钟汉良','钟汉良钟汉良钟汉良钟汉良','中教一级职称。讲课极具亲和力。',1,'http://guli-file.oss-cn-beijing.aliyuncs.com/avatar/2019/02/26/250bab5f-bbd6-49ab-80c3-7413ce806e83.jpg',2,0,'2018-03-31 09:20:46','2019-02-22 02:01:27'),('4','周杰伦','长期从事考研政治课讲授和考研命题趋势与应试对策研究。考研辅导新锐派的代表。','政治学博士、管理学博士后,北京师范大学马克思主义学院副教授。多年来总结出了一套行之有效的应试技巧与答题方法,针对性和实用性极强,能帮助考生在轻松中应考,在激励的竞争中取得高分,脱颖而出。',1,'',1,0,'2018-04-03 14:13:51','2019-02-22 02:01:28'),('5','陈伟霆','人大附中2009届毕业生','北京大学数学科学学院2008级本科生,2012年第八届学生五四奖章获得者,在数学领域取得多项国际国内奖项,学术研究成绩突出。曾被两次评为北京大学三好学生、一次评为北京大学三好标兵,获得过北京大学国家奖学金、北京大学廖凯原奖学金、北京大学星光国际一等奖学金、北京大学明德新生奖学金等。',1,'',1,0,'2018-04-03 14:15:36','2019-02-22 02:01:29'),('6','姚晨','华东师范大学数学系硕士生导师,中国数学奥林匹克高级教练','曾参与北京市及全国多项数学活动的命题和组织工作,多次带领北京队参加高中、初中、小学的各项数学竞赛,均取得优异成绩。教学活而新,能够调动学生的学习兴趣并擅长对学生进行思维点拨,对学生学习习惯的养成和非智力因素培养有独到之处,是一位深受学生喜爱的老师。',1,'',1,0,'2018-04-01 14:19:28','2019-02-22 02:01:29'),('7','胡歌','考研政治辅导实战派专家,全国考研政治命题研究组核心成员。','法学博士,北京师范大学马克思主义学院副教授,专攻毛泽东思想概论、邓小平理论,长期从事考研辅导。出版著作两部,发表学术论文30余篇,主持国家社会科学基金项目和教育部重大课题子课题各一项,参与中央实施马克思主义理论研究和建设工程项目。',2,'',8,0,'2018-04-03 14:21:03','2019-02-22 02:01:30'),('8','旦增尼玛','上海师范大学法学院副教授','上海师范大学法学院副教授、清华大学法学博士。自2004年至今已有9年的司法考试培训经验。长期从事司法考试辅导,深知命题规律,了解解题技巧。内容把握准确,授课重点明确,层次分明,调理清晰,将法条法理与案例有机融合,强调综合,深入浅出。',1,'http://guli-file.oss-cn-beijing.aliyuncs.com/avatar/2019/02/26/ba006bc4-b1ca-4e13-a0f1-7ffb0abc0a4e.jpg',9,0,'2018-04-03 14:23:06','2019-02-22 02:01:31'),('9','谢娜','资深课程设计专家,专注10年AACTP美国培训协会认证导师','十年课程研发和培训咨询经验,曾任国企人力资源经理、大型外企培训经理,负责企业大学和培训体系搭建;曾任专业培训机构高级顾问、研发部总监,为包括广东移动、东莞移动、深圳移动、南方电网、工商银行、农业银行、民生银行、邮储银行、TCL集团、清华大学继续教育学院、中天路桥、广西扬翔股份等超过200家企业提供过培训与咨询服务,并担任近50个大型项目的总负责人。',1,'',10,0,'2018-04-03 14:23:33','2019-02-22 02:01:32');

/*Table structure for table edu_video */

DROP TABLE IF EXISTS edu_video;

CREATE TABLE edu_video ( id char(19) NOT NULL COMMENT '视频ID', course_id char(19) NOT NULL COMMENT '课程ID', chapter_id char(19) NOT NULL COMMENT '章节ID', title varchar(50) NOT NULL COMMENT '节点名称', video_source_id varchar(100) DEFAULT NULL COMMENT '云端视频资源', video_original_name varchar(100) DEFAULT NULL COMMENT '原始文件名称', sort int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段', play_count bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '播放次数', is_free tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否可以试听:0收费 1免费', duration float NOT NULL DEFAULT '0' COMMENT '视频时长(秒)', status varchar(20) NOT NULL DEFAULT '' COMMENT '视频状态', size bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '视频源文件大小(字节)', version bigint(20) unsigned NOT NULL DEFAULT '1' COMMENT '乐观锁', gmt_create datetime NOT NULL COMMENT '创建时间', gmt_modified datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (id), KEY idx_course_id (course_id), KEY idx_chapter_id (chapter_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='课程视频';

/*Data for the table edu_video */

insert into edu_video(id,course_id,chapter_id,title,video_source_id,video_original_name,sort,play_count,is_free,duration,status,size,version,gmt_create,gmt_modified) values ('17','18','15','第一节:Java简介','e669f3decd1049bc93ffd57d65559c12','第一集',1,1000,1,100,'Draft',0,1,'2019-01-01 13:08:57','2019-03-09 08:21:42'),('18','18','15','第二节:表达式和赋值语句','2d99b08ca0214909899910c9ba042d47','7 - How Do I Find Time for My ',2,999,1,100,'Draft',0,1,'2019-01-01 13:09:02','2019-03-08 03:30:27'),('19','18','15','第三节:String类','',NULL,3,888,0,100,'Draft',0,1,'2019-01-01 13:09:05','2019-02-21 20:46:10'),('20','18','15','第四节:程序风格','',NULL,4,666,0,100,'Draft',0,1,'2019-01-01 13:09:05','2019-02-21 20:46:10');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE /; /!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS /; /!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS /; /!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

application.properties

# 服务端口
server.port=8110
# 服务名
spring.application.name=guli-edu
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli_edu_190105?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=
# Hikari是Spring Boot 2.0之后默认整合的数据库连接池,比druid更快的数据库连接池
# 数据源类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 连接池名称,默认HikariPool-1
spring.datasource.hikari.pool-name=GuliHikariPool
# 最大连接数,小于等于0会被重置为默认值10;大于零小于1会被重置为minimum-idle的值
spring.datasource.hikari.maximum-pool-size=12
# 连接超时时间:毫秒,小于250毫秒,否则被重置为默认值30秒
spring.datasource.hikari.connection-timeout=60000
# 最小空闲连接,默认值10,小于0或大于maximum-pool-size,都会重置为maximum-pool-size
spring.datasource.hikari.minimum-idle=10
# 空闲连接超时时间,默认值600000(10分钟),大于等于max-lifetime且max-lifetime>0,会被重置为0;不等于0且小于10秒,会被重置为10秒。
# 只有空闲连接数大于最大连接数且空闲时间超过该值,才会被释放
spring.datasource.hikari.idle-timeout=500000
# 连接最大存活时间.不等于0且小于30秒,会被重置为默认值30分钟.设置应该比mysql设置的超时时间短
spring.datasource.hikari.max-lifetime=540000
#连接测试查询
spring.datasource.hikari.connection-test-query=SELECT 1
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

code generator

package com.guli.edu;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
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.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;

import java.util.ArrayList;

public class CodeGenerator {
    @Test
    public void genCode() {
        String moduleName = "edu";
        // 1、创建代码生成器
        AutoGenerator mpg = new AutoGenerator();
        // 2、全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("outwittester");
        gc.setOpen(false); //生成后是否打开资源管理器
        gc.setFileOverride(false); //重新生成时文件是否覆盖
        gc.setServiceName("%sService"); //去掉Service接口的首字母I
        gc.setIdType(IdType.ID_WORKER_STR); //主键策略
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        gc.setSwagger2(true);//开启Swagger2模式
        mpg.setGlobalConfig(gc);
        // 3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/guli_" + moduleName + "_190105");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("qpzm1125");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
        // 4、包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(moduleName); //模块名
        pc.setParent("com.guli");
        pc.setController("controller"); // default for these 4
        pc.setEntity("entity");
        pc.setService("service");
        pc.setMapper("mapper");
        mpg.setPackageInfo(pc);
        // 5、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude(moduleName + "_\\w*");//设置要映射的表名
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setTablePrefix(pc.getModuleName() + "_");//设置表前缀不生成
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
        strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀
        //自动填充
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtModified);
        strategy.setTableFillList(tableFills);
        strategy.setVersionFieldName("version");//乐观锁列
        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
        mpg.setStrategy(strategy);
        // 6、执行
        mpg.execute();
    }
}

controller

admin --> TeacherAdminController

config --> MybatisPlusConfig

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

spring.jackson.time-zone=GMT-4

Postman test list and delete

swagger2

in common

create R and ResultCodeNum

change R type to customize return format and msg

pagination

query package in edu

teacher query and teach service

teacher service implementation

in common

handler and scan package

teacher controller

add getById updateById

Exception Handler

custome exception

log

OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL

logback

exception util