一、介绍
1.springboot是spring项目的总结+整合
当我们搭smm,ssh,ssjdbc等组合框架时,各种配置不胜其烦,不仅是配置问题,在添加各种依赖时也是让人头疼,关键有些jar包之间还会出现冲突,让你的项目出现难以解决的问题。基于这种情况,springboot横空出世,在考虑到Struts控制层框架有漏洞,springboot放弃(大多数企业同样如此)了Struts,转而代之是springMVC,不过,springboot是自动集成springMVC的,不需要任何配置,不需要任何依赖,直接使用各种控制层注解。springboot是springcloud的基础,是开启微服务时代的钥匙。
二、新建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‘, ‘1@qq.com‘, ‘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‘, ‘1@qq.com‘, ‘0‘); INSERT INTO `user` VALUES (‘13‘, ‘1015‘, ‘123456‘, ‘2019-03-20 16:36:06‘, ‘1‘, ‘1‘, ‘aa‘, ‘2000-02-25‘, ‘1‘, ‘13212345678‘, ‘1@qq.com‘, ‘0‘); INSERT INTO `user` VALUES (‘15‘, ‘1018‘, ‘12345678‘, ‘2019-03-20 16:59:24‘, ‘1‘, ‘1‘, ‘hgh‘, ‘2001-03-20‘, ‘3‘, ‘13212345678‘, ‘1@qq.com‘, ‘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‘, ‘1@qq.com‘, ‘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 ;
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测试接口
javaweb各种框架组合案例(五):springboot+mybatis+generator
原文:https://www.cnblogs.com/xiaogblog/p/11119349.html