当前位置: 首页 > news >正文

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【四】

文章目录

  • SSM(Vue3+ElementPlus+Axios+SSM前后端分离)--基础环境搭建【四】
    • 项目介绍
      • 项目功能/界面
        • ● SSM 整合项目界面
      • 创建表,使用逆向工程生成Bean、XxxMapper 和XxxMapper.xml
        • 1. 创建furns_ssm 数据库和furns 表
        • 使用MyBatis Generator 逆向工程生成bean mapper 接口和mapper.xml
        • 引入MyBatis Generator 包, 在pom.xml 配置
        • 创建furns_ssm\mbg.xml
        • 创建文件\test\MBGTest.java
        • 使用Junit 测试Spring 和MyBatis 是否整合成功, 能通过MyBatis 添加furn 到数据库
      • 注意事项和细节说明
        • insertSelective 和insert 的区别

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)–基础环境搭建【四】

项目介绍

项目功能/界面

● SSM 整合项目界面

image-20230802214015021

创建表,使用逆向工程生成Bean、XxxMapper 和XxxMapper.xml

1. 创建furns_ssm 数据库和furns 表

-- 创建furns_ssm
DROP DATABASE IF EXISTS furns_ssm;
CREATE DATABASE furns_ssm;
USE furns_ssm;
-- 创建家居表
CREATE TABLE furn(
`id` INT(11) PRIMARY KEY AUTO_INCREMENT, ## id
`name` VARCHAR(64) NOT NULL, ## 家居名
`maker` VARCHAR(64) NOT NULL, ## 厂商
`price` DECIMAL(11,2) NOT NULL, ## 价格
`sales` INT(11) NOT NULL, ## 销量
`stock` INT(11) NOT NULL, ## 库存
`img_path` VARCHAR(256) NOT NULL ## 照片路径
);

使用MyBatis Generator 逆向工程生成bean mapper 接口和mapper.xml

当然也可以自己写,如果在开发中, 逆向工程生成的代码, 不能满足需要,再自己编写.

<!-- 修改mybatis-config.xml , 增加typeAliases 配置.-->
<configuration>
<!--
1. 如果一个包下有很多的类,我们可以直接引入包
2. 这样该包下面的所有类名,可以直接使用
-->
<typeAliases><package name="com.nlc.furns.bean"/>
</typeAliases>
</configuration>

引入MyBatis Generator 包, 在pom.xml 配置

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope>
</dependency><!-- 引入mybatis 逆向工程依赖包-->
<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.4.0</version>
</dependency>

创建furns_ssm\mbg.xml

参考文档https://mybatis.org/generator/ 进行配置, 这里给出了一个模板xml ,在上面修改即可

image-20230731202732265

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration><context id="DB2Tables" targetRuntime="MyBatis3"><!--        生成没有注释的bean--><commentGenerator><property name="suppressAllComments" value="true"/></commentGenerator><!--        配置数据库连接信息--><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/furns_ssm?characterEncoding=utf8"userId="root"//password="自己的密码">注意记得把//删掉然后写自己的密码和端口</jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!--        指定javaBean生成的位置--><javaModelGenerator targetPackage="com.nlc.furn.bean" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!--        指定sql映射文件生成的位置1. 要根据自己的实际情况指定--><sqlMapGenerator targetPackage="mapper" targetProject=".\src\main\resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!--        指定dao接口生成的位置, 也就是mapper接口--><javaClientGenerator type="XMLMAPPER" targetPackage="com.nlc.furn.dao" targetProject=".\src\main\java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!--        指定要逆向生成的表和生成策略--><table tableName="furn" domainObjectName="Furn"></table></context>
</generatorConfiguration>

创建文件\test\MBGTest.java

RunningMyBatis Generator , 生成相关bean, mapper 接口和mapper.xml 参考官方问题来修改, 并完成测试

在这里插入图片描述

public class MBGTest {@Testpublic void generator() throws Exception {List<String> warnings = new ArrayList<String>();boolean overwrite = true;//这里要指定你自己配置的mbg.xml//如果这样访问,需要将文件放在项目下File configFile = new File("mbg.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);System.out.println("逆向生成OK");}
}

使用Junit 测试Spring 和MyBatis 是否整合成功, 能通过MyBatis 添加furn 到数据库

