Mybatis(二):实现“增删改查”
Mybatis(二):实现“增删改查”
- 前言
- 一、MyBatis的增删改查
- 1、添加
- 2、修改
- 3、删除
- 4、查询
- 4.1 查询一个实体
- 4.1 查询集合
- 二、MyBatis获取参数值的两种方式(重点)
- 1、单个字面量类型的参数
- 2、多个字面量类型的参数
- 3、map集合类型的参数
- 4、实体类类型的参数
- 5、使用@Param标识参数
- 6、结论
- 三、MyBatis的各种查询功能
- 1、查询一个实体类对象
- 2、查询一个list集合
- 3、查询单个数据
- 4、查询一条数据为map集合
- 5、查询多条数据为map集合
- 6、结论
前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
一、MyBatis的增删改查
1、添加
UserMapper接口:
/***添加用户信息*/int insertUser();
UserMapper.xml:
<!--int insertUser();--><insert id="insertUser">insert into t_user values(null,'张三','123',23,'女')</insert>
2、修改
UserMapper接口:
/*** 修改用户信息*/void updateUser();
UserMapper.xml:
<!-- void updateUser();--><update id = "updateUser">update t_user set username = '张三' where id = 4</update>
3、删除
UserMapper接口:
/*** 删除用户信息*/void deleteUser();
UserMapper.xml:
<!-- void deleteUser();--><delete id="deleteUser">delete from t_user where id = 5</delete>
4、查询
4.1 查询一个实体
UserMapper接口:
/*** 查询用户信息*/User getUserId();
UserMapper.xml
<!--User getUserById();--><!--查询功能的标签必须设置resultType或resultMapresultType:设置默认的映射关系resultMap:设置自定义的映射关系--><select id="getUserById" resultType="com.ir.mybaits.pojo.User">select * from t_user where id = 3</select> 4.1 查询集合
UserMapper接口:
/*** 查询用户信息*/List<User> getAllUser();
UserMapper.xml:
<!--List<User> getAllUser();--><select id="getAllUser" resultType="User">select * from t_user</select>
注意:
⭕ 查询的标签
select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
●resultType:自动映射,用于属性名和表中字段名一致的情况
●resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
⭕当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常
TooManyResultsException,但是若查询的数据只有一条,可以使用实体类或集合作为返回值
二、MyBatis获取参数值的两种方式(重点)
MyBatis获取参数值的两种方式:${}和#{}
⭕
${}的本质就是字符串拼接,使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;
⭕
#{}的本质就是占位符赋值,但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
1、单个字面量类型的参数
⭕ 若
mapper接口中的方法参数为单个的字面量类型,此时可以使用${}和#{}以任意的名称获取参数的值,但是需要注意${}的单引号问题
⭕ 代码演示:
UserMapper
/*** @description:查询用户信息* @author: Hey* @date: 2022/7/3 16:53* @param: [username]* @return: com.ir.mybatis.pojo.User**/User getUserByUsername(String username);
UserMapper.xml
<!--User getUserByUsername(String username);--><select id="getUserByUsername" resultType="user"><!--此时只注重传递过来的值,{username}中的usernsme可以替换为任意字母,结果都不会改变--><!--select * from t_user where username = '${username}';-->select * from t_user where username = #{username};</select>
UserMapperTest
/*** @description:* @author: Hey* @date: 2022/7/3 15:29* @param: []* @return: void**/@Testpublic void getUserByUsername(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);System.out.println(userMapper.getUserByUsername("张三"));}
2、多个字面量类型的参数
⭕
mapper接口方法的参数为多个时,此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储
- 以
arg0,arg1…为键,以参数为值- 以
param1,param2…为键,以参数为值因此只需要通过
${}和#{}访问map集合的键就可以获取相对应的 值,但是需要注意${}的单引号问题。
⭕ 代码演示:
UserMapper
/*** @description:检查用户登录信息* @author: Hey* @date: 2022/7/3 15:46* @param: [username, password]* @return: com.ir.mybatis.pojo.User**/User checkLoginByParameter(String username,String password);
UserMapper.xml
<!--User checkLoginByParameter(String username,String password);--><select id="checkLoginByParameter" resultType="user">select * from t_user where username=#{arg0} and password=#{arg1};</select>
UserMapperTest
/*** @description:* @author: Hey* @date: 2022/7/3 15:30* @param: []* @return: void**/@Testpublic void checkLoginByParam(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);User user = userMapper.checkLoginByParameter("张三","123");System.out.println(user);}
3、map集合类型的参数
⭕ 若
mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中,只需要通过${}和#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题
⭕ 代码演示:
UserMapper
/*** @description:通过自定义Map来验证登录* @author: Hey* @date: 2022/7/3 15:45* @param:* @return:**/User checkLoginByMap(Map<String, Object> map);
UserMapper.xml
<!--User checkLoginByMap(Map<String, Object> map);--><select id="checkLoginByMap" resultType="user">select * from t_user where username=#{username} and password=#{password};</select>
UserMapperTest
/*** @description:测试通过自定义Map验证登录* @author: Hey* @date: 2022/7/3 15:55* @param: []* @return: void**/@Testpublic void checkLoginByMap(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);Map<String,Object> map = new HashMap<>();map.put("username","张三");map.put("password","123");User user = userMapper.checkLoginByMap(map);System.out.println(user);}
4、实体类类型的参数
⭕ 若
mapper接口中的方法参数为实体类对象时,此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,但是需要注意${}的单引号问题
⭕ 代码演示:
UserMapper
/*** @description:添加用户* @author: Hey * @date: 2022/7/3 16:11* @param: [user]* @return: int**/Integer insertUser(User user);
UserMapper.xml
<!--int insertUser(User user);--><select id="insertUser" >insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})</select>
UserMapperTest
/*** @description:添加用户 * @author: Hey* @date: 2022/7/3 16:24* @param: []* @return: void**/@Testpublic void insertUser(){UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class);Integer result = userMapper.insertUser(new User(null,"喜羊羊","123456",18,"男","123123@qq.com"));System.out.println(result);}
5、使用@Param标识参数
⭕ 可以通过
@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中,以如下两种方式来取值访问:
- 以
@Param注解的value属性值为键,以参数为值;- 以
param1,param2…为键,以参数为值;只需要通过
${}和#{}访问map集合的键就可以获取相对应的值,但是需要注意${}的单引号问题
⭕ 代码演示:
UserMapper
/*** @description:通过参数注解验证登录* @author: Hey * @date: 2022/7/3 16:59* @param: [username, password]* @return: com.ir.mybatis.pojo.User**/User checkLoginByParam(@Param("username") String username, @Param("password") String password);
UserMapper.xml
<!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);--><select id="checkLoginByParam" resultType="User">select * from t_user where username = #{username} and password = #{password}</select>
UserMapperTest
/*** @description:通过注解方式验证登录* @author: Hey* @date: 2022/7/3 16:57* @param: []* @return: void**/@Testpublic void testCheckLoginByParam(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.checkLoginByParam("admin", "123456");System.out.println(user);} 6、结论
将以上五种情况分为两类情况
⭕ 情况一:参数为实体类型
⭕ 情况二:参数都用@Param来修饰
三、MyBatis的各种查询功能
1、查询一个实体类对象
SelectMapper
/*** @description:通过id查询用户* @author: Hey* @date: 2022/7/3 17:54* @param: [id]* @return: com.ir.mybatis.pojo.User**/User getUserById(@Param("id") Integer id);
SelectMapper.xml
<select id="getUserById" resultType="user">select * from t_user where id= #{id};</select>
SelectMapperTest
/*** @description:通过id查询用户* @author: Hey* @date: 2022/7/3 17:58* @param: []* @return: void**/@Testpublic void getUserById(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);User user = selectMapper.getUserById(3);System.out.println(user);}
2、查询一个list集合
SelectMapper
/*** @description:获取多个用户* @author: Hey* @date: 2022/7/3 17:56* @param: []* @return: java.util.List<com.ir.mybatis.pojo.User>**/List<User> getAllUser();
SelectMapper.xml
<select id="getAllUser" resultType="user">select * from t_user;</select>
SelectMapperTest
/*** @description:查询所有用户* @author: Hey* @date: 2022/7/3 18:00* @param: []* @return: void**/@Testpublic void getAllUser(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);List<User> list = selectMapper.getAllUser();for (User user:list) {System.out.println(user);}}
3、查询单个数据
在MyBatis中,对于Java中常用的类型都设置了类型别名
| Alias | Mapped Type |
|---|---|
| _byte | byte |
| _char (since 3.5.10) | char |
| _character (since 3.5.10) | char |
| _long | long |
| _short | short |
| _int | int |
| _integer | int |
| _double | double |
| _float | float |
| _boolean | boolean |
| string | String |
| byte | Byte |
| char (since 3.5.10) | Character |
| character (since 3.5.10) | Character |
| long | Long |
| short | Short |
| int | Integer |
| integer | Integer |
| double | Double |
| float | Float |
| boolean | Boolean |
| date | Date |
| decimal | BigDecimal |
| bigdecimal | BigDecimal |
| biginteger | BigInteger |
| object | Object |
| date[] | Date[] |
| decimal[] | BigDecimal[] |
| bigdecimal[] | BigDecimal[] |
| biginteger[] | BigInteger[] |
| object[] | Object[] |
| map | Map |
| hashmap | HashMap |
| list | List |
| arraylist | ArrayList |
| collection | Collection |
| iterator | Iterator |
SelectMapper
/*** @description:查询用户信息的总记录数* @author: Hey* @date: 2022/7/3 20:40* @param: []* @return: java.lang.Integer**/Integer getCount();
SelectMapper.xml
<select id="getCount" resultType="int">select count(1) from t_user;</select>
SelectMapperTest
/*** @description:查询用户信息的总记录数* @author: Hey * @date: 2022/7/3 20:45* @param: []* @return: void**/@Testpublic void getCount(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);int result = selectMapper.getCount();System.out.println(result);}
4、查询一条数据为map集合
SelectMapper
/*** @description:根据id查询用户信息为一个map集合* @author: Hey* @date: 2022/7/3 20:59* @param: [id]* @return: java.util.Map<java.lang.String,java.lang.Object>**/Map<String,Object> getUserByIdToMap(@Param("id")Integer id);
SelectMapper.xml
<select id="getUserByIdToMap" resultType="map">select * from t_user where id=#{id}
</select>
SelectMapperTest
/*** @description:根据id查询用户信息为一个map集合* @author: Hey* @date: 2022/7/3 21:03* @param: []* @return: void**/@Testpublic void getUserByIdToMap(){SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class);System.out.println(selectMapper.getUserByIdToMap(5));//{password=123456, sex=男, id=5, age=18, email=123123@qq.com, username=喜羊羊}}
5、查询多条数据为map集合
方式一:
SelectMapper
/*** @description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询,一条数据对应一个map;* 若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取* * @author: Hey* @date: 2022/7/3 21:15* @param: []* @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>**/List<Map<String, Object>> getAllUserToMap();
SelectMapper.xml
<select id="getAllUserToMap" resultType="map">select * from t_user</select>
SelectMapperTest
/*** @description:查询所有用户信息为Map集合* @author: Hey* @date: 2022/7/3 21:17* @param: []* @return: void**/
@Testpublic void testGetAllUserToMap(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** [{password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三},* {password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}]*/}
方式二:
SelectMapper
/*** @description:查询所有用户信息为Map集合* * 将表中的数据以map集合的方式查询,一条数据对应一个map;* 若有多条数据,就会产生个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合* * @author: Hey* @date: 2022/7/3 21:15* @param: []* @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>**/@MapKey("id")Map<String, Object> getAllUserToMap();
SelectMapper.xml
<select id="getAllUserToMap" resultType="map">select * from t_user</select>
SelectMapperTest
/*** @description:查询所有用户信息为Map集合* @author: Hey* @date: 2022/7/3 21:17* @param: []* @return: void**/@Testpublic void testGetAllUserToMap(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);System.out.println(mapper.getAllUserToMap());/*** {* 1={password=123, sex=女, id=1, age=23, email=12345@qq.com, username=张三}, * 2={password=123456, sex=男, id=2, age=18, email=123123@qq.com, username=喜羊羊}* }*/}
6、结论
MyBatis的各种查询功能:
⭕ 若查询出的数据只有一条
● 可以通过实体类对象接收
● 可以通过list集合接收
● 可以通过map集合接收
结果:
{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
⭕ 若查询出的数据有多条
● 可以通过实体类类型的list集合接收
● 可以通过map类型的list集合接收
●可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某个字段的值作为键,放在同一个map集合中
⭕ 注意:一定不能通过实体类对象接收,此时会抛异常
TooManyResultsException
相关文章:
Mybatis(二):实现“增删改查”
Mybatis(二):实现“增删改查”前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合二、MyBatis获取参数值的两种方式(重点)1、单个字面量类型的参数2、多个字面量类型的参数3、map集合…...
Faster RCNN 对血液细胞目标检测
目录 1. 介绍 2. 工具函数介绍 utils 2.1 xml 文件的读取 get_label_from_xml 2.2 绘制边界框 draw_bounding_box...
【数据结构】Java实现栈
目录 1. 概念 2. 栈的使用 3. 自己动手实现栈(使用动态数组实现栈) 1. 创建一个MyStack类 2. push入栈 3. pop出栈 4. 查看栈顶元素 5. 判断栈是否为空与获取栈长 6. toString方法 4. 整体实现 4.1 MyStack类 4.2 Test类 4.3 测试结果 1.…...
【数据结构】排序
作者:✿✿ xxxflower. ✿✿ 博客主页:xxxflower的博客 专栏:【数据结构】篇 语录:⭐每一个不曾起舞的日子,都是对生命的辜负。⭐ 文章目录1.排序1.1排序的概念1.2常见的排序算法2.常见排序算法2.1插入排序2.1.1直接插入…...
过拟合、验证集、交叉验证
过拟合 简单描述:训练集误差小,测试集误差大,模型评估指标的方差(variance)较大; 判断方式: 1、观察 train set 和 test set 的误差随着训练样本数量的变化曲线。 2、通过training accuracy 和…...
原力计划来了【协作共赢 成就未来】
catalogue🌟 写在前面🌟 新星计划持续上新🌟 原力计划方向🌟 原力计划拥抱优质🌟 AIGC🌟 参加新星计划还是原力计划🌟 创作成就未来🌟 写在最后🌟 写在前面 哈喽&#x…...
一文了解Jackson注解@JsonFormat及失效解决
背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下: spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效,使用JsonForma和JsonFiled均失效。 常…...
webpack——使用、分析打包代码
世上本无nodejs js最初是在前端浏览器上运行的语言,js代码一旦脱离了浏览器环境,就无法被运行。直到nodejs的出现,我们在电脑上配置了node环境,就可以让js代码脱离浏览器,在node环境中运行。 浏览器不支持模块化 nodej…...
libvirt零知识学习5 —— libvirt源码编译安装(3)
接前一篇文章libvirt零知识学习4 —— libvirt源码编译安装(2) 在上篇文章及上上篇文章中构建libvirt的时候遇到了一个问题“ERROR: Problem encountered: YAJL 2 is required to build QEMU driver”。上篇文章讲到即使安装了相应的YAJL库仍然不能解决问…...
Nmap 的使用教程
Nmap是一个网络侦测和安全审计工具。它可以用于发现网络上的主机和服务,并提供广泛的信息,其中包括操作系统类型和版本、应用程序和服务的详细信息等。在本文中,我们将介绍如何使用Nmap扫描网络主机,识别开放端口以及进行操作系统…...
async与await异步编程
ECMA2017中新加入了两个关键字async与await 简单来说它们是基于promise之上的的语法糖,可以让异步操作更加地简单明了 首先我们需要用async关键字,将函数标记为异步函数 async function f() {} f()异步函数就是指:返回值为promise对象的函…...
移动应用架构设计:如何转变开发流程
移动应用架构设计:如何转变开发流程 2023 年掌握移动应用程序架构的指南(附案例研究) 如果他们要解决这个问题,开发人员需要了解移动架构设计的最佳实践,使他们能够构建用户喜欢的优化应用程序。其中一些做法包括使用…...
NX二次开发 图层函数总结
简介: NX二次开发 图层相关的总结。 函数: uc5007()uc5008()uc5009()UF_LAYER_ask_category_info()获取图层类别的信息UF_LAYER_ask_category_tag()根据图层分类名称查询其图层分类标识UF_LAYER_ask_status()UF_LAYER_ask_work_layer()UF_LAYER_create…...
windows微服务部署
windows部署一.nginx部署1.nginx 官网下载2. 配置nginx3.配置nigix 防止nigix刷新404不生效二.配置redis部署成服务1.在系统配置中 配置为系统变量2.打开快捷登录服务管理#3. 开启redis三.windows部署jar包一.nginx部署 1.nginx 官网下载 地址 官网地址 安装 windows版本 可安…...
Java四种内部类(看这一篇就够了)
🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…...
蓝桥杯刷题第二十天
第一题:纸张尺寸问题描述在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。输入纸张的名称, 请输出…...
如何通过命令行查看CentOS版本信息和linux系统信息
1.如何查看已安装的CentOS版本信息: 1.cat /proc/version 2.uname -a 3.uname -r 4.cat /etc/centos-release 5.lsb_release -a 6.hostnamectl1. 第一种方式输出的结果是: Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) …...
oracle查询表空间大小以及每个表所占空间的大小
1、查询数据库中所有的表空间以及表空间所占空间的大小,直接执行语句就可以了: select tablespace_name, sum(bytes)/1024/1024 from dba_data_files group by tablespace_name; 2、查看表空间物理文件的名称及大小 select tablespace_name, file_id, …...
C语言通讯录应用程序:从设计到实现
hello,这期给大家带来C语言实现静态通讯录,主要也是建立起创建大项目的思维,与往期这两篇博客有点类似 C语言实现三子棋 C语言实现扫雷 文章目录🤓通讯录介绍😶🌫️效果演示🤠主题框架头文件测试文件函数…...
银河麒麟v10sp2安装nginx
nginx官网下载:http://nginx.org/download/ 银河麒麟系统请先检查yum源是否配置,若没有配置请参考:https://qdhhkj.blog.csdn.net/article/details/129680789 一、安装 1、yum安装依赖 yum install gcc gcc-c make unzip pcre pcre-devel …...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
