SpringBoot初学笔记(SpringBoot实战之数据库相关操作)

SpringBoot


SpringBoot实战之数据库相关操作

提示:这里可以添加本文要记录的大概内容:
通过springboot访问数据库的方式有三种,第一种:JdbcTemplate,第二种JPA,第三种Mybatis,本文以movietop50 为讲解案例。
案例地址: https://github.com/CHonghaohao/movieTop50


提示:以下是本篇文章正文内容,感谢各位批评指正!

一、准备工作:

1、演示之前,需要准备好相关的工具,例如数据库,本文中的案例使用的是MySQL,在正式开始项目之前,创建表格,命名为:movietop50,具体内容如下:

/*
 Navicat Premium Data Transfer

 Source Server         : 本地
 Source Server Type    : MySQL
 Source Server Version : 50645
 Source Host           : localhost:3306
 Source Schema         : movietop50

 Target Server Type    : MySQL
 Target Server Version : 50645
 File Encoding         : 65001

 Date: 26/01/2021 10:24:45
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for top
-- ----------------------------
DROP TABLE IF EXISTS `top`;
CREATE TABLE `top`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `movie_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_director` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_actor` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_year` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_grade` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_gradenum` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_evaluate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `movie_img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 62 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of top
-- ----------------------------
INSERT INTO `top` VALUES (1, '肖申克的救赎', ' 弗兰克·德拉邦特 ', '   蒂姆·罗宾斯 Tim  ', '1994', '美国/犯罪/剧情', '9.7', '2180339', '希望让人自由', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg');
INSERT INTO `top` VALUES (2, '霸王别姬', ' 陈凯歌 Kaige Chen  ', '  张国荣 Leslie Cheung/张丰毅  ', '1993', '中国大陆/中国香港/剧情/爱情/同性', '9.6', '1617258', '风华绝代', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.jpg');
INSERT INTO `top` VALUES (3, '这个杀手不太冷', ' 吕克·贝松 Luc Besson  ', '  让·雷诺 Jean Reno/娜塔莉·波特曼 ', '1994', '法国/美国/剧情/动作/犯罪', '9.4', '1830376', '怪蜀黍和小萝莉不得不说的故事', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg');
INSERT INTO `top` VALUES (4, '泰坦尼克号', ' 詹姆斯·卡梅隆 James Cameron ', '   莱昂纳多·迪卡普里奥 ', '1997', '美国/剧情/爱情/灾难', '9.4', '1599954', '失去的才是永恒的。 ', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg');
INSERT INTO `top` VALUES (5, '美丽人生', ' 罗伯托·贝尼尼 Roberto Benigni  ', '罗伯托·贝尼尼 ', '1997', '意大利/剧情/喜剧/爱情/战争', '9.5', '1021593', '最美的谎言', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2578474613.jpg');
INSERT INTO `top` VALUES (6, '千与千寻', ' 宫崎骏 Hayao Miyazaki  ', '  柊瑠美 Rumi Hîragi ', '2001', '日本/剧情/动画/奇幻', '9.4', '1714006', '最好的宫崎骏,最好的久石让。 ', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2557573348.jpg');
INSERT INTO `top` VALUES (7, '辛德勒的名单', ' 史蒂文·斯皮尔伯格 Steven Spielberg ', '   连姆·尼森 ', '1993', '美国/剧情/历史/战争', '9.5', '839463', '拯救一个人,就是拯救整个世界', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg');
INSERT INTO `top` VALUES (8, '盗梦空间', ' 克里斯托弗·诺兰 Christopher Nolan  ', '  莱昂纳多·迪卡普里奥 ', '2010', '美国/英国/剧情/科幻/悬疑/冒险', '9.3', '1600397', '诺兰给了我们一场无法盗取的梦', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2616355133.jpg');
INSERT INTO `top` VALUES (9, '忠犬八公的故事', ' 莱塞·霍尔斯道姆 Lasse Hallström ', '   理查·基尔 ', '2009', '美国/英国/剧情', '9.4', '1092067', '永远都不能忘记你所爱的人', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p524964039.jpg');
INSERT INTO `top` VALUES (10, '海上钢琴师', ' 朱塞佩·托纳多雷 Giuseppe Tornatore  ', '  蒂姆·罗斯 Tim Roth ', '1998', '意大利/剧情/音乐', '9.3', '1303992', '每个人都要走一条自己坚定了的路,就算是粉身碎骨。 ', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2574551676.jpg');
INSERT INTO `top` VALUES (11, '星际穿越', ' 克里斯托弗·诺兰 Christopher Nolan  ', '  马修·麦康纳 ', '2014', '美国/英国/加拿大/冰岛/剧情/科幻/冒险', '9.3', '1272767', '爱是一种力量,让我们超越时空感知它的存在', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2614988097.jpg');
INSERT INTO `top` VALUES (12, '楚门的世界', ' 彼得·威尔 Peter Weir  ', '  金·凯瑞 Jim Carrey ', '1998', '美国/剧情/科幻', '9.3', '1186190', '如果再也不能见到你,祝你早安,午安,晚安', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg');
INSERT INTO `top` VALUES (13, '三傻大闹宝莱坞', ' 拉库马·希拉尼 Rajkumar Hirani ', '   阿米尔·汗 ', '2009', '印度/剧情/喜剧/爱情/歌舞', '9.2', '1456368', '英俊版憨豆,高情商版谢耳朵', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p579729551.jpg');
INSERT INTO `top` VALUES (14, '机器人总动员', ' 安德鲁·斯坦顿 Andrew Stanton  ', '  本·贝尔特 Ben Burtt ', '2008', '美国/科幻/动画/冒险', '9.3', '1028037', '小瓦力,大人生', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1461851991.jpg');
INSERT INTO `top` VALUES (15, '放牛班的春天', ' 克里斯托夫·巴拉蒂 Christophe Barratier ', '   热拉尔·朱尼奥 ', '2004', '法国/瑞士/德国/剧情/音乐', '9.3', '1011658', '天籁一般的童声,是最接近上帝的存在。 ', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910824951.jpg');
INSERT INTO `top` VALUES (16, '大话西游之大圣娶亲', ' 刘镇伟 Jeffrey Lau  ', '  周星驰 Stephen Chow/吴孟达 ', '1995', '中国香港/中国大陆/喜剧/爱情/奇幻/古装', '9.2', '1163415', '一生所爱', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2455050536.jpg');
INSERT INTO `top` VALUES (17, '熔炉', ' 黄东赫 Dong hyuk', '孔侑/Yoo/Gong/郑有美/Yu', '2011', '韩国/剧情', '9.3', '713037', '我们一路奋战不是为了改变世界,而是为了不让世界改变我们', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg');
INSERT INTO `top` VALUES (18, '疯狂动物城', ' 拜伦·霍华德 Byron Howard  ', ' 瑞奇·摩尔 Rich Moore/金妮弗 ', '2016', '美国/喜剧/动画/冒险', '9.2', '1401179', '迪士尼给我们营造的乌托邦就是这样,永远善良勇敢,永远出乎意料', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2614500649.jpg');
INSERT INTO `top` VALUES (19, '无间道', ' 刘伟强 ', '  刘德华/梁朝伟/黄秋生 ', '2002', '中国香港/剧情/犯罪/悬疑', '9.2', '952317', '香港电影史上永不过时的杰作', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2564556863.jpg');
INSERT INTO `top` VALUES (20, '教父', ' 弗朗西斯·福特·科波拉 Francis Ford Coppola ', '   马龙·白兰度 ', '1972', '美国/剧情/犯罪', '9.3', '713094', '千万不要记恨你的对手,这样会让你失去理智', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p616779645.jpg');
INSERT INTO `top` VALUES (21, '龙猫', ' 宫崎骏 Hayao Miyazaki  ', '  日高法子 Noriko Hidaka/坂本千夏 ', '1988', '日本/动画/奇幻/冒险', '9.2', '973888', '人人心中都有个龙猫,童年就永远不会消失', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2540924496.jpg');
INSERT INTO `top` VALUES (22, '当幸福来敲门', ' 加布里尔·穆奇诺 Gabriele Muccino  ', '  威尔·史密斯 ', '2006', '美国/剧情/传记/家庭', '9.1', '1173133', '平民励志片。 ', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2614359276.jpg');
INSERT INTO `top` VALUES (23, '怦然心动', ' 罗伯·莱纳 Rob Reiner ', '   玛德琳·卡罗尔 Madeline Carroll ', '2010', '美国/剧情/喜剧/爱情', '9.1', '1366297', '真正的幸福是来自内心深处', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p501177648.jpg');
INSERT INTO `top` VALUES (24, '触不可及', ' 奥利维·那卡什 Olivier Nakache  ', ' 艾力克·托兰达 Eric Toledano   ', '2011', '法国/剧情/喜剧', '9.2', '759487', '满满温情的高雅喜剧', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1454261925.jpg');
INSERT INTO `top` VALUES (25, '控方证人', ' 比利·怀尔德 Billy Wilder ', '   泰隆·鲍华 Tyrone Power ', '1957', '美国/剧情/犯罪/悬疑', '9.6', '321380', '比利·怀德满分作品', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1505392928.jpg');
INSERT INTO `top` VALUES (26, '蝙蝠侠黑暗骑士', ' 克里斯托弗·诺兰 Christopher Nolan   ', ' 克里斯蒂安·贝尔 ', '2008', '美国/英国/剧情/动作/科幻/犯罪/惊悚', '9.2', '793967', '无尽的黑暗', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p462657443.jpg');
INSERT INTO `top` VALUES (27, '活着', ' 张艺谋 Yimou Zhang  ', '  葛优 You Ge/巩俐 Li Gong ', '1994', '中国大陆/中国香港/剧情/历史/家庭', '9.3', '615725', '张艺谋最好的电影', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2513253791.jpg');
INSERT INTO `top` VALUES (28, '末代皇帝', ' 贝纳尔多·贝托鲁奇 Bernardo Bertolucci  ', '  尊龙 John Lone ', '1987', '英国/意大利/中国大陆/法国/剧情/传记/历史', '9.3', '582790', '“不要跟我比惨,我比你更惨”再适合这部电影不过了', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p452089833.jpg');
INSERT INTO `top` VALUES (29, '何以为家', ' 娜丁·拉巴基 Nadine Labaki  ', '  扎因·拉费阿 Zain al', '2018', '黎巴嫩/法国/美国/剧情', '9.1', '742609', '凝视卑弱生命,用电影改变命运', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2555295759.jpg');
INSERT INTO `top` VALUES (30, '指环王3王者无敌', ' 彼得·杰克逊 Peter Jackson ', '   伊利亚·伍德 Elijah Wood ', '2003', '美国/新西兰/剧情/动作/奇幻/冒险', '9.2', '578331', '史诗的终章', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p1910825503.jpg');
INSERT INTO `top` VALUES (31, '摔跤吧!爸爸', ' 涅提·蒂瓦里 Nitesh Tiwari ', '   阿米尔·汗 Aamir Khan ', '2016', '印度/剧情/传记/运动/家庭', '9.0', '1200205', '你不是在为你一个人战斗,你要让千千万万的女性看到女生并不是只能相夫教子', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2457983084.jpg');
INSERT INTO `top` VALUES (32, '飞屋环游记', ' 彼特·道格特 Pete Docter  ', ' 鲍勃·彼德森 Bob Peterson   ', '2009', '美国/剧情/喜剧/动画/冒险', '9.0', '1019292', '最后那些最无聊的事情,才是最值得怀念的。 ', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p485887754.jpg');
INSERT INTO `top` VALUES (33, '少年派的奇幻漂流', ' 李安 Ang Lee  ', '  苏拉·沙玛 Suraj Sharma ', '2012', '美国/中国台湾/英国/加拿大/剧情/奇幻/冒险', '9.1', '1082008', '瑰丽壮观、无人能及的冒险之旅', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1784592701.jpg');
INSERT INTO `top` VALUES (34, '十二怒汉', ' Sidney Lumet  ', '  亨利·方达 Henry Fonda ', '1957', '美国/剧情', '9.4', '350234', '1957年的理想主义。 ', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2173577632.jpg');
INSERT INTO `top` VALUES (35, '哈利·波特与魔法石', ' Chris Columbus ', '   Daniel Radcliffe ', '2001', '美国/英国/奇幻/冒险', '9.1', '781788', '童话世界的开端', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2614949805.jpg');
INSERT INTO `top` VALUES (36, '素媛', ' 李濬益 Jun ', '薛景求 Kyung', '2013', '/韩国/剧情', '9.3', '485364', '受过伤害的人总是笑得最开心,因为他们不愿意让身边的人承受一样的痛苦', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2118532944.jpg');
INSERT INTO `top` VALUES (37, '鬼子来了', ' 姜文 Wen Jiang  ', '  姜文 Wen Jiang ', '2000', '中国大陆/剧情/喜剧', '9.3', '470883', '对敌人的仁慈,就是对自己残忍', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2553104888.jpg');
INSERT INTO `top` VALUES (38, '哈尔的移动城堡', ' 宫崎骏 Hayao Miyazaki  ', '  倍赏千惠子 Chieko Baishô ', '2004', '日本/动画/奇幻/冒险', '9.1', '750244', '带着心爱的人在天空飞翔', 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2174346180.jpg');
INSERT INTO `top` VALUES (39, '天空之城', ' 宫崎骏 Hayao Miyazaki  ', '  田中真弓 Mayumi Tanaka ', '1986', '日本/动画/奇幻/冒险', '9.1', '643733', '对天空的追逐,永不停止。 ', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1446261379.jpg');
INSERT INTO `top` VALUES (40, '大话西游之月光宝盒', ' 刘镇伟 Jeffrey Lau  ', '  周星驰 Stephen Chow ', '1995', '中国香港/中国大陆/喜剧/爱情/奇幻/古装', '9.0', '928050', '旷古烁今', 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2561721372.jpg');
INSERT INTO `top` VALUES (41, '我不是药神', ' 文牧野 Muye Wen  ', '  徐峥 Zheng Xu ', '2018', '中国大陆/剧情/喜剧', '9.0', '1597217', '对我们国家而言,这样的电影多一部是一部', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2561305376.jpg');
INSERT INTO `top` VALUES (42, '罗马假日', ' 威廉·惠勒 William Wyler  ', '  奥黛丽·赫本 Audrey Hepburn ', '1953', '美国/喜剧/剧情/爱情', '9.0', '743808', '爱情哪怕只有一天', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2189265085.jpg');
INSERT INTO `top` VALUES (43, '闻香识女人', ' 马丁·布莱斯 Martin Brest  ', '  阿尔·帕西诺 Al Pacino  ', '1992', '美国/剧情', '9.1', '650636', '史上最美的探戈', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2550757929.jpg');
INSERT INTO `top` VALUES (44, '天堂电影院', ' 朱塞佩·托纳多雷 Giuseppe Tornatore   ', ' 菲利普·努瓦雷 ', '1988', '意大利/法国/剧情/爱情', '9.2', '496938', '那些吻戏,那些青春,都在影院的黑暗里被泪水冲刷得无比清晰', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2559577569.jpg');
INSERT INTO `top` VALUES (45, '辩护人', ' 杨宇硕 Woo seok', '宋康昊/Kang', '2013', '韩国/剧情', '9.2', '466423', '电影的现实意义大过电影本身', 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2158166535.jpg');
INSERT INTO `top` VALUES (46, '搏击俱乐部', ' 大卫·芬奇 David Fincher   ', ' 爱德华·诺顿 Edward Norton ', '1999', '美国/德国/剧情/动作/悬疑/惊悚', '9.0', '663050', '邪恶与平庸蛰伏于同一个母体,在特定的时间互相对峙', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910926158.jpg');
INSERT INTO `top` VALUES (47, '大闹天宫', ' 万籁鸣 Laiming Wan ', '  邱岳峰 Yuefeng Qiu ', '1961', '中国大陆/动画/奇幻', '9.3', '304648', '经典之作,历久弥新', 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2184505167.jpg');
INSERT INTO `top` VALUES (48, '李成基', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (49, '李成基', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (57, '秦正君', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (58, '秦正君', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (59, '秦正君', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (60, '秦正君', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);
INSERT INTO `top` VALUES (61, '秦正君', NULL, NULL, NULL, '1994   美国   犯罪 剧情', '9.7', '2180339', '希望让人自由', NULL);

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户登录账号',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户登录密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', '123456');
INSERT INTO `user` VALUES (2, 'chh', '123456');


2、配置数据库连接池:
1.使用application.properties配置文件,也可以使用druid连接池,另外配置文件使用yaml配置,即application.yml;这里我们配置application.properties。连接池的配置如下:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/movietop50?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3、建立与数据库对应的POJO类:
(POJO:plain old java objects : 简单的java对象,实际上就是普通javaBeans)代码如下所示:

public class Top implements Serializable {

    @Id
    private Integer id;

    private String movieName;

    private String movieDirector;

    private String movieActor;

    private String movieYear;

    private String movieType;

    private String movieGrade;

    private String movieGradenum;

    private String movieEvaluate;

    private String movieImg;

    private static final long serialVersionUID = 1L;
}

二、实际操作:

1、通过MyBatis来实现数据库的访问。首先我们需要引入 starter:

<dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>2.1.3</version>
</dependency>

(此处的starter非官方提供,所以版本号与springboot不一致,这就需要我们手动指定版本)

2、MyBatis支持通过XML或者注解的方式来指定操作数据库的SQL。
首先我们需要配置mapper的目录。我们在application.properties中进行配置:

mybatis.type-Aliases-Package=com.example.demo.Entity
mybatis.mapper-Locations=classpath:mapper/*.xml
logging.level.com.example.demo2:DEBUG
server.port=9999
######################################
###devtools 选择性配置文件 默认为true
######################################
spring.devtools.restart.enabled=true

这里配置主要包括三个部分,一个是mybatis自身的一些配置,例如基本类型的别名。第二个是指定mapper文件的位置,第三个POJO类的别名。这个配置也可以通过 Java configuration来实现,由于篇幅的问题,我这里就不详述了,有兴趣的朋友可以自己实现一下。

3、配置完后,我们先编写mapper对应的接口:

public interface TopDao {
    int deleteByPrimaryKey(Integer id);

    int insert(Top record);

    int insertSelective(Top record);

    Top selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Top record);

    int updateByPrimaryKey(Top record);

    List<Top> selectAll();

    void idTofront(Integer id);

    int insertmovie(Top top);
}

该接口暂时只定义了四个方法,即添加、更新,以及根据ID查询和分页查询。这是一个接口,并且和JPA类似,可以不用实现类。
4、接下来我们编写XML文件:



<mapper namespace="com.example.demo.Dao.TopDao">
  <resultMap id="BaseResultMap" type="com.example.demo.Entity.Top">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="movie_name" jdbcType="VARCHAR" property="movieName" />
    <result column="movie_director" jdbcType="VARCHAR" property="movieDirector" />
    <result column="movie_actor" jdbcType="VARCHAR" property="movieActor" />
    <result column="movie_year" jdbcType="VARCHAR" property="movieYear" />
    <result column="movie_type" jdbcType="VARCHAR" property="movieType" />
    <result column="movie_grade" jdbcType="VARCHAR" property="movieGrade" />
    <result column="movie_gradenum" jdbcType="VARCHAR" property="movieGradenum" />
    <result column="movie_evaluate" jdbcType="VARCHAR" property="movieEvaluate" />
    <result column="movie_img" jdbcType="VARCHAR" property="movieImg" />
  resultMap>
  <sql id="Base_Column_List">
    id, movie_name, movie_director, movie_actor, movie_year, movie_type, movie_grade,
    movie_gradenum, movie_evaluate, movie_img
  sql>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from top
    where id = #{id,jdbcType=INTEGER}
  select>
  <select id="selectAll" resultMap="BaseResultMap">
      select * from top
    select>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from top
    where id = #{id,jdbcType=INTEGER}
  delete>
  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.example.demo.Entity.Top" useGeneratedKeys="true">
    insert into top (movie_name, movie_director, movie_actor,
      movie_year, movie_type, movie_grade,
      movie_gradenum, movie_evaluate, movie_img
      )
    values (#{movieName,jdbcType=VARCHAR}, #{movieDirector,jdbcType=VARCHAR}, #{movieActor,jdbcType=VARCHAR},
      #{movieYear,jdbcType=VARCHAR}, #{movieType,jdbcType=VARCHAR}, #{movieGrade,jdbcType=VARCHAR},
      #{movieGradenum,jdbcType=VARCHAR}, #{movieEvaluate,jdbcType=VARCHAR}, #{movieImg,jdbcType=VARCHAR}
      )
  insert>
  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.example.demo.Entity.Top" useGeneratedKeys="true">
    insert into top
    <trim prefix="(" suffix=")" suffixOverrides=",">
      <if test="movieName != null">
        movie_name,
      if>
      <if test="movieDirector != null">
        movie_director,
      if>
      <if test="movieActor != null">
        movie_actor,
      if>
      <if test="movieYear != null">
        movie_year,
      if>
      <if test="movieType != null">
        movie_type,
      if>
      <if test="movieGrade != null">
        movie_grade,
      if>
      <if test="movieGradenum != null">
        movie_gradenum,
      if>
      <if test="movieEvaluate != null">
        movie_evaluate,
      if>
      <if test="movieImg != null">
        movie_img,
      if>
    trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      <if test="movieName != null">
        #{movieName,jdbcType=VARCHAR},
      if>
      <if test="movieDirector != null">
        #{movieDirector,jdbcType=VARCHAR},
      if>
      <if test="movieActor != null">
        #{movieActor,jdbcType=VARCHAR},
      if>
      <if test="movieYear != null">
        #{movieYear,jdbcType=VARCHAR},
      if>
      <if test="movieType != null">
        #{movieType,jdbcType=VARCHAR},
      if>
      <if test="movieGrade != null">
        #{movieGrade,jdbcType=VARCHAR},
      if>
      <if test="movieGradenum != null">
        #{movieGradenum,jdbcType=VARCHAR},
      if>
      <if test="movieEvaluate != null">
        #{movieEvaluate,jdbcType=VARCHAR},
      if>
      <if test="movieImg != null">
        #{movieImg,jdbcType=VARCHAR},
      if>
    trim>
  insert>
  <insert id="insertmovie" parameterType="com.example.demo.Entity.Top">
    insert into top (id, movie_name, movie_director, movie_actor,
      movie_year, movie_type, movie_grade,
      movie_gradenum, movie_evaluate, movie_img
      )
    values (#{id,jdbcType=INTEGER},#{movieName,jdbcType=VARCHAR}, #{movieDirector,jdbcType=VARCHAR}, #{movieActor,jdbcType=VARCHAR},
      #{movieYear,jdbcType=VARCHAR}, #{movieType,jdbcType=VARCHAR}, #{movieGrade,jdbcType=VARCHAR},
      #{movieGradenum,jdbcType=VARCHAR}, #{movieEvaluate,jdbcType=VARCHAR}, #{movieImg,jdbcType=VARCHAR}
      )
  insert>
  <update id="updateByPrimaryKeySelective" parameterType="com.example.demo.Entity.Top">
    update top
    <set>
      <if test="movieName != null">
        movie_name = #{movieName,jdbcType=VARCHAR},
      if>
      <if test="movieDirector != null">
        movie_director = #{movieDirector,jdbcType=VARCHAR},
      if>
      <if test="movieActor != null">
        movie_actor = #{movieActor,jdbcType=VARCHAR},
      if>
      <if test="movieYear != null">
        movie_year = #{movieYear,jdbcType=VARCHAR},
      if>
      <if test="movieType != null">
        movie_type = #{movieType,jdbcType=VARCHAR},
      if>
      <if test="movieGrade != null">
        movie_grade = #{movieGrade,jdbcType=VARCHAR},
      if>
      <if test="movieGradenum != null">
        movie_gradenum = #{movieGradenum,jdbcType=VARCHAR},
      if>
      <if test="movieEvaluate != null">
        movie_evaluate = #{movieEvaluate,jdbcType=VARCHAR},
      if>
      <if test="movieImg != null">
        movie_img = #{movieImg,jdbcType=VARCHAR},
      if>
    set>
    where id = #{id,jdbcType=INTEGER}
  update>
  <update id="updateByPrimaryKey" parameterType="com.example.demo.Entity.Top">
    update top
    set movie_name = #{movieName,jdbcType=VARCHAR},
      movie_director = #{movieDirector,jdbcType=VARCHAR},
      movie_actor = #{movieActor,jdbcType=VARCHAR},
      movie_year = #{movieYear,jdbcType=VARCHAR},
      movie_type = #{movieType,jdbcType=VARCHAR},
      movie_grade = #{movieGrade,jdbcType=VARCHAR},
      movie_gradenum = #{movieGradenum,jdbcType=VARCHAR},
      movie_evaluate = #{movieEvaluate,jdbcType=VARCHAR},
      movie_img = #{movieImg,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  update>
    <update id="idTofront" parameterType="java.lang.Integer">
        update top set id = id - 1 where id > #{id,jdbcType=INTEGER}
    update>
mapper>

5、最后,我们需要手动指定mapper扫描的包:

@SpringBootApplication
@MapperScan("com.example.demo.*")
public class Movietop50Application extends SpringBootServletInitializer {
    @CrossOrigin(
            origins = {"*"}
    )
    public static void main(String[] args) {
        SpringApplication.run(Movietop50Application.class, args);
    }

(进行测试…)


总结

本文演示Spring boot与MyBatis的集成,整体上来说配置比较简单,以前做过相关配置的同学应该感觉比较明显,Spring boot确实在这方面给我们提供了很大的帮助。后续的文章中我们只会使用MyBatis这一种方式来进行数据库的操作,这里还有一点需要说明一下的是,MyBatis的分页查询在这里是手写的,这个分页在正式开发中可以通过插件来完成,不过这个与Spring boot没什么关系,所以本文暂时通过这种手动的方式来进行分页的处理。

你可能感兴趣的:(SpringBoot,java)