  1. 修改bean: Furn.java
    image-20230731203225196

创建furns_ssm\src\test\java\com\nlc\furns\dao\FurnMapperTest.java完成对furn 表的crud 测试操作

public class FurnMapperTest {@Testpublic void insertSelective() {//1. 获取到容器ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");//2获取FurnMapperFurnMapper furnMapper = ioc.getBean(FurnMapper.class);//System.out.println("furnMapper--" + furnMapper.getClass());//3.添加数据Furn furn =new Furn(null, "北欧风格沙发~~", "与之家~~", new BigDecimal(180), 666,70, "assets/images/product-image/1.jpg");int affected = furnMapper.insertSelective(furn);System.out.println("affected--" + affected);System.out.println("操作成功~");}@Testpublic void deleteByPrimaryKey() {//1. 获取到容器ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");//2获取FurnMapperFurnMapper furnMapper = ioc.getBean(FurnMapper.class);int affected = furnMapper.deleteByPrimaryKey(6);System.out.println("affected--" + affected);System.out.println("操作成功");}@Testpublic void updateByPrimaryKey() {//1. 获取到容器ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");//2获取FurnMapperFurnMapper furnMapper = ioc.getBean(FurnMapper.class);Furn furn = new Furn();furn.setId(5);furn.setName("风格家居-小沙发");//会修改所有的字段,如果没有设置字段对应的属性值,那么默认是null//int affected = furnMapper.updateByPrimaryKey(furn);//根据你设置属性对应字段,生成sql语句int affected = furnMapper.updateByPrimaryKeySelective(furn);System.out.println("affected--" + affected);System.out.println("操作成功~");}@Testpublic void selectByPrimaryKey() {//1. 获取到容器ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");//2获取FurnMapperFurnMapper furnMapper = ioc.getBean(FurnMapper.class);Furn furn = furnMapper.selectByPrimaryKey(1);System.out.println("furn--" + furn);System.out.println("操作成功~");}
}

注意事项和细节说明

insertSelective 和insert 的区别

  1. insertSelective–选择性保存数据;
    比如User 里面有三个字段:id,name,age,password
    但是只设置了一个字段;
    User u=new user();
    u.setName(“张三”);
    insertSelective(u);

  2. insertSelective 执行对应的sql 语句的时候,只插入对应的name 字段;(主键是自动添加的,默认插入为空)

    insert into tb_user (id,name) value (null,“张三”);

