04. 开发图书信息管理功能
SQL
CREATE TABLE `books` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
`img` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '封面',
`author` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '作者',
`publisher` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出版社',
`year` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '出版年',
`price` double(10,2) DEFAULT NULL COMMENT '定价',
`isbn` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ISBN',
`description` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '简介',
`category_id` int DEFAULT NULL COMMENT '分类',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='图书信息';
造了 40 条数据
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (1, '瓦尔登湖', 'https://img3.doubanio.com/view/subject/l/public/s35350002.jpg', '〔美〕亨利·戴维·梭罗', '湖南文艺出版社', '2026-01', 42.80, '9787572622175', '1845年3月底至1847年9月6日,梭罗栖居在瓦尔登湖湖畔,与湖畔森林中的动植物为伴,观察、倾听、阅读、冥思、遐想。在两年多的时间里,梭罗试图在极简的物质生活中,开拓无比丰盈的精神世界。梭罗以其行动与思考,叩问生活的本质:如何更清醒地生活,如何在文明的边缘,寻回内心的独立与自由。🚣🏻♀️ \"我之所以到树林里,乃是因为我想从容不迫地生活,只面对生活的基本要素,看看我能否学到生活要教给我的东西,而不要等到我临终的时候,却发现自己没有生活过。\"', 1);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (2, '活着', 'https://img9.doubanio.com/view/subject/s/public/s29053580.jpg', '余华', '作家出版社', '2012-08', 28.00, '9787506365437', '作品讲述了主人公从富家子弟到贫苦农民的人生沉浮。在二十世纪中国的历史变革中,他先后经历了家庭的衰落、战争的洗礼、亲人的相继离世。面对命运的残酷打击,主人公依然坚韧地活着,用平凡的生命诠释了\"活着\"本身的意义和力量。这部小说通过个体的命运折射出整个时代的变迁,展现了人在极端困境中的生命韧性。作者用冷静而克制的笔触,描绘了生命的脆弱与坚韧,让读者深刻思考生存的价值和意义。', 1);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (3, '百年孤独', 'https://img2.doubanio.com/view/subject/s/public/s6384944.jpg', '加西亚·马尔克斯', '南海出版公司', '2011-06', 39.50, '9787544253994', '这是魔幻现实主义文学的代表作,讲述了布恩迪亚家族七代人在马孔多小镇的兴衰历程。通过一个家族的传奇故事,展现了拉丁美洲百年来的历史变迁和社会现实。作者创造了一个充满魔幻色彩的世界,其中现实与幻想交织,时间循环往复。小说中的人物命运与历史进程紧密相连,探讨了孤独、爱情、死亡、记忆等永恒主题。这部作品不仅是一部家族史诗,更是对人类生存状态的深刻思考,影响了世界文学的发展方向。', 1);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (4, '围城', 'https://img3.doubanio.com/view/subject/s/public/s1070222.jpg', '钱钟书', '人民文学出版社', '1991-02', 28.00, '9787020024759', '这部小说以抗战时期的中国为背景,描绘了知识分子的群像和生活状态。通过主人公在婚姻、职业和人生选择上的困境,展现了\"围城\"的寓意:城外的人想进去,城里的人想出来。作品以幽默机智的语言,深刻剖析了人性的弱点和社会的荒谬。作者对人物心理的刻画细腻入微,对生活细节的描写生动传神。这是一部关于人生选择和存在困境的经典作品,在中国现代文学史上占有重要地位。', 1);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (5, '三体', 'https://img9.doubanio.com/view/subject/s/public/s2768378.jpg', '刘慈欣', '重庆出版社', '2008-01', 23.00, '9787536692930', '这部科幻小说构建了一个宏大的宇宙叙事,讲述了地球人类文明与外星三体文明之间的接触与冲突。当科学家向宇宙发出信号后,面临资源危机的三体文明开始向地球进军。人类面临着前所未有的生存危机,在科技、政治、文化等方面都经历了深刻变革。作品融合了硬科幻元素与社会思考,探讨了文明存续、道德选择、技术进步等深刻主题。小说以其宏大的想象力和哲学深度,成为中国科幻文学的里程碑之作。', 2);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (6, '沙丘', 'https://img2.doubanio.com/view/subject/s/public/s32295476.jpg', '弗兰克·赫伯特', '江苏凤凰文艺出版社', '2017-02', 68.00, '9787539988768', '故事发生在一个沙漠星球上,这里出产整个宇宙最珍贵的香料。少年保罗·厄崔迪在家族变故后来到这个星球,逐渐发现自己拥有预知未来的能力。在残酷的生存环境和政治斗争中,他必须找到自己的道路。小说构建了一个详细而真实的世界观,从生态、政治、宗教、文化等多个维度展现了沙漠文明的独特性。作品探讨了权力、命运、宗教和环境等主题,被誉为科幻文学的经典之作。', 2);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (7, '银河帝国:基地', 'https://img1.doubanio.com/view/subject/s/public/s29535706.jpg', '艾萨克·阿西莫夫', '江苏凤凰文艺出版社', '2015-09', 45.00, '9787539978585', '在遥远的未来,人类建立了横跨银河的庞大帝国。心理史学家哈里·谢顿预见了帝国的衰落和随之而来的三万年的黑暗时代。为了保存人类文明的精华,他在地球边缘建立了两个基地。作品通过数个世纪的跨度,展现了基地在危机中求生存、求发展的历程。小说融合了历史、政治和科技元素,探讨了文明发展、历史规律和人类命运的宏大主题。这部作品被誉为科幻史上最伟大的系列之一。', 2);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (8, '哈利·波特与魔法石', 'https://img9.doubanio.com/view/subject/s/public/s1990480.jpg', 'J.K.罗琳', '人民文学出版社', '2000-09', 29.80, '9787020033430', '一个孤儿在十一岁生日那天,发现自己是一个巫师,并被邀请进入魔法学校学习。在这个充满魔法的世界里,他遇到了真诚的朋友,也面对了危险的敌人。第一学年中,他不仅要学习各种魔法课程,还要解开学校深处的秘密。作品创造了一个完整而迷人的魔法世界,从魔法咒语到神奇生物,从巫师社会到魔法历史,每个细节都令人着迷。这个故事关于友谊、勇气和成长,吸引了全球数百万读者。', 2);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (9, '明朝那些事儿', 'https://img2.doubanio.com/view/subject/s/public/s3792523.jpg', '当年明月', '中国海关出版社', '2009-04', 29.80, '9787801656087', '用现代语言和幽默笔法,重新讲述了中国最后一个汉人王朝的兴衰历程。从朱元璋的草根起义到崇祯皇帝的煤山自缢,三百年间的帝王将相、才子佳人、重大事件都被生动地呈现出来。作品不仅关注宫廷政治和军事战争,也描绘了普通百姓的生活和社会变迁。作者在尊重史实的基础上,加入了人性化的解读和评述,让历史变得更加亲切易懂。这种讲述方式让许多原本对历史不感兴趣的读者也爱上了历史。', 3);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (10, '人类简史', 'https://img3.doubanio.com/view/subject/s/public/s27814883.jpg', '尤瓦尔·赫拉利', '中信出版社', '2014-11', 68.00, '9787508647357', '从认知革命开始,追溯了人类从动物到\"神\"的演化历程。七万年前,智人凭借语言和虚构故事的能力,跃居食物链顶端。一万二千年前,农业革命让人类定居下来,但也带来了新的束缚。五百年前,科学革命开启了现代世界,人类开始挑战自然法则。作者用独特的视角重新审视人类历史,提出了许多颠覆性的观点。这部作品不仅是对过去的梳理,更是对未来的思考,探讨了幸福、权力和生命意义等根本问题。', 3);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (11, '万历十五年', 'https://img9.doubanio.com/view/subject/s/public/s1800355.jpg', '黄仁宇', '生活·读书·新知三联书店', '1997-05', 18.00, '9787108009821', '选取了明朝历史上看似平淡无奇的一年作为切入点,通过六位关键人物的命运,揭示了帝国深层的制度危机。万历皇帝深居宫中,首辅申时行努力维持朝政平衡,清官海瑞坚守理想,将领戚继光改革军事,思想家李贽挑战传统。这些人的努力和挣扎,都无法改变王朝衰落的趋势。作者以大历史观的视角,分析了中国传统社会的结构性问题。这种微观与宏观相结合的研究方法,为历史写作提供了新的范式。', 3);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (12, '中国历代政治得失', 'https://img3.doubanio.com/view/subject/s/public/s11131783.jpg', '钱穆', '生活·读书·新知三联书店', '2001-06', 16.00, '9787108015280', '通过对汉、唐、宋、明、清五个重要朝代的政治制度分析,梳理了中国传统政治的演变脉络。每一讲都从政府组织、选举制度、经济政策和兵役制度四个方面入手,既讲制度的优点,也讲其流弊。作者认为,任何制度都必须与人事相配合,制度的创立和演变都有其历史背景和现实考量。作品强调要从历史同情的角度理解古人,避免用现代观念苛责历史。这是一部理解中国政治传统的重要入门读物。', 3);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (13, '时间简史', 'https://img9.doubanio.com/view/subject/s/public/s1919061.jpg', '史蒂芬·霍金', '湖南科学技术出版社', '2010-04', 45.00, '9787535732309', '用通俗易懂的语言,介绍了宇宙学的基本概念和发展历程。从人类对宇宙的早期认识到现代科学理论,从牛顿的经典物理学到爱因斯坦的相对论,再到量子力学和宇宙大爆炸理论。作者以清晰的逻辑和生动的比喻,解释了黑洞、奇点、时间箭头等复杂概念。尽管涉及深奥的科学理论,但全书几乎没有数学公式,适合普通读者阅读。这部作品让复杂的科学变得亲近,激发了无数人对宇宙奥秘的好奇心。', 4);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (14, '上帝掷骰子吗', 'https://img2.doubanio.com/view/subject/s/public/s28357056.jpg', '曹天元', '北京联合出版公司', '2013-09', 56.00, '9787550235612', '以生动有趣的方式,讲述了量子力学从诞生到发展的完整历史。从普朗克的量子假说到爱因斯坦的光电效应,从玻尔的原子模型到海森堡的不确定性原理,一个个科学突破和思想碰撞被娓娓道来。书中不仅有科学理论的发展,还有科学家们的个人故事和思想斗争。作者将复杂的物理概念转化为通俗易懂的比喻和故事,让读者能够理解量子世界的奇妙特性。这是一部既专业又通俗的科学史佳作。', 4);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (15, 'Python编程从入门到实践', 'https://img1.doubanio.com/view/subject/s/public/s28895876.jpg', 'Eric Matthes', '人民邮电出版社', '2016-07', 89.00, '9787115428028', '一本适合初学者的编程入门书籍,采用项目驱动的教学方法。第一部分介绍Python编程的基本概念,包括变量、列表、字典、循环、函数和类等基础知识。第二部分通过三个实际项目——外星人入侵游戏、数据可视化和Web应用程序,让读者在实践中巩固所学知识。书中包含大量示例代码和练习题,强调动手实践的重要性。这种学习方式不仅帮助读者掌握语法,更重要的是培养解决问题的能力和编程思维。', 4);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (16, '算法的乐趣', 'https://img3.doubanio.com/view/subject/s/public/s28269987.jpg', '王晓华', '人民邮电出版社', '2015-04', 79.00, '9787115388032', '从日常生活中的问题出发,讲解算法如何帮助我们更有效地解决问题。书中涵盖了排序、搜索、图论、动态规划、神经网络等多个领域的算法,但避免复杂的数学推导,注重直观理解和实际应用。每个算法都配有生动的例子和清晰的图解,如用地图导航讲解最短路径算法,用游戏讲解博弈树搜索。作者认为,算法不仅属于计算机科学,更是一种思考问题和解决问题的方法,适合所有对逻辑思维感兴趣的读者。', 4);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (17, '穷查理宝典', 'https://img1.doubanio.com/view/subject/s/public/s4669551.jpg', '彼得·考夫曼', '上海人民出版社', '2010-10', 88.00, '9787208095328', '收录了投资大师查理·芒格的演讲、谈话和思想精华。芒格作为巴菲特的长期合作伙伴,提出了\"多元思维模型\"的理念,强调要从多个学科中汲取智慧。书中分享了他的投资哲学、决策方法、学习方式和人生智慧。芒格倡导理性思考、逆向思维、终身学习和道德修养,认为成功投资只是正确生活方式的副产品。这部作品不仅对投资者有价值,对任何追求智慧和更好生活的人都有启发意义。', 5);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (18, '经济学原理', 'https://img9.doubanio.com/view/subject/s/public/s29484201.jpg', 'N·格里高利·曼昆', '北京大学出版社', '2015-05', 128.00, '9787301258165', '经典的入门经济学教材,系统介绍了经济学的基本原理和分析方法。全书分为微观经济学和宏观经济学两大部分,前者研究个体决策和市场运行,后者研究整体经济表现和政策影响。作者以清晰的逻辑、生动的案例和直观的图表,解释了供给需求、市场均衡、国民收入、通货膨胀、失业等核心概念。特别强调经济学不仅是一门学科,更是一种思维方式,帮助人们理解生活中的各种选择和权衡。适合初学者建立系统的经济学知识框架。', 5);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (19, '高效能人士的七个习惯', 'https://img1.doubanio.com/view/subject/s/public/s1067863.jpg', '史蒂芬·柯维', '中国青年出版社', '2008-06', 39.00, '9787500649038', '提出了七个经久不衰的习惯,帮助人们在个人和公共领域都取得卓越成效。前三个习惯关注个人成功:积极主动、以终为始、要事第一;后三个习惯关注公共成功:双赢思维、知彼解己、统合综效;最后一个习惯是不断更新。作者认为,真正的成功需要从内而外的改变,先塑造品格,再建立关系,最后达成成果。这些习惯基于普遍而永恒的原则,如公平、诚信、尊重等。这是一部关于自我管理和领导力发展的经典著作。', 5);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (20, '原则', 'https://img3.doubanio.com/view/subject/s/public/s29633848.jpg', '瑞·达利欧', '中信出版社', '2018-01', 98.00, '9787508684031', '作者分享了自己在生活和工作中遵循的基本原则,这些原则帮助他从一个普通中产阶级家庭的孩子成长为世界上最大的对冲基金创始人。全书分为三部分:个人经历、生活原则和工作原则。生活原则包括拥抱现实、五步流程、保持开放等;工作原则涉及文化建设、用人决策、解决问题等。作者认为,通过系统性的原则和彻底的真相与透明,个人和组织都能更好地实现目标。这是一部关于如何做出更好决策和建设强大文化的实用指南。', 5);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (21, '苏菲的世界', 'https://img3.doubanio.com/view/subject/s/public/s1590081.jpg', '乔斯坦·贾德', '作家出版社', '1999-04', 36.80, '9787506309745', '通过一名少女与神秘哲学家的通信,引导读者走进西方哲学的世界。从古希腊的自然哲学到中世纪的基督教哲学,从文艺复兴的人文主义到启蒙运动的理性主义,最后到现代的存在主义。全书以小说的形式,将哲学思想融入故事情节中,让抽象的哲学概念变得生动可感。读者跟随主人公一起思考关于存在、知识、伦理、美等基本问题。这是一部优秀的哲学入门读物,适合所有对智慧探索感兴趣的读者。', 6);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (22, '被讨厌的勇气', 'https://img1.doubanio.com/view/subject/s/public/s29114597.jpg', '岸见一郎', '机械工业出版社', '2015-03', 39.80, '9787111495482', '采用青年与哲人的对话形式,深入浅出地介绍了阿德勒心理学的基本理念。阿德勒认为,人的烦恼都来自于人际关系,而真正的自由来自于被讨厌的勇气。书中探讨了自卑情结、人生课题分离、共同体感觉等核心概念,提出了\"目的论\"的观点:不是过去决定现在,而是现在的目的决定了如何看待过去。这部作品挑战了许多传统心理学观念,提供了一种积极、主动的人生态度。对于想要改变生活方式的人具有重要启发意义。', 6);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (23, '中国哲学简史', 'https://img2.doubanio.com/view/subject/s/public/s29376116.jpg', '冯友兰', '北京大学出版社', '2013-01', 38.00, '9787301210989', '对中国哲学思想发展历程的系统梳理,从先秦诸子百家到现代新儒家,涵盖了儒家、道家、墨家、法家、佛学等主要思想流派。作者认为,中国哲学的特点是既入世又出世,既注重实际伦理又追求精神境界。书中分析了各家思想的核心观念、历史背景和相互影响,强调中国哲学的连续性和发展性。这部作品最初是英文讲义,后来翻译成中文,因其清晰、系统、深入浅出的特点,成为西方了解中国哲学的重要窗口。', 6);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (24, '思考,快与慢', 'https://img9.doubanio.com/view/subject/s/public/s6947283.jpg', '丹尼尔·卡尼曼', '中信出版社', '2012-07', 69.00, '9787508633558', '作者作为心理学诺贝尔奖得主,总结了自己数十年的研究成果,提出了人类思维的两种系统:系统1是快速、直觉、情绪化的;系统2是缓慢、理性、谨慎的。书中揭示了直觉思维的优点和系统性缺陷,如过度自信、损失厌恶、框架效应等认知偏差。这些发现不仅对心理学有重要意义,也对经济学、医学、政治等领域产生了深远影响。作品帮助读者认识自己的思维特点,学会在适当的时候调动适当的思维方式,做出更好的决策。', 6);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (25, '艺术的故事', 'https://img1.doubanio.com/view/subject/s/public/s2050262.jpg', 'E.H.贡布里希', '广西美术出版社', '2008-04', 280.00, '9787807463726', '被誉为\"艺术史圣经\"的经典入门读物,系统介绍了从史前洞穴壁画到现代艺术的整个发展历程。作者认为,艺术的历史不是技术进步的历史,而是观念变化的历史。书中强调要理解艺术作品,必须了解其创作时的社会背景、文化传统和艺术家的意图。全书语言流畅,配图精美,既有整体脉络的梳理,又有具体作品的分析。这部作品让普通读者也能欣赏和理解艺术,培养审美眼光和历史视野。自出版以来影响了几代艺术爱好者。', 7);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (26, '设计中的设计', 'https://img2.doubanio.com/view/subject/s/public/s2165932.jpg', '原研哉', '山东人民出版社', '2006-11', 48.00, '9787209041065', '日本著名设计师分享自己的设计理念和实践经验,重新思考设计的本质和可能性。作者认为,设计不是简单的装饰或造型,而是一种沟通方式,是信息传递的媒介。书中提出了\"再设计\"的概念:重新审视日常物品,发掘其新的可能性和价值。通过无印良品、长野冬奥会等实际案例,展示了如何将东方美学与现代设计相结合。作品强调空、白、留白的美学价值,倡导简约、自然、人性的设计风格。这是一部影响深远的现代设计理论著作。', 7);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (27, '写给大家看的设计书', 'https://img3.doubanio.com/view/subject/s/public/s2396163.jpg', 'Robin Williams', '人民邮电出版社', '2009-01', 49.00, '9787115188125', '面向非设计专业读者的实用设计指南,总结了平面设计的四个基本原则:亲密性、对齐、重复和对比。作者认为,好的设计不是偶然产生的,而是有规律可循的。即使没有艺术天赋,掌握这些基本原则也能显著改善设计效果。书中用大量\"前\"\"后\"对比的案例,直观展示如何应用这些原则改进名片、宣传册、网页等日常设计。语言幽默风趣,讲解清晰易懂,适合需要制作各种材料的职场人士、学生和普通读者。', 7);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (28, '美的历程', 'https://img9.doubanio.com/view/subject/s/public/s1032095.jpg', '李泽厚', '生活·读书·新知三联书店', '2009-07', 43.00, '9787108030375', '从龙飞凤舞的远古图腾到明清的文艺思潮,系统梳理了中国艺术的审美演变历程。作者认为,中国的美学历来不是纯粹抽象的哲学思辨,而是与特定时代的社会、政治、文化紧密相连。书中分析了彩陶、青铜器、楚辞、汉赋、唐诗、宋画等不同时期的艺术形式,探讨了\"儒道互补\"、\"山水意境\"等中国特有的美学观念。作品将艺术史、文化史和思想史融为一体,展现了中华民族审美意识的深厚积淀和独特魅力。', 7);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (29, '非暴力沟通', 'https://img2.doubanio.com/view/subject/s/public/s9346487.jpg', '马歇尔·卢森堡', '华夏出版社', '2009-01', 29.00, '9787508051000', '提出了一种基于同理心的沟通方式,帮助人们在冲突和困难对话中建立连接。作者认为,暴力往往源于人们需求没有得到满足时的自然反应。通过观察、感受、需要、请求四个步骤,人们可以学会清晰表达自己,同时倾听他人。这种方法强调区分观察和评价,表达感受而非想法,连接需要而非策略。适用于家庭、职场、学校等各种场合。实践这种沟通方式,不仅能改善人际关系,还能促进自我了解和情感成长。这是一部实用的沟通技巧指南。', 8);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (30, '如何阅读一本书', 'https://img1.doubanio.com/view/subject/s/public/s1670978.jpg', '莫提默·J. 艾德勒', '商务印书馆', '2004-01', 38.00, '9787100040945', '将阅读分为四个层次:基础阅读、检视阅读、分析阅读和主题阅读,并为每个层次提供具体的方法指导。作者认为,阅读是一门需要学习和练习的艺术,真正的阅读是主动的、思考的、与作者对话的过程。书中详细介绍了如何做笔记、如何提问、如何评价一本书等内容。特别强调分析阅读的技巧,包括分类书籍、概括主旨、找出关键词、判断作者论点等。这部经典作品帮助几代读者提高了阅读效率和理解深度,学会从阅读中获得最大收益。', 8);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (31, '自控力', 'https://img3.doubanio.com/view/subject/s/public/s10674993.jpg', '凯利·麦格尼格尔', '印刷工业出版社', '2012-08', 39.80, '9787514205039', '基于斯坦福大学最受欢迎的心理学课程编写,探讨意志力的科学原理和提升方法。作者认为,自控力就像肌肉一样,可以通过训练得到加强。书中介绍了意志力的生理基础、影响自控的各种因素以及实用的训练策略,如冥想、锻炼、睡眠、原谅失败等。重点打破了一些关于自控的迷思,如道德许可效应、那又如何效应等。通过理解这些原理,读者可以更好地管理压力、抵制诱惑、达成目标。这是一部结合科学研究和实践指导的实用手册。', 8);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (32, '断舍离', 'https://img2.doubanio.com/view/subject/s/public/s27274592.jpg', '山下英子', '广西科学技术出版社', '2013-07', 32.00, '9787807638067', '提出了一种通过整理物品来整理内心的生活哲学。\"断\"是断绝不需要的东西,\"舍\"是舍弃多余的物品,\"离\"是脱离对物品的执著。作者认为,物品反映了人与自己的关系,整理物品就是整理人生。通过选择与决断,人们可以清理物理空间,同时获得清晰的心灵空间。这种方法强调以自我为中心,以现在为时间轴,关注物品是否适合当下的自己。实践这一理念,不仅能让环境整洁,还能提高决策力、增强行动力、改善人际关系。', 8);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (33, '小王子', 'https://img9.doubanio.com/view/subject/s/public/s1103152.jpg', '安托万·德·圣-埃克苏佩里', '人民文学出版社', '2003-08', 22.00, '9787020042494', '一个飞行员在沙漠中迫降,遇到了来自遥远小行星的王子。通过小王子的星际旅行见闻,探讨了爱情、友谊、责任、孤独等人生根本问题。小王子访问了六个星球,遇到了各种各样的大人:国王、虚荣者、酒鬼、商人、点灯人和地理学家。每个星球都象征一种成人世界的荒谬。最终,狐狸教会了他\"驯养\"的意义:真正重要的东西用眼睛是看不见的,要用心去感受。这部作品语言简单纯净,寓意深刻悠远,适合所有年龄的读者。', 9);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (34, '夏洛的网', 'https://img1.doubanio.com/view/subject/s/public/s1120437.jpg', 'E.B.怀特', '上海译文出版社', '2004-05', 17.00, '9787532733415', '在朱克曼家的谷仓里,生活着一群快乐的动物。小猪威尔伯得知自己将在圣诞节被做成熏肉火腿,感到万分绝望。这时,蜘蛛夏洛承诺要救他。夏洛在蜘蛛网上织出了赞美威尔伯的文字,让他成为远近闻名的奇迹小猪。然而,为了拯救朋友,夏洛耗尽了最后的力气。这个故事探讨了友谊、承诺、生命和死亡的主题。作者用细腻的笔触描绘了谷仓里的动物世界,展现了弱小生命之间的真挚情感和巨大勇气。', 9);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (35, '猜猜我有多爱你', 'https://img2.doubanio.com/view/subject/s/public/s4395297.jpg', '山姆·麦克布雷尼', '明天出版社', '2008-11', 29.80, '9787533257052', '睡前,小兔子拉着大兔子的耳朵,想要表达自己有多爱对方。小兔子张开双臂说:\"我爱你有这么多。\"大兔子有更长的手臂,可以张得更开。小兔子倒立起来,把脚撑在树干上:\"我爱你,一直到我的脚趾头。\"大兔子把小兔子抛起来,飞得比他的头还高:\"我爱你,一直到你的脚趾头。\"无论小兔子想出什么方式表达爱,大兔子总能给出更多爱的回应。最后,小兔子在充满爱的安全感中睡着了。这是一部温暖动人的亲子绘本。', 9);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (36, '哈利·波特与密室', 'https://img3.doubanio.com/view/subject/s/public/s1557672.jpg', 'J.K.罗琳', '人民文学出版社', '2001-01', 32.00, '9787020033447', '回到霍格沃茨的第二年,学校却接连发生奇怪事件:学生被石化,墙上出现血字警告。传说中五十年前曾开启的密室再次被打开,密室的继承人要清除学校里的非纯血巫师。主人公和他的朋友们必须找出真相,阻止更多袭击发生。在这一过程中,他们学会了重要的魔法技能,发现了学校的秘密历史,也更加了解了友谊的珍贵和勇气的意义。故事延续了魔法世界的魅力,同时探讨了偏见、选择、忠诚等更深刻的主题。', 9);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (37, '考研英语词汇红宝书', 'https://img1.doubanio.com/view/subject/s/public/s8958634.jpg', '考研英语命题研究组', '西北大学出版社', '2019-03', 68.00, '9787560444351', '考研英语词汇的权威参考书,按照考试频率和重要性分为必考词、基础词和超纲词。采用科学的记忆方法,如词根词缀法、联想记忆法、真题例句辅助等,帮助考生高效记忆。每个单词都配有精准的中文释义、常用搭配、真题例句和记忆技巧。书中还包含近义词辨析、易混词对比、高频短语等内容。通过系统的学习和反复的练习,考生可以全面掌握考研英语所需的词汇量,为阅读理解、翻译和写作打下坚实基础。多年来深受考生信赖。', 10);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (38, '肖秀荣考研政治', 'https://img2.doubanio.com/view/subject/s/public/s34046486.jpg', '肖秀荣', '国家开放大学出版社', '2022-06', 79.80, '9787304101351', '考研政治复习的经典教材,涵盖马克思主义基本原理、毛泽东思想和中国特色社会主义理论体系、中国近现代史纲要、思想道德修养与法律基础、形势与政策五大部分。书中对大纲要求的知识点进行全面系统的梳理,突出重点难点,解析常见误区。配有大量真题和模拟题,帮助考生理解考点和命题规律。作者团队对考研政治命题趋势有深入研究,每年的预测题目都备受关注。这是大多数考研学子政治复习的首选参考书。', 10);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (39, '五年高考三年模拟', 'https://img3.doubanio.com/view/subject/s/public/s34098822.jpg', '曲一线', '教育科学出版社', '2021-08', 89.00, '9787504192815', '高考复习的经典教辅系列,将五年高考真题和三年模拟题有机结合,形成系统的复习体系。书中既有对知识点的全面梳理和深入讲解,又有对解题方法的归纳总结和技巧点拨。通过真题了解命题规律,通过模拟题巩固学习效果。每个章节都包含知识清单、考点突破、方法归纳、真题演练和模拟提升等模块。编排科学合理,难度循序渐进,适合不同水平的学生使用。这套书已成为高考复习的代名词,帮助无数学子实现了大学梦想。', 10);
INSERT INTO `book_system`.`books` (`id`, `name`, `img`, `author`, `publisher`, `year`, `price`, `isbn`, `description`, `category_id`) VALUES (40, '新概念英语', 'https://img9.doubanio.com/view/subject/s/public/s1132628.jpg', 'L.G.亚历山大', '外语教学与研究出版社', '1997-10', 58.00, '9787560013460', '经典的英语学习教材,分为四册,从基础到高级循序渐进。第一册注重听说能力,通过日常生活对话培养基本交际能力;第二册巩固语法,扩大词汇,开始阅读短文;第三册提高阅读理解,学习复杂句式;第四册接近原文阅读,培养综合语言能力。教材强调情景教学和反复练习,课文生动有趣,练习形式多样。配有录音和视频资料,帮助提高听说能力。这套教材系统科学,经久不衰,是全球英语学习者的共同记忆。', 10);
后端接口 books.py
from typing import List, Optional
from fastapi import APIRouter
from pydantic import create_model, Field
from tortoise.contrib.pydantic import pydantic_model_creator
from common.result import Result, PageInfo
from models import Books
router = APIRouter(prefix="/books")
# 创建 pydantic 只读模型
BooksPydantic = pydantic_model_creator(Books)
# 自动生成所有字段为 Optional 的更新模型
BooksCreatePydantic = create_model(
"BooksPydantic",
**{
name: (Optional[field.annotation], None)
for name, field in BooksPydantic.model_fields.items()
},
category_id=(Optional[int], Field(None, alias="categoryId"))
)
# 新增
@router.post("/add")
async def add(books_create_pydantic: BooksCreatePydantic):
create_data = books_create_pydantic.model_dump(exclude_unset=True, exclude={'id'})
await Books.create(**create_data)
return Result.success()
# 修改
@router.put("/update")
async def update(books_create_pydantic: BooksCreatePydantic):
update_data = books_create_pydantic.model_dump(exclude_unset=True, exclude={"id"})
await Books.filter(id=books_create_pydantic.id).update(**update_data)
return Result.success()
# 删除
@router.delete("/delete/{books_id}")
async def delete(books_id: int):
await Books.filter(id=books_id).delete()
return Result.success()
# 批量删除
@router.delete("/deleteBatch")
async def delete_batch(ids: List[int]):
await Books.filter(id__in=ids).delete()
return Result.success()
# 单个查询
@router.get("/selectById/{books_id}")
async def select_one(books_id: int):
books = await Books.get_or_none(id=books_id)
return Result.success(books)
# 查询所有
@router.get("/selectAll")
async def select_all(name: str = ""):
books_list = await Books.filter(name__contains=name)
return Result.success(books_list)
# 分页查询
@router.get("/selectPage")
async def select_page(name: str = "", pageNum: int = 1, pageSize: int = 10):
# 同时获取分页数据和总数
query = Books.filter(name__contains=name).prefetch_related("category")
# 获取分页数据
books_list = await query.order_by("-id").offset((pageNum - 1) * pageSize).limit(pageSize)
books_list = [
{
**BooksPydantic.model_validate(books).model_dump(),
"categoryId": books.category.id if books.category else None,
"categoryName": books.category.name if books.category else None,
}
for books in books_list
]
# 计算总数
total = await query.count()
# 封装分页数据
pageinfo = PageInfo(total=total, list=books_list)
return Result.success(pageinfo)
前端页面 Books.vue
<template>
<div>
<div class="card" style="margin-bottom: 5px;">
<el-input v-model="data.name" style="width: 300px; margin-right: 10px" placeholder="请输入名称查询"></el-input>
<el-button type="primary" @click="load">查询</el-button>
<el-button type="info" style="margin: 0 10px" @click="reset">重置</el-button>
</div>
<div class="card" style="margin-bottom: 5px">
<div style="margin-bottom: 10px">
<el-button type="primary" @click="handleAdd">新增</el-button>
</div>
<el-table tooltip-effect="dark myEff" :data="data.tableData" stripe>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="图片" prop="img">
<template #default="scope">
<el-image v-if="scope.row.img" preview-teleported :src="scope.row.img" :preview-src-list="[scope.row.img]"
style="width: 40px; height: 40px; border-radius: 5px"></el-image>
</template>
</el-table-column>
<el-table-column label="作者" prop="author"></el-table-column>
<el-table-column label="出版社" prop="publisher"></el-table-column>
<el-table-column label="出版年月" prop="year"></el-table-column>
<el-table-column label="价格" prop="price"></el-table-column>
<el-table-column label="ISBN" prop="isbn"></el-table-column>
<el-table-column label="简介" prop="description" show-overflow-tooltip></el-table-column>
<el-table-column label="分类" prop="categoryName"></el-table-column>
<el-table-column label="操作" align="center" width="160">
<template #default="scope">
<el-button type="primary" @click="handleEdit(scope.row)">编辑</el-button>
<el-button type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="card">
<el-pagination @current-change="load" background layout="total, prev, pager, next" v-model:page-size="data.pageSize" v-model:current-page="data.pageNum" :total="data.total"/>
</div>
<el-dialog title="图书信息" width="40%" v-model="data.formVisible" :close-on-click-modal="false" destroy-on-close>
<el-form ref="formRef" :model="data.form" :rules="data.rules" label-width="100px" style="padding-right: 50px">
<el-form-item label="名称" prop="name">
<el-input v-model="data.form.name" placeholder="请输入名称" autocomplete="off" />
</el-form-item>
<el-form-item label="封面" prop="img">
<el-upload :action="uploadUrl" list-type="picture" :on-success="handleImgSuccess">
<el-button type="primary">上传封面</el-button>
</el-upload>
</el-form-item>
<el-form-item label="作者" prop="author">
<el-input v-model="data.form.author" placeholder="请输入作者" autocomplete="off" />
</el-form-item>
<el-form-item label="出版社" prop="publisher">
<el-input v-model="data.form.publisher" placeholder="出版社" autocomplete="off" />
</el-form-item>
<el-form-item label="出版年月" prop="year">
<el-date-picker style="width: 100%" v-model="data.form.year" type="date" placeholder="出版年月" format="YYYY-MM" value-format="YYYY-MM" />
</el-form-item>
<el-form-item label="价格" prop="price">
<el-input-number style="width: 200px" :min="1" v-model="data.form.price" placeholder="请输入价格" autocomplete="off" />
</el-form-item>
<el-form-item label="ISBN" prop="isbn">
<el-input v-model="data.form.isbn" placeholder="请输入ISBN" autocomplete="off" />
</el-form-item>
<el-form-item label="分类" prop="categoryId">
<el-select v-model="data.form.categoryId" placeholder="请选择分类">
<el-option v-for="item in data.categoryList" :label="item.name" :value="item.id" :key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="简介" prop="description">
<el-input type="textarea" placeholder="请输入简介" :rows="3" v-model="data.form.description" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="data.formVisible = false">取 消</el-button>
<el-button type="primary" @click="save">保 存</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup>
import request from "@/utils/request";
import {reactive, ref} from "vue";
import {ElMessageBox, ElMessage} from "element-plus";
// 文件上传的接口地址
const uploadUrl = import.meta.env.VITE_BASE_URL + '/files/upload'
const formRef = ref()
const data = reactive({
user: JSON.parse(localStorage.getItem('system-user') || '{}'),
pageNum: 1,
pageSize: 10,
total: 0,
formVisible: false,
form: {},
tableData: [],
name: null,
categoryList: [],
rules: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' }
],
img: [
{ required: true, message: '请上传封面', trigger: 'blur' }
],
author: [
{ required: true, message: '请输入作者', trigger: 'blur' }
],
publisher: [
{ required: true, message: '请输入出版社', trigger: 'blur' }
],
year: [
{ required: true, message: '请选择出版日期', trigger: 'change' }
],
price: [
{ required: true, message: '请输入定价', trigger: 'blur' }
],
isbn: [
{ required: true, message: '请输入ISBN', trigger: 'blur' }
],
description: [
{ required: true, message: '请输入简介', trigger: 'blur' }
],
booksId: [
{ required: true, message: '请选择分类', trigger: 'change' }
],
}
})
request.get('/category/selectAll').then(res => {
data.categoryList = res.data
})
// 处理文件上传的钩子
const handleImgSuccess = (res) => {
data.form.img = res.data // res.data就是文件上传返回的文件路径,获取到路径后赋值表单的属性
}
// 分页查询
const load = () => {
request.get('/books/selectPage', {
params: {
pageNum: data.pageNum,
pageSize: data.pageSize,
name: data.name
}
}).then(res => {
data.tableData = res.data?.list
data.total = res.data?.total
})
}
// 新增
const handleAdd = () => {
data.form = {}
data.formVisible = true
}
// 编辑
const handleEdit = (row) => {
data.form = JSON.parse(JSON.stringify(row))
data.formVisible = true
}
// 新增保存
const add = () => {
request.post('/books/add', data.form).then(res => {
if (res.code === '200') {
load()
ElMessage.success('操作成功')
data.formVisible = false
} else {
ElMessage.error(res.msg)
}
})
}
// 编辑保存
const update = () => {
request.put('/books/update', data.form).then(res => {
if (res.code === '200') {
load()
ElMessage.success('操作成功')
data.formVisible = false
} else {
ElMessage.error(res.msg)
}
})
}
// 弹窗保存
const save = () => {
formRef.value.validate(valid => {
if (valid) {
// data.form有id就是更新,没有就是新增
data.form.id ? update() : add()
}
})
}
// 删除
const handleDelete = (id) => {
ElMessageBox.confirm('删除后数据无法恢复,您确定删除吗?', '删除确认', { type: 'warning' }).then(res => {
request.delete('/books/delete/' + id).then(res => {
if (res.code === '200') {
load()
ElMessage.success('操作成功')
} else {
ElMessage.error(res.msg)
}
})
}).catch(err => {})
}
// 重置
const reset = () => {
data.name = null
load()
}
load()
</script>
<style>
.myEff {
max-width: 500px;
}
</style>