javaweb各种框架组合案例(五):springboot+mybatis+generator

一、新建springboot工程

1. 使用idea新建project,选择spring Initializr,next

2. 填写坐标信息,next

 3. web选择Spring Web Starter,SQL选择MyBatis Framework,next

 4. 填写项目名已经存放位置,finish

二、项目构建

1. 项目包结构

2. 数据库

/*
Navicat MySQL Data Transfer

Source Server         : xiaog
Source Server Version : 50717
Source Host           : localhost:3306
Source Database       : music4j

Target Server Type    : MYSQL
Target Server Version : 50717
File Encoding         : 65001

Date: 2019-05-30 19:31:54
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for apply
-- ----------------------------
DROP TABLE IF EXISTS `apply`;
CREATE TABLE `apply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL COMMENT '申请人',
  `content` text COMMENT '申请内容',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
  `is_agree` tinyint(4) DEFAULT '0' COMMENT '是否同意(0:未同意,1:已同意)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='申请成为音乐人';

-- ----------------------------
-- Records of apply
-- ----------------------------

-- ----------------------------
-- Table structure for attachment
-- ----------------------------
DROP TABLE IF EXISTS `attachment`;
CREATE TABLE `attachment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `attach_code` varchar(32) DEFAULT NULL COMMENT '外键',
  `file_uri` varchar(255) DEFAULT NULL,
  `type` varchar(32) DEFAULT NULL COMMENT '文件类型,图片:image,视频:video,音频:audio',
  `file_name` varchar(32) DEFAULT NULL COMMENT '文件名,123454545.mp3',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of attachment
-- ----------------------------
INSERT INTO `attachment` VALUES ('3', '1559195477278', 'D:/music_cms/upload/1559195477278.mp3', 'audio', '1559195477278.mp3');
INSERT INTO `attachment` VALUES ('4', '1559195477278', 'D:/music_cms/upload/1559195477278.png', 'image', '1559195477278.png');
INSERT INTO `attachment` VALUES ('5', '1559195637217', 'D:/music_cms/upload/1559195637217.mp3', 'audio', '1559195637217.mp3');
INSERT INTO `attachment` VALUES ('6', '1559195637217', 'D:/music_cms/upload/1559195637217.png', 'image', '1559195637217.png');
INSERT INTO `attachment` VALUES ('7', '1559195732338', 'D:/music_cms/upload/1559195732338.mp3', 'audio', '1559195732338.mp3');
INSERT INTO `attachment` VALUES ('8', '1559195732338', 'D:/music_cms/upload/1559195732338.png', 'image', '1559195732338.png');
INSERT INTO `attachment` VALUES ('9', '1559195803759', 'D:/music_cms/upload/1559195803759.mp3', 'audio', '1559195803759.mp3');
INSERT INTO `attachment` VALUES ('10', '1559195803759', 'D:/music_cms/upload/1559195803759.png', 'image', '1559195803759.png');
INSERT INTO `attachment` VALUES ('11', '1559195859638', 'D:/music_cms/upload/1559195859638.mp3', 'audio', '1559195859638.mp3');
INSERT INTO `attachment` VALUES ('12', '1559195859638', 'D:/music_cms/upload/1559195859638.png', 'image', '1559195859638.png');
INSERT INTO `attachment` VALUES ('13', '1559195935284', 'D:/music_cms/upload/1559195935284.mp3', 'audio', '1559195935284.mp3');
INSERT INTO `attachment` VALUES ('14', '1559195935284', 'D:/music_cms/upload/1559195935284.png', 'image', '1559195935284.png');
INSERT INTO `attachment` VALUES ('15', '1559195997572', 'D:/music_cms/upload/1559195997572.mp3', 'audio', '1559195997572.mp3');
INSERT INTO `attachment` VALUES ('16', '1559195997572', 'D:/music_cms/upload/1559195997572.png', 'image', '1559195997572.png');
INSERT INTO `attachment` VALUES ('17', '1559196043753', 'D:/music_cms/upload/1559196043753.mp3', 'audio', '1559196043753.mp3');
INSERT INTO `attachment` VALUES ('18', '1559196043753', 'D:/music_cms/upload/1559196043753.png', 'image', '1559196043753.png');
INSERT INTO `attachment` VALUES ('19', '1559196097789', 'D:/music_cms/upload/1559196097789.mp3', 'audio', '1559196097789.mp3');
INSERT INTO `attachment` VALUES ('20', '1559196097789', 'D:/music_cms/upload/1559196097789.png', 'image', '1559196097789.png');
INSERT INTO `attachment` VALUES ('21', '1559196148317', 'D:/music_cms/upload/1559196148317.mp3', 'audio', '1559196148317.mp3');
INSERT INTO `attachment` VALUES ('22', '1559196148317', 'D:/music_cms/upload/1559196148317.png', 'image', '1559196148317.png');
INSERT INTO `attachment` VALUES ('23', '1559196232057', 'D:/music_cms/upload/1559196232057.mp3', 'audio', '1559196232057.mp3');
INSERT INTO `attachment` VALUES ('24', '1559196232057', 'D:/music_cms/upload/1559196232057.png', 'image', '1559196232057.png');
INSERT INTO `attachment` VALUES ('25', '1559196315462', 'D:/music_cms/upload/1559196315462.mp3', 'audio', '1559196315462.mp3');
INSERT INTO `attachment` VALUES ('26', '1559196315462', 'D:/music_cms/upload/1559196315462.png', 'image', '1559196315462.png');
INSERT INTO `attachment` VALUES ('27', '1559196367918', 'D:/music_cms/upload/1559196367918.mp3', 'audio', '1559196367918.mp3');
INSERT INTO `attachment` VALUES ('28', '1559196367918', 'D:/music_cms/upload/1559196367918.png', 'image', '1559196367918.png');
INSERT INTO `attachment` VALUES ('29', '1559196430212', 'D:/music_cms/upload/1559196430212.mp3', 'audio', '1559196430212.mp3');
INSERT INTO `attachment` VALUES ('30', '1559196430212', 'D:/music_cms/upload/1559196430212.png', 'image', '1559196430212.png');

-- ----------------------------
-- Table structure for love
-- ----------------------------
DROP TABLE IF EXISTS `love`;
CREATE TABLE `love` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `song_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='点赞表';

-- ----------------------------
-- Records of love
-- ----------------------------

-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_name` varchar(32) DEFAULT NULL COMMENT '歌单名',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌单表';

-- ----------------------------
-- Records of menu
-- ----------------------------

-- ----------------------------
-- Table structure for menu_song
-- ----------------------------
DROP TABLE IF EXISTS `menu_song`;
CREATE TABLE `menu_song` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_id` int(11) DEFAULT NULL,
  `song_id` int(11) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '歌曲添加时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌单歌曲表';

-- ----------------------------
-- Records of menu_song
-- ----------------------------

-- ----------------------------
-- Table structure for song
-- ----------------------------
DROP TABLE IF EXISTS `song`;
CREATE TABLE `song` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` int(11) DEFAULT NULL COMMENT '由谁创建',
  `status` tinyint(4) DEFAULT '0' COMMENT '状态(-1:已删除,0:未审核,1:已审核)',
  `song_name` varchar(32) DEFAULT NULL COMMENT '歌名',
  `singer` varchar(32) DEFAULT '',
  `lyrics` text COMMENT '歌词',
  `lyricist` varchar(32) DEFAULT '' COMMENT '词作者',
  `composer` varchar(32) DEFAULT '' COMMENT '曲作者',
  `views` int(11) DEFAULT '0',
  `loves` int(11) DEFAULT '0',
  `collections` int(11) DEFAULT '0',
  `replies` int(11) DEFAULT '0' COMMENT '评论量',
  `attach_code` varchar(32) DEFAULT NULL COMMENT '用于附件表的外键,也可用于歌曲链接',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='歌曲表';

-- ----------------------------
-- Records of song
-- ----------------------------
INSERT INTO `song` VALUES ('2', '2019-05-30 13:51:17', '1', '1', '老街', '李荣浩', '一张褪色的照片\r\n好像带给我一点点怀念\r\n巷尾老爷爷卖的热汤面\r\n味道弥漫过旧旧的后院\r\n流浪猫睡熟在摇晃秋千\r\n夕阳照了一遍他眯着眼\r\n那张同桌寄的明信片\r\n安静的躺在课桌的里面\r\n快要过完的春天\r\n还有雕刻着图案的门帘\r\n窄窄的长长的过道两边\r\n老房子依然升起了炊烟\r\n刚刚下完了小雨的季节\r\n爸妈又一起走过的老街\r\n记不得哪年的哪一天\r\n很漫长又很短暂的岁月\r\n现在已经回不去\r\n早已流逝的光阴\r\n手里的那一张渐渐模糊不清的车票\r\n成了回忆的信号\r\n忘不掉的是什么我也不知道\r\n想不起当年模样\r\n看也看不到 去也去不了的地方\r\n也许那老街的腔调是属于我的忧伤\r\n嘴角那点微笑越来越勉强\r\n忘不掉的是什么我也不知道\r\n放不下熟悉片段\r\n回头望一眼 已经很多年的时间\r\n透过手指间看着天\r\n我又回到那老街\r\n靠在你们身边渐行渐远\r\n快要过完的春天\r\n还有雕刻着图案的门帘\r\n窄窄的长长的过道两边\r\n老房子依然升起了炊烟\r\n刚刚下完了小雨的季节\r\n爸妈又一起走过的老街\r\n记不得哪年的哪一天\r\n很漫长又很短暂的岁月\r\n现在已经回不去\r\n早已流逝的光阴\r\n手里的那一张渐渐模糊不清的车票\r\n成了回忆的信号\r\n忘不掉的是什么我也不知道\r\n想不起当年模样\r\n看也看不到 去也去不了的地方\r\n也许那老街的腔调是属于我的忧伤\r\n嘴角那点微笑越来越勉强\r\n忘不掉的是什么我也不知道\r\n放不下熟悉片段\r\n回头望一眼 已经很多年的时间\r\n透过手指间看着天\r\n我又回到那老街\r\n靠在你们身边渐行渐远', '李荣浩', '李荣浩', '2', '0', '0', '0', '1559195477278');
INSERT INTO `song` VALUES ('3', '2019-05-30 13:53:57', '1', '1', '好心分手', '卢巧音/王力宏', '是否很惊讶讲不出说话\r\n\r\n没错我是说你想分手吗\r\n\r\n曾给你驯服到就像绵羊\r\n\r\n何解会反咬你一下你知吗\r\n\r\n也许该分心不应再说话\r\n\r\n被放弃的我应有此报吗\r\n\r\n如果我曾是个坏牧羊人\r\n\r\n能否再让我试一下\r\n\r\n抱一下\r\n\r\n回头望伴你走\r\n\r\n从来未曾幸福过\r\n\r\n恨太多没结果\r\n\r\n往事重提是折磨\r\n\r\n下半生陪住你\r\n\r\n怀疑快乐也不多\r\n\r\n被我伤让你痛\r\n\r\n好心一早放开我\r\n\r\n从头努力也坎坷\r\n\r\n通通不要好过\r\n\r\n为何唱着这首歌\r\n\r\n为怨恨而分手\r\n\r\n问你是否原谅我\r\n\r\n若注定有一点苦楚\r\n\r\n不如自己亲手割破\r\n\r\n回头吧不要走\r\n\r\n不要这样离开我\r\n\r\n恨太多没结果\r\n\r\n往事重提是折磨\r\n\r\n下半生陪住你\r\n\r\n怀疑快乐也不多\r\n\r\n没有心别再拖\r\n\r\n好心一早放开我\r\n\r\n从头努力也坎坷\r\n\r\n通通不要好过\r\n\r\n为何唱着这首歌\r\n\r\n为怨恨而分手\r\n\r\n问你是否原谅我\r\n\r\n若勉强也分到不多\r\n\r\n不如什么也摔破\r\n\r\n好心分手每天播\r\n\r\n可知歌者也奈何\r\n\r\n难捱就无谓再拖\r\n\r\n好心一早放开我\r\n\r\n从头努力也坎坷\r\n\r\n通通不要好过\r\n\r\n为何唱着这首歌\r\n\r\n为怨恨而分手\r\n\r\n问你是否原谅我\r\n\r\n若注定有一点苦楚\r\n\r\n不如自己亲手割破', '黄伟文', '雷颂德', '1', '0', '0', '0', '1559195637217');
INSERT INTO `song` VALUES ('4', '2019-05-30 13:55:32', '1', '1', '断桥残雪', '许嵩', '寻不到花的折翼枯叶蝶,\r\n永远也看不见凋谢;\r\n江南夜色下的小桥屋檐,\r\n读不懂塞北的荒野。\r\n梅开时节因寂寞而缠绵,\r\n春归后又很快湮灭;\r\n独留我赏烟花飞满天,\r\n摇曳后就随风飘远。\r\n断桥是否下过雪?\r\n我望着湖面;\r\n水中寒月如雪,\r\n指尖轻点融解。\r\n断桥是否下过雪?\r\n又想起你的脸;\r\n若是无缘再见,\r\n白堤柳帘垂泪好几遍。\r\n寻不到花的折翼枯叶蝶,\r\n永远也看不见凋谢;\r\n江南夜色下的小桥屋檐,\r\n断桥残雪吉他谱\r\n断桥残雪吉他谱\r\n读不懂塞北的荒野。\r\n梅开时节因寂寞而缠绵,\r\n春归后又很快湮灭;\r\n独留我赏烟花飞满天,\r\n摇曳后就随风飘远。\r\n断桥是否下过雪?\r\n我望着湖面;\r\n水中寒月如雪,\r\n指尖轻点融解。\r\n断桥是否下过雪?\r\n又想起你的脸;\r\n若是无缘再见,\r\n白堤柳帘垂泪好几遍。', '许嵩', '', '1', '0', '0', '0', '1559195732338');
INSERT INTO `song` VALUES ('5', '2019-05-30 13:56:44', '1', '1', '有何不可', '许嵩', '天空好想下雨\r\n我好想住你隔壁\r\n傻站在你家楼下\r\n抬起头 数乌云\r\n如果场景里出现一架钢琴\r\n我会唱歌给你听\r\n哪怕(好)多盆水往下淋\r\n夏天快要过去\r\n请你少买冰淇淋\r\n天凉就别穿短裙\r\n别再那么淘气\r\n如果有时不那么开心\r\n我愿意将格洛米借给你\r\n你其实明白我心意\r\n为你唱这首歌 没有什么风格\r\n它仅仅代表着 我想给你快乐\r\n为你解冻冰河 为你做一只扑火的飞蛾\r\n没有什么事情是不值得\r\n为你唱这首歌 没有什么风格\r\n它仅仅代表着 我希望你快乐\r\n为你辗转反侧 为你放弃世界有何不可\r\n夏末秋凉里带一点温热 有换季的颜色\r\nmusic。。。\r\n天空好想下雨\r\n我好想住你隔壁\r\n傻站在你家楼下\r\n抬起头 数乌云\r\n如果场景里出现一架钢琴\r\n填    词 许嵩 谱    曲 许嵩\r\n我会唱歌给你听\r\n哪怕(好)多盆水往下淋\r\n夏天快要过去\r\n请你少买冰淇淋\r\n天凉就别穿短裙\r\n别再那么淘气\r\n如果有时不那么开心\r\n我愿意将格洛米借给你\r\n你其实明白我心意\r\n为你唱这首歌 没有什么风格\r\n它仅仅代表着 我想给你快乐\r\n为你解冻冰河 为你做一只扑火的飞蛾\r\n没有什么事情是不值得\r\n为你唱这首歌 没有什么风格\r\n它仅仅代表着 我希望你快乐\r\n为你辗转反侧 为你放弃世界有何不可\r\n夏末秋凉里带一点温热\r\nmusic。。。\r\n为你解冻冰河 为你做一只扑火的飞蛾\r\n没有什么事情是不值得\r\n为你唱这首歌 没有什么风格\r\n它仅仅代表着 我希望你快乐\r\n为你辗转反侧 为你放弃世界有何不可\r\n夏末秋凉里带一点温热 有换季的 颜色', '许嵩', '许嵩', '0', '0', '0', '0', '1559195803759');
INSERT INTO `song` VALUES ('6', '2019-05-30 13:57:39', '1', '-1', '素颜', '许嵩', '一个人窝在摇椅里乘凉\r\n我承认这样真的很安详\r\n和楼下老爷爷一样Yeah\r\n何曼婷:听说你还在搞什么原创\r\n搞来搞去好像也就这样\r\n不如花点时间想想\r\n琢磨一下模样\r\n今夜化了美美的妆\r\n(许嵩:我相信是很美美的妆)\r\n我摇晃在舞池中央\r\n(许嵩:那种体态可以想象)\r\n何曼婷:我做我的改变 又何必纠结\r\n许嵩:那就拜托别 和我碰面\r\n如果再看你一眼\r\n是否还会有感觉\r\n当年素面朝天要多纯洁就有多纯洁\r\n何曼婷:不画扮熟的眼线\r\n不用抹匀粉底液\r\n许嵩:暴雨天\r\n何曼婷:照逛街\r\n合:偷笑别人花了脸\r\n许嵩:如果再看你一眼\r\n是否还会有感觉\r\n最真实的喜怒哀乐全都埋葬在昨天\r\n何曼婷:不掺任何的表演\r\n轰轰烈烈那几年\r\n许嵩:我怀念\r\n何曼婷:别怀念\r\n合:怀念也回不到从前\r\n许嵩:又是一个安静的晚上\r\n一个人窝在摇椅里乘凉\r\n我承认这样真的很安详\r\n和楼下老爷爷一样Yeah\r\n何曼婷:听说你还在搞什么原创\r\n搞来搞去好像也就这样\r\n不如花点时间想想\r\n琢磨一下模样\r\n今夜化了美美的妆\r\n(许嵩:我相信是很美美的妆)\r\n我摇晃在舞池中央\r\n(许嵩:那种体态可以想象)\r\n何曼婷:我做我的改变 又何必纠结\r\n许嵩:那就拜托别 和我碰面\r\n如果再看你一眼\r\n是否还会有感觉\r\n当年素面朝天要多纯洁就有多纯洁\r\n何曼婷:不画扮熟的眼线\r\n不用抹匀粉底液\r\n许嵩:暴雨天\r\n何曼婷:照逛街\r\n合:偷笑别人花了脸\r\n许嵩:如果再看你一眼\r\n是否还会有感觉\r\n最真实的喜怒哀乐全都埋葬在昨天\r\n何曼婷:不掺任何的表演\r\n轰轰烈烈那几年\r\n许嵩:我怀念\r\n何曼婷:别怀念\r\n合:怀念也回不到从前\r\n许嵩:曾经对上的瞬间\r\n难道是一种错觉\r\n那些流逝了的就永远都不会复现\r\n合:不掺任何的表演\r\n轰轰烈烈那几年\r\n许嵩:有遗憾的感觉\r\n(何曼婷:为何感觉)\r\n许嵩:那消失不见的素颜', '许嵩', '许嵩', '0', '0', '0', '0', '1559195859638');
INSERT INTO `song` VALUES ('7', '2019-05-30 13:58:55', '1', '1', '刚刚好', '薛之谦', '如果有人在灯塔\r\n拨弄她的头发\r\n思念刻在墙和瓦\r\n如果感情会挣扎\r\n没有说的儒雅\r\n把挽回的手放下\r\n镜子里的人说假话\r\n违心的样子你决定了吗\r\n装聋或者作哑 要不我先说话\r\n我们的爱情 到这刚刚好\r\n剩不多也不少 还能忘掉\r\n我应该可以 把自己照顾好\r\n我们的距离 到这刚刚好\r\n不够我们拥抱 就挽回不了\r\n用力爱过的人 不该计较\r\n是否要逼人弃了甲\r\n亮出一条伤疤\r\n不堪的根源在哪\r\n可是感情会挣扎\r\n没有别的办法\r\n它劝你不如退下\r\n如果分手太复杂\r\n流浪的歌手会放下吉他\r\n故事要美必须藏着真话\r\n我们的爱情 到这刚刚好\r\n剩不多也不少 还能忘掉\r\n我应该可以 把自己照顾好\r\n我们的距离 到这刚刚好\r\n不够我们拥抱 就挽回不了\r\n用力爱过的人 不该计较\r\n我们的爱情到这刚刚好\r\n再不争也不吵 不必再煎熬\r\n你可以不用 记得我的好\r\n我们的流浪到这刚刚好\r\n趁我们还没到 天涯海角\r\n我也不是非要去那座城堡\r\n天空有些暗了暗的刚刚好\r\n我难过的样子就没人看到\r\n你别太在意我身上的记号', '薛之谦', '薛之谦', '0', '0', '0', '0', '1559195935284');
INSERT INTO `song` VALUES ('8', '2019-05-30 13:59:57', '1', '1', '你还要我怎样', '薛之谦', '你停在了这条我们熟悉的街\r\n把你准备好的台词全念一遍\r\n我还在逞强 说着谎\r\n也没能力遮挡 你去的方向\r\n至少分开的时候我落落大方\r\n我后来都会选择绕过那条街\r\n又多希望在另一条街能遇见\r\n思念在逞强 不肯忘\r\n怪我没能力跟随 你去的方向\r\n若越爱越被动 越要落落大方\r\n你还要我怎样 要怎样\r\n你突然来的短信就够我悲伤\r\n我没能力遗忘 你不用提醒我\r\n哪怕结局就这样\r\n我还能怎样 能怎样\r\n最后还不是落得情人的立场\r\n你从来不会想 我何必这样\r\n我慢慢地回到自己的生活圈\r\n也开始可以接触新的人选\r\n爱你到最后 不痛不痒\r\n留言在计较 谁爱过一场\r\n我剩下一张 没后悔的模样\r\n你还要我怎样 要怎样\r\n你千万不要在我婚礼的现场\r\n我听完你爱的歌 就上了车\r\n爱过你很值得\r\n我不要你怎样 没怎样\r\n我陪你走的路你不能忘\r\n因为那是我 最快乐的时光\r\n后来我的生活还算理想\r\n没为你落到孤单的下场\r\n有一天晚上 梦一场\r\n你白发苍苍 说带我流浪\r\n我还是没犹豫 就随你去天堂\r\n不管能怎样 我能陪你到天亮', '薛之谦', '薛之谦', '0', '0', '0', '0', '1559195997572');
INSERT INTO `song` VALUES ('9', '2019-05-30 14:00:44', '1', '1', '绅士', '薛之谦', '好久没见了什么角色呢\r\n细心装扮着\r\n白色衬衫的袖扣是你送的\r\n尽量表现着像不在意的\r\n频繁暴露了自欺欺人者\r\n越掩饰越深刻\r\n你说我说听说\r\n忍着言不由衷的段落\r\n我反正决定自己难过\r\n我想摸你的头发\r\n只是简单的试探啊\r\n我想给你个拥抱\r\n像以前一样可以吗\r\n你退半步的动作认真的吗\r\n小小的动作伤害还那么大\r\n我只能扮演个绅士\r\n才能和你说说话\r\n我能送你回家吗\r\n可能外面要下雨了\r\n我能给你个拥抱\r\n像朋友一样可以吗\r\n我忍不住从背后抱了一下\r\n尺度掌握在不能说想你啊\r\n你就当刚认识的绅士\r\n闹了个笑话吧\r\n尽量表现着善解人意的\r\n频繁暴露了不欲人知的\r\n越掩饰越深刻\r\n想说听说别说\r\n忍着言不由衷的段落\r\n我反正注定留在角落\r\n我想摸你的头发\r\n只是简单的试探啊\r\n我想给你个拥抱\r\n像以前一样可以吗\r\n你退半步的动作认真的吗\r\n小小的动作伤害还那么大\r\n我只能扮演个绅士\r\n才能和你说说话\r\n我能送你回家吗\r\n可能外面要下雨了\r\n我能给你个拥抱\r\n像朋友一样可以吗\r\n我忍不住从背后抱了一下\r\n尺度掌握在不能说想你啊', '薛之谦', '薛之谦', '0', '0', '0', '0', '1559196043753');
INSERT INTO `song` VALUES ('10', '2019-05-30 14:01:38', '1', '1', '我好象在哪见过你', '薛之谦', '和你有关 观后无感\r\n若是真的敢问作者 何来罪恶\r\n劝人离散 有多为难\r\n若美丽的故事来的太晚\r\n所以到哪里都像快乐被燃起\r\n就好像你曾在我隔壁的班级\r\n人们把难言的爱都埋入土壤里\r\n袖手旁观着别人尽力撇清自己\r\n我听见了你的声音\r\n也藏着颗不敢见的心\r\n我躲进挑剔的人群\r\n夜一深就找那颗星星\r\n我以为旅人将我热情都燃尽\r\n你却像一张情书感觉很初级\r\n人们把晚来的爱都锁在密码里\r\n字正腔圆的演说撇清所有关系\r\n我听见了你的声音\r\n也藏着颗不敢见的心\r\n我躲进挑剔的人群\r\n夜一深就找那颗星星\r\n你听不到我的声音\r\n怕脱口而出是你姓名\r\n像确定我要遇见你\r\n就像曾经交换过眼睛\r\n我好像在哪见过你\r\n我好像在哪见过你\r\n我好像在哪见过你\r\n我在劝我该忘了你', '薛之谦', '薛之谦', '0', '0', '0', '0', '1559196097789');
INSERT INTO `song` VALUES ('11', '2019-05-30 14:02:28', '1', '1', '演员', '薛之谦', '简单点 说话的方式简单点\r\n递进的情绪请省略\r\n你又不是个演员\r\n别设计那些情节\r\n没意见 我只想看看你怎么圆\r\n你难过的太表面 像没天赋的演员\r\n观众一眼能看见\r\n该配合你演出的我演视而不见\r\n在逼一个最爱你的人即兴表演\r\n什么时候我们开始收起了底线\r\n顺应时代的改变看那些拙劣的表演\r\n可你曾经那么爱我干嘛演出细节\r\n我该变成什么样子才能延缓厌倦\r\n原来当爱放下防备后的这些那些\r\n才是考验\r\n没意见 你想怎样我都随便\r\n你演技也有限又不用说感言\r\n分开就平淡些\r\n该配合你演出的我演视而不见\r\n别逼一个最爱你的人即兴表演\r\n什么时候我们开始没有了底线\r\n顺着别人的谎言被动就不显得可怜\r\n可你曾经那么爱我干嘛演出细节\r\n我该变成什么样子才能配合出演\r\n原来当爱放下防备后的这些那些\r\n都有个期限\r\n其实台下的观众就我一个\r\n其实我也看出你有点不舍\r\n场景也习惯我们来回拉扯\r\n还计较着什么\r\n其实说分不开的也不见得\r\n其实感情最怕的就是拖着\r\n越演到重场戏越哭不出了\r\n是否还值得\r\n该配合你演出的我尽力在表演\r\n像情感节目里的嘉宾任人挑选\r\n如果还能看出我有爱你的那面\r\n请剪掉那些情节让我看上去体面', '薛之谦', '薛之谦', '0', '0', '0', '0', '1559196148317');
INSERT INTO `song` VALUES ('12', '2019-05-30 14:03:52', '1', '1', '空白格', '杨宗纬', '其实很简单 其实很自然\r\n两个人的爱由两人分担\r\n其实并不难 是你太悲观\r\n隔着一道墙不跟谁分享\r\n不想让你为难\r\n你不再需要给我个答案\r\n我想你是爱我的\r\n我猜你也舍不得\r\n但是怎么说 总觉得\r\n我们之间留了太多空白格\r\n也许你不是我的\r\n爱你却又该割舍\r\n分开或许是选择\r\n但它也可能是我们的缘分\r\n其实很简单 其实很自然\r\n两个人的爱由两人分担\r\n其实并不难 是你太悲观\r\n隔着一道墙不跟谁分享\r\n不想让你为难\r\n你不再需要给我个答案\r\n我想你是爱我的\r\n我猜你也舍不得\r\n但是怎么说 总觉得\r\n我们之间留了太多空白格\r\n也许你不是我的\r\n爱你却又该割舍\r\n分开或许是选择\r\n但它也可能是我们的缘分\r\n我想你是爱我的\r\n我猜你也舍不得\r\n但是怎么说总觉得\r\n我们之间留了太多空白格\r\n也许你不是我的\r\n爱你却又该割舍\r\n分开或许是选择\r\n但它也可能是我们的缘分', '蔡健雅', '蔡健雅', '0', '0', '0', '0', '1559196232057');
INSERT INTO `song` VALUES ('13', '2019-05-30 14:05:15', '1', '1', '我们好像在哪里见过', '杨宗纬/叶蓓', '我们好像在哪儿见过你记得吗\r\n好像那是一个春天我刚发芽\r\n我走过\r\n没有回头\r\n我记得\r\n我快忘了\r\n\r\n我们好像在哪儿见过你记得吗\r\n记得那是一个夏天盛开如花\r\n我唱歌\r\n没有对我\r\n但我记得\r\n可我快忘了\r\n\r\n我们好像在哪见过你记得吗\r\n好像那是一个秋天夕阳西下\r\n你美得让我不敢和你说话\r\n你经过我时风起浮动我的发\r\n\r\n我们好像在哪见过你记得吗\r\n记得那是一个冬天漫天雪花\r\n我走过\r\n没有回头\r\n我记得\r\n我快忘了\r\n\r\n我们好像在哪见过你记得吗\r\n那时你还是个孩子我在窗棂下\r\n我猜着你的名字刻在了墙上\r\n我画了你的模样对着弯月亮\r\n\r\n我们好像在哪见过你记得吗\r\n当我们来到今生各自天涯\r\n天涯相望今生面对谁曾想\r\n还能相遇一切就像梦一样\r\n我们好像在哪见过', '小柯', '小柯', '0', '0', '0', '0', '1559196315462');
INSERT INTO `song` VALUES ('14', '2019-05-30 14:06:08', '1', '1', '红色高跟鞋', '于文文', '该怎么去形容你最贴切\r\n拿什么跟你作比较才算特别\r\n对你的感觉 强烈\r\n却又不太了解 只凭直觉\r\n你像窝在被子里的舒服\r\n却又像风 捉摸不住\r\n像手腕上散发的香水味\r\n像爱不释手的 红色高跟鞋\r\n该怎么去形容你最贴切\r\n拿什么跟你作比较才算特别\r\n对你的感觉 强烈\r\n却又不太了解 只凭直觉\r\n你像窝在被子里的舒服\r\n却又像风 捉摸不住\r\n像手腕上散发的香水味\r\n像爱不释手的 红色高跟鞋\r\n你像窝在被子里的舒服\r\n却又像风 捉摸不住\r\n像手腕上散发的香水味\r\n像爱不释手的\r\n我爱你有种左灯右行的冲突\r\n疯狂却怕没有退路\r\n你能否让我停止这种追逐\r\n就这么双 最后唯一的\r\n红色高跟鞋', '蔡健雅', '蔡健雅', '0', '0', '0', '0', '1559196367918');
INSERT INTO `song` VALUES ('15', '2019-05-30 14:07:10', '1', '0', '只要平凡', '张杰/张碧晨', '也许很远或是昨天\r\n在这里或在对岸\r\n长路辗转离合悲欢\r\n人聚又人散\r\n放过对错才知答案\r\n活着的勇敢\r\n没有神的光环\r\n你我生而平凡\r\n在心碎中认清遗憾\r\n生命漫长也短暂\r\n跳动心脏长出藤蔓\r\n愿为险而战\r\n跌入灰暗坠入深渊\r\n沾满泥土的脸\r\n没有神的光环\r\n握紧手中的平凡\r\n此心此生无憾\r\n生命的火已点燃\r\n有一天也许会走远\r\n也许还能再相见\r\n无论在人群在天边\r\n让我再看清你的脸\r\n任泪水铺满了双眼\r\n虽无言泪满面\r\n不要神的光环\r\n只要你的平凡\r\n音乐制作人:黄超\r\n编曲:黄超\r\n吉他:黄超\r\n单簧管:刘峤\r\n和音编写:黄超\r\n和音演唱:张杰 张碧晨\r\n人声录音师:汝文博/朱玉婷\r\n录音工作室:BIG.J Studio/香蕉计划录音棚\r\n混音师:周天澈\r\n母带工程师:周天澈\r\n母带工作室:TC Faders\r\n在心碎中认清遗憾\r\n生命漫长也短暂\r\n跳动心脏长出藤蔓\r\n愿为险而战\r\n跌入灰暗坠入深渊\r\n沾满泥土的脸\r\n没有神的光环\r\n握紧手中的平凡\r\n有一天也许会走远\r\n也许还能再相见\r\n无论在人群在天边\r\n让我再看清你的脸\r\n任泪水铺满了双眼\r\n虽无言泪满面\r\n不要神的光环\r\n只要你的平凡\r\n此心此生无憾\r\n生命的火已点燃', '格格', '黄超', '0', '0', '0', '0', '1559196430212');

-- ----------------------------
-- Table structure for song_reply
-- ----------------------------
DROP TABLE IF EXISTS `song_reply`;
CREATE TABLE `song_reply` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` text COMMENT '评论内容',
  `song_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '评论时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌曲评论表';

-- ----------------------------
-- Records of song_reply
-- ----------------------------

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) DEFAULT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '密码',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `create_by` int(11) NOT NULL DEFAULT '0' COMMENT '由谁(创建者ID)创建,用户自己创建时,默认为0',
  `status` tinyint(4) DEFAULT '1' COMMENT '状态,0:禁用;1:启用)',
  `real_name` varchar(32) DEFAULT NULL COMMENT '真实姓名',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `sex` tinyint(4) DEFAULT '3' COMMENT '性别(1:男,2:女,3:未知)',
  `mobile` varchar(11) DEFAULT NULL COMMENT '手机号码',
  `email` varchar(32) DEFAULT NULL COMMENT '电子邮箱',
  `power` tinyint(4) DEFAULT '0' COMMENT '权限(0:普通用户,1:音乐人,2:管理员,3:超级管理员)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='用户';

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '1001', 'abc', '2019-03-18 09:43:15', '1', '1', '张san', '1995-03-06', '1', '13212345678', '[email protected]', '3');
INSERT INTO `user` VALUES ('3', '1002', '123', '2019-03-18 16:38:59', '1', '1', '李四', '1983-03-18', '2', null, null, '2');
INSERT INTO `user` VALUES ('4', '1003', '123', '2019-03-18 18:58:05', '1', '1', '王五', '1984-03-18', '3', null, null, '1');
INSERT INTO `user` VALUES ('6', '1005', '123', '2019-03-18 18:58:41', '1', '1', '张三丰', '1985-03-18', '3', null, null, '1');
INSERT INTO `user` VALUES ('7', '1006', '123', '2019-03-18 18:58:53', '1', '1', '张无忌', '1986-03-18', '3', null, null, '0');
INSERT INTO `user` VALUES ('8', '1007', '123', '2019-03-19 14:45:38', '1', '0', null, '1986-10-11', '3', null, null, '1');
INSERT INTO `user` VALUES ('9', '1008', '123', '2019-03-19 14:45:50', '1', '1', null, '1987-06-08', '3', null, null, '0');
INSERT INTO `user` VALUES ('10', '1009', '123', '2019-03-19 14:46:02', '1', '0', null, '1990-03-21', '3', null, null, '0');
INSERT INTO `user` VALUES ('12', '1011', '123456', '2019-03-20 16:11:30', '1', '1', 'sdd', '1999-02-25', '1', '13212345678', '[email protected]', '0');
INSERT INTO `user` VALUES ('13', '1015', '123456', '2019-03-20 16:36:06', '1', '1', 'aa', '2000-02-25', '1', '13212345678', '[email protected]', '0');
INSERT INTO `user` VALUES ('15', '1018', '12345678', '2019-03-20 16:59:24', '1', '1', 'hgh', '2001-03-20', '3', '13212345678', '[email protected]', '1');
INSERT INTO `user` VALUES ('16', '2019', '123', '2019-03-22 14:05:07', '1', '1', null, '2000-07-21', '3', null, null, '3');
INSERT INTO `user` VALUES ('18', '2020', '123', '2019-03-26 15:41:04', '3', '1', null, null, '3', null, null, '0');
INSERT INTO `user` VALUES ('19', '张三', '123', '2019-03-30 15:21:32', '0', '1', null, null, '3', null, null, '0');
INSERT INTO `user` VALUES ('20', '1033', '123', '2019-04-02 22:22:43', '0', '1', null, null, '3', null, null, '1');
INSERT INTO `user` VALUES ('21', '1034', '123', '2019-04-02 22:35:28', '0', '1', null, null, '3', null, null, '0');
INSERT INTO `user` VALUES ('22', '1111', '123', '2019-04-09 11:05:38', '0', '1', null, null, '3', null, null, '0');
INSERT INTO `user` VALUES ('23', '2222', '123', '2019-04-09 15:45:22', '0', '1', 'qq', '2019-04-11', '1', '13812345678', '[email protected]', '1');
DROP TRIGGER IF EXISTS `add_loves`;
DELIMITER ;;
CREATE TRIGGER `add_loves` AFTER INSERT ON `love` FOR EACH ROW begin
    update song set loves = loves+1 where id = NEW.song_id;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `delete_menu`;
DELIMITER ;;
CREATE TRIGGER `delete_menu` AFTER DELETE ON `menu` FOR EACH ROW BEGIN
    delete from menu_song where menu_id = OLD.id;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `add_collections`;
DELIMITER ;;
CREATE TRIGGER `add_collections` AFTER INSERT ON `menu_song` FOR EACH ROW begin
    update song set collections = collections+1 where id = NEW.song_id;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `delete_song`;
DELIMITER ;;
CREATE TRIGGER `delete_song` AFTER DELETE ON `song` FOR EACH ROW BEGIN
    delete from love where song_id = OLD.id;
    delete from menu_song where song_id = OLD.id;
    delete from song_reply where song_id = OLD.id;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `add_replies`;
DELIMITER ;;
CREATE TRIGGER `add_replies` AFTER INSERT ON `song_reply` FOR EACH ROW begin
    update song set replies = replies+1 where id = NEW.song_id;
end
;;
DELIMITER ;
DROP TRIGGER IF EXISTS `delete_user`;
DELIMITER ;;
CREATE TRIGGER `delete_user` AFTER DELETE ON `user` FOR EACH ROW BEGIN
    delete from apply where user_id = OLD.id;
    delete from love where user_id = OLD.id;
    delete from menu where user_id = OLD.id;
end
;;
DELIMITER ;
sql文件

3. 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 http://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.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xiaog</groupId>
    <artifactId>music4j</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>music4j</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-spring     -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.3</version>
        </dependency>
        <!--   database-driver     -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--   springboot2.X会将数据源默认为HirikaCP     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--    mybatis-generation    -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--      mybatis-generator      -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <configuration>
                    <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
                    <overwrite>true</overwrite>
                    <verbose>true</verbose>
                </configuration>
            </plugin>


        </plugins>
    </build>

</project>

4. application.properties

  在src/main/resource下找到application.properties文件

   因为properties文件可读性差,将其更名为application.yml,并在其中添加

spring:
  profiles:
    active: dev

5. application-dev.yml

  在resource下创建application-dev.yml文件,并在其中添加

server:
  port: 8080

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/music4j?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.xiaog.music4j.entity

#showSql
logging:
  level:
    com:
      xiaog:
        music4j:
          dao:
            debug

6. generatorConfig.xml

  在resource目录下创建generatorConfig.xml文件,在其中添加

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:换成你本地的驱动包位置-->
    <classPathEntry  location="D:/java/generator/mysql-connector-java-5.1.47.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/music4j?useSSL=false" userId="root" password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.xiaog.music4j.entity" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.xiaog.music4j.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="%" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

7. logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">

    <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->

    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="D:/nmyslog/nmys" />

    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>


    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--输出到文件-->

    <!-- 时间滚动输出 level为 DEBUG 日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_debug.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
        以及指定<appender>。<logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
    -->
    <!--<logger name="org.springframework.web" level="info"/>-->
    <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
    <!--
        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
     -->


    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        不能设置为INHERITED或者同义词NULL。默认是DEBUG
        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
    -->

    <!--开发环境:打印控制台-->
    <springProfile name="dev">
        <logger name="com.xiaog.music4j.dao" level="debug"/>
    </springProfile>

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

    <!--生产环境:输出到文件-->
    <!--<springProfile name="pro">-->
    <!--<root level="info">-->
    <!--<appender-ref ref="CONSOLE" />-->
    <!--<appender-ref ref="DEBUG_FILE" />-->
    <!--<appender-ref ref="INFO_FILE" />-->
    <!--<appender-ref ref="ERROR_FILE" />-->
    <!--<appender-ref ref="WARN_FILE" />-->
    <!--</root>-->
    <!--</springProfile>-->

</configuration>

 8. 在resource目录下创建mapper文件夹,会在项目运行时在其中生成mapper.xml文件

 

9. 在src/main/java目录下是我们项目代码结构

  在项目中会有一个XxxApplication类,这是我们的启动类,打开启动类,添加@MapperScan注解

package com.xiaog.music4j;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.xiaog.music4j.dao")
@SpringBootApplication
public class Music4jApplication {

    public static void main(String[] args) {
        SpringApplication.run(Music4jApplication.class, args);
    }

}

  在项目下创建entity、dao、service、controller等包,注意这些包必须和启动类是同级,否则报错

 

10. 运行generatorConfig.xml文件,自动生成代码

  在idea工具的顶部 Run - Edit Configurations

  

  在Command line中填写 mybatis-generator:generate -e,ok

  

   在idea顶部 Run - Run 'xxx [mybatis-generator:generate -e]'

  

  ok,再去查看代码是否生成

 

11. 再编写service层和controller层即可,可通过postman测试接口

猜你喜欢

转载自www.cnblogs.com/xiaogblog/p/11119349.html
今日推荐