  1. 而insert 则是不论设置多少个字段,统一都要添加一遍,不论你设置几个字段,即使是一个
    User u=new user();
    u.setName(“张三”);
    insert(u);
    insert into tb_user (id,name,age,password) value (null,“张三”,null,null)

相关文章:

SSM(Vue3+ElementPlus+Axios+SSM前后端分离)【四】

文章目录 SSM(Vue3ElementPlusAxiosSSM前后端分离)--基础环境搭建【四】项目介绍项目功能/界面● SSM 整合项目界面 创建表&#xff0c;使用逆向工程生成Bean、XxxMapper 和XxxMapper.xml1. 创建furns_ssm 数据库和furns 表使用MyBatis Generator 逆向工程生成bean mapper 接口…...

iPhone 8 Plus透明屏应用范围详解

iPhone 8 Plus是苹果公司于2017年推出的一款智能手机&#xff0c;它采用了全新的玻璃机身设计&#xff0c;支持无线充电&#xff0c;并且搭载了更强大的A11仿生芯片。 而透明屏则是一种新型的屏幕技术&#xff0c;可以使手机屏幕呈现出透明的效果。 透明屏是一种将屏幕背后的元…...

【前端面试手撕题】instanceof、Array.map、Array.filter、Array.reduce、_objectCreate

FED6 instanceof 描述 请补全JavaScript代码&#xff0c;要求以Boolean的形式返回第一个实例参数是否在第二个函数参数的原型链上。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><style>/* 填写样式 */</style> </h…...

8.物联网操作系统之事件标志组

。事件标志组定义 FreeRTOS事件标志组介绍 FreeRTOS事件标志组工作原理 一。事件标志组定义 信号量信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步&#xff0c;此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与…...

[腾讯云Cloud Studio实战训练营]无门槛使用GPT+Cloud Studio辅助编程完成Excel自动工资结算

目录 前言一、Cloud Studio产品介绍1.1 注册Cloud Studio 二、项目实验2.1 选择合适的开发环境2.2 实验项目介绍2.3 实验步骤三、总结 前言 chatgpt简单介绍: ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;专门用于生成对话式文本。它是OpenAI于2021年发布的&#xff0…...

局域网ssh登录windows自带Linux系统(WSL)踩坑记录

局域网ssh登录windows自带Linux系统&#xff08;WSL&#xff09;踩坑记录 系统和工具安装查看IPLinux用户和端口设置Windows ssh 登录Mac ssh 登录 系统和工具安装 先按照网上的教程安装好Linux系统&#xff08;一般都是安装Ubuntu&#xff09;&#xff0c;安装好ssh等工具&am…...

2023-02-03——2023-08-03,半年以来与客服交流的记录【CSND 文章撰写 网站使用求解】客服咨询交流记录(长期更新ing)

这世界上久处不厌,都是因为用心。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅 🏆...

DCL 操作

文章目录 1.新建用户2.删除用户3.用户授权4.撤销用户权限5.查看用户权限6.修改用户密码 1.新建用户 # 命令格式 CREATE USER [username][host] identified by [password];# 示例 CREATE USER lvlvlocalhost identified by lvlv; CREATE USER lvlv192.168.1.1 identified by lv…...

C++11移动构造函数详解

C11移动构造函数详解 拷贝构造函数修改后的拷贝构造函数移动构造函数移动构造函数的优点 当类中同时包含拷贝构造函数和移动构造函数时&#xff0c;如果使用临时对象初始化当前类的对象&#xff0c;编译器会优先调用移动构造函数来完成此操作。只有当类中没有合适的移动构造函数…...

【力扣】19. 删除链表的倒数第 N 个结点 <链表指针、快慢指针>

【力扣】19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n…...

Vue3和typeScript路由传参

1 params传的参数&#xff0c;页面刷新就消失,而query传的参数&#xff0c;页面刷新还会存在&#xff0c;所以通常用query。 query传参 跳转页面&#xff1a;拿到router对象,调用push方法做跳转. import { useRoute,useRouter} from "vue-router"; export default…...

SQLserver数据库巡检脚本

SQL Server数据库巡检脚本的示例&#xff1a; #!/bin/bash# 设置SQL Server登录凭证 SQL_USER"your_username" SQL_PASSWORD"your_password"# 设置巡检结果输出文件路径 OUTPUT_FILE"/path/to/output.log"# 获取SQL Server版本信息 sql_version…...

Go Ethereum源码学习笔记 001 Geth Start

Go Ethereum源码学习笔记 前言[Chapter_001] 万物的起点: Geth Start什么是 geth&#xff1f;go-ethereum Codebase 结构 Geth Start前奏: Geth Consolegeth 节点是如何启动的NodeNode的关闭 Ethereum Backend附录 前言 首先读者需要具备Go语言基础&#xff0c;至少要通关菜鸟…...

idea如何加快创建Maven项目的速度

一、下载archetype-catalog.xml 下载archetype-catalog.xml的地址 二、配置 以下所说的配置都指全局配置。 配置Maven -DarchetypeCataloglocal -Dfile.encodinggbk...

软件外包开发的GO开发框架

近些年GO语言使用的越来越多&#xff0c;尤其是在web应用开发和高性能服务器的项目里。在开发新项目时掌握一些常用的开发框架可以节省开发时间提高工作效率&#xff0c;也是对软件开发人员基本的技能要求。今天和大家分享一些常见的GO语言开发框架&#xff0c;希望对大家有所帮…...

oracle会话打满

1.查看当前连接情况 col machine for a20 col program for a40 col sql_id for a20 set linesize 300 set pagesize 300 select machine,program,sql_id,count(1) from v$session group by machine,program,sql_id order by 4 desc;MACHINE PROGRAM SQL_ID …...

VSCode自定义闪烁光标

打开VSCode 组合键ctrlshiftp搜索"settings.json",打开User Settings 加上这一句 "editor.cursorStyle": "block","workbench.colorCustomizations": {"editorCursor.foreground": "#5c8fb1","terminalCurs…...

复亚智能打造全新云平台:让无人机任务管理更智能、更简单

复亚智能全新升级的MindView云平台&#xff0c;对航线规划、任务管理、自动飞行、数据管理等各个环节开展可视化、数字化、智能化监管&#xff0c;从任务到结果的“看得清”、“管得住”、“查得准”&#xff0c;带来更轻松的操作&#xff0c;改善作业效率、安全保障和用户体验…...

编程导航第六关——白银挑战

编程导航第六关——白银挑战 树的层次遍历 LeetCode102 题目要求&#xff1a;给你一个二叉树&#xff0c;请你返回其按层序遍历得到的节点值。(即逐层地&#xff0c;从左到右访问所有节点)。思路&#xff1a; 我们根据队列的特点&#xff0c;先进先出&#xff1b;要实现全部节…...

743. 网络延迟时间

有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信号从源节点传递到目标节点的时间。 现在&#xff0c;…...

基于深度学习昏暗场景目标检测 极端雾天天气目标检测 YOLO与图像去雾暗通道原理算法结合应用

文章目录YOLO与图像去雾暗通道原理结合的研究综述引言2. 图像去雾与暗通道原理3. YOLO与暗通道去雾结合的动机主要代码4. YOLO与暗通道去雾结合的实现方案5. 应用实例与实验结果6. 结论与未来展望YOLO与图像去雾暗通道原理结合的研究综述 引言 YOLO的工作流程可以概括为以下几…...

3步解锁Audiveris:从乐谱照片到数字音乐的智能转换秘籍

3步解锁Audiveris&#xff1a;从乐谱照片到数字音乐的智能转换秘籍 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 还在为整理纸质乐谱而烦恼吗&#xff1f;想要将那些珍贵的音乐手稿快…...

优化Helsinki-NLP-en-zh模型:提升公司名称翻译准确性的实战指南

1. 为什么需要优化公司名称翻译&#xff1f; Helsinki-NLP-en-zh作为开源的机器翻译模型&#xff0c;在处理日常文本时表现不错&#xff0c;但遇到公司名称这类专有名词就很容易翻车。我最早发现这个问题是在处理一份英文科技报道时&#xff0c;模型把"FireFox"翻译成…...

影刀RPA实战:5分钟搞定小红书自动评论,解放双手高效养号

影刀RPA实战&#xff1a;小红书智能评论系统搭建指南 在内容创作者和小型运营团队的实际工作中&#xff0c;小红书账号的日常维护往往占据了大量时间。传统手动评论不仅效率低下&#xff0c;而且难以保持稳定的互动频率。影刀RPA作为一款轻量级自动化工具&#xff0c;能够有效解…...

3个关键步骤:ComfyUI-Impact-Pack图像增强插件完整使用指南

3个关键步骤&#xff1a;ComfyUI-Impact-Pack图像增强插件完整使用指南 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: htt…...

如何用 port.start 开启共享子线程与主页面的长连接通道

port.start() 并非开启长连接的方法&#xff0c;而是启用 MessagePort 消息接收队列的必要操作&#xff0c;需在获取 port 后显式调用以开始接收消息&#xff0c;尤其在未设置 onmessage 时&#xff1b;它属于 MessageChannel 通信机制&#xff0c;不涉及网络连接。port.start …...

Blender 3MF插件终极指南:5步实现3D打印工作流优化

Blender 3MF插件终极指南&#xff1a;5步实现3D打印工作流优化 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat Blender3mfFormat插件是Blender生态系统中专为3D打印工作流…...

手把手教你解决‘GLIBC_2.34‘ not found报错:从下载到编译的完整流程

深度解析GLIBC版本兼容性问题&#xff1a;从源码编译到环境隔离的全方位解决方案 当你兴致勃勃地准备运行某个新工具时&#xff0c;终端突然弹出"GLIBC_2.34 not found"的红色错误提示&#xff0c;这种挫败感想必很多Linux开发者都深有体会。GLIBC作为Linux系统的核心…...

AI绘画黑科技:用ControlNet实现线稿自动上色(附Colab笔记本)

AI绘画黑科技&#xff1a;用ControlNet实现线稿自动上色实战指南 每次看到手绘线稿在AI加持下瞬间变成色彩丰富的作品&#xff0c;总让人感叹技术的神奇。ControlNet的出现&#xff0c;让非技术背景的设计师也能轻松玩转AI绘画。本文将手把手教你如何用最简单的操作&#xff0…...

别再乱改XML了!手把手教你用RimWorld Mod制作第一把自定义远程武器(从栓动步枪到电荷步枪)

从零构建RimWorld自定义武器&#xff1a;避开XML陷阱的实战指南 当你第一次打开RimWorld的Mod文件夹&#xff0c;看到密密麻麻的XML标签时&#xff0c;是否感到无从下手&#xff1f;作为一款深度沙盒游戏&#xff0c;RimWorld的武器系统看似简单&#xff0c;实则暗藏玄机。本文…...