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

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章:框架的概述:

  1. MyBatis 框架的概述:
    1. MyBatis 是一个优秀的基于 Java 的持久框架,内部对 JDBC 做了封装,使开发者只需要关注 SQL 语句,而不关注 JDBC 的代码,使开发变得更加的简单
    2. MyBatis 通过 XML 或者注解的方式将要执行的各种 Statement 对象配置起来,通过 Java  对象和 statement 中 SQL 后,最终将结果已 Java 对象返回
    3. MyBatis 采用了 ORM 的思想
  2. ORM 思想:
    1. 在 web 阶段学习 JavaBean 更正确的叫法是:实体类
    2. ORM:object  relational  mapping  对象映射关系
      1. O:面向对象领域的 Object(JavaBean 对象)
      2. R:关系数据库领域的 Relational(表的结构)
      3. M:映射 Mapping(XML 的配置文件)、
    3. 让实体类和数据库表进行 一 一  对应关系
      1. 先让实体类和数据库表对应
      2. 再让实体类属性和表里面字段对应
    4. 不需要直接操作数据库表,直接操作表对应的实体类对象即可
  3. 推荐插件:

第二章:MyBatis 的入门程序(重点)

  1. 创建数据库和表结构:
    create database mybatis_demo;
    use mybatis_demo;
    ​
    CREATE TABLE `user` (`id` int(11) NOT NULL auto_increment,`username` varchar(32) NOT NULL COMMENT '用户名称',`birthday` datetime default NULL COMMENT '生日',`sex` char(1) default NULL COMMENT '性别',`address` varchar(256) default NULL COMMENT '地址',PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    ​
    insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values 
    (1,'老王','2018-02-27 17:47:08','男','北京'),
    (2,'熊大','2018-03-02 15:09:37','女','上海'),
    (3,'熊二','2018-03-04 11:34:34','女','深圳'),
    (4,'光头强','2018-03-04 12:04:06','男','广州');
  2. MyBatis 的入门程序:
    1. 创建 maven 项目,Java 工程即可
    2. 引入坐标:
      1. 引入 MyBatis 的 3.4.5 的版本的坐标
      2. 引入 MySQL 驱动的 jar 包,5.1.6 版本
      3. 引入 Junit 单元测试的 jar 包
      4. 引入 log4h 的 jar 包,1.2.12 版本(需要引入log4j.propertiees 的配置文件)
        <dependencies><!--mybatis核心包--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><!-- 日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>
        </dependencies>
    3. 编写 User 的实现类,属性尽量使用包装类型:
      public class User implements Serializable {private Integer id;private String username;private Date birthday;private String sex;private String address;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", birthday=" + birthday +", sex='" + sex + '\'' +", address='" + address + '\'' +'}';}
      }
    4. 编写 UserMapper 的接口和方法(即 Spring 框架中 UserDao 接口):
      public interface UserMapper {public List<User> selectAll;
      }
    5. 在 resources 目录下,创建 mapper 文件夹。编写 Usermapper.xml 的配置文件,导入一下约束信息:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.qcby.mapper.UserMapper"><select id="findAll" resultType="com.qcby.model.User">select * from user;</select>
      </mapper>
      1. mapper  namespace="com.qcby.mapper.UserMapper":叫名称空间,表明以后查找 UserMapper 接口中的 findAll 方法
      2. select  id = "findAll" 中的 id 属性编写的 UserMapper 接口中方法的名称,固定写法
      3. resultType = "com.qcby.model.User":表明的是 findAll 方法的返回值类型
    6. 编写配置文件,在 resources 目录下创建 SqlMapConfig.xml 的配置文件(名称可以任意),导入对应的约束,编写主配置文件
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration><!-- 配置具体的环境 --><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><!-- 配置是否需要使用连接池, POOLED 使用,UNPOOLED 不适用--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis_demo"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加载映射的配置文件 --><mappers><mapper resource="Mapper/UserMapper.xml"/></mappers></configuration>
    7. 编写入门程序(重点掌握入门的步骤):
      import com.qcby.mapper.UserMapper;
      import com.qcby.model.User;
      import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      import org.junit.Test;import java.io.IOException;
      import java.io.InputStream;
      import java.util.List;public class MyBatisDemo {@Testpublic void run() throws Exception {//加载主配置文件,目的是构建 SqlSessionFactory 的对象InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建 SqlSSessionFactory 对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//使用 SqlSessionFactory 工厂对象创建 SqlSession 对象SqlSession session = factory.openSession();//通过 session 创建 UserMapper 接口的代理对象UserMapper mapper = session.getMapper(UserMapper.class);//调用 findAll 方法List<User> list = mapper.findAll();//遍历集合并输出for (User u : list){System.out.println(u);}//释放资源session.close();in.close();}
      }

第三章:代理 Dao 方式的 CURD 操作

  1. Dao 方式的增删改查:
    1. 创建项目
    2. 注意:除了查询方法之外,其他增删改操作需要进行 session.commit 提交
    3.  UserMapper 接口代码:
      public interface UserMapper {public List<User> findAll();//根据 id 查询public User findById(Integer id);// 插入public void insert(User user);//修改public void update(User user);//删除public void delete(int id);//根据姓名模糊查询public List<User> findByName(String username);//查询总数public Integer findByCount();
      }
    4. UserMapper.xml 的配置文件代码:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.qcby.mapper.UserMapper"><!--保存操作--><insert id="insert" parameterType="com.qcby.model.User">/*keyProperty表示要返回的属性名称order取值AFTER表示插入数据后的行为resultType表示返回值的类型*/<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">select last_insert_id();</selectKey>insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})</insert><!-- 修改 --><update id="update" parameterType="com.qcby.model.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}</update><!-- 根据 id 删除 --><delete id="delete" parameterType="integer">delete from user where id = #{id}</delete><!-- 查询所有 --><select id="findAll" resultType="com.qcby.model.User" >select * from user;</select><!-- 根据 id 查询 --><select id="findById" resultType="com.qcby.model.User">select * from user where id=#{id};</select><!-- 根据姓名模糊查询--><select id="findByName" parameterType="string" resultType="com.qcby.model.User">/**第一种方式的 SQL 语句*/
      --        select * from user where username like #{username}/**第二种 SQL 语句的编写,强调: '%${value}%' 不能修改,固定写法(推荐使用)注意:使用第二种 SQL 写法时需要把 SQL 中的注释全部删除否则会报错*/select * from user where username like %${value}%</select><!-- 查询总数量 --><select id="findByCount" resultType="java.lang.Integer">select count(*) from user;</select></mapper>
    5. 测试代码:
      public class MyBatisDemo {private InputStream in;private SqlSession session;private UserMapper userMapper;@Beforepublic void init() throws IOException {//加载配置文件in = Resources.getResourceAsStream("SqlMapConfig.xml");//创建工厂对象SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);//创建 Session 对象session = factory.openSession();//获取到代理对象userMapper = session.getMapper(UserMapper.class);}@Afterpublic void dstory() throws IOException {in.close();session.close();}//查询所有@Testpublic void fundAll() throws IOException {List<User> users = userMapper.findAll();for (User u : users){System.out.println(u);}in.close();}//根据 id 查询@Testpublic void findById() throws IOException {User user = userMapper.findById(1);System.out.println(user);in.close();}//插入方法@Testpublic void insert() throws IOException {User user = new User();user.setAddress("河北");user.setBirthday(new Date());user.setSex("男");user.setUsername("张翰里");System.out.println(user);userMapper.insert(user);session.commit();in.close();}//修改方法@Testpublic void updage() throws IOException {User user = new User();user.setId(1);user.setAddress("河北");user.setBirthday(new Date());user.setSex("男");user.setUsername("张翰里");userMapper.update(user);session.commit();in.close();}//删除方法@Testpublic void delete() throws IOException {userMapper.delete(2);session.commit();in.close();}//模糊查询@Testpublic void findByName() throws IOException {List<User> list = userMapper.findByName("%张%");for(User u : list){System.out.println(u);}in.close();}//查询总量@Testpublic void findCount(){System.out.println(userMapper.findByCount());}
      }

相关文章:

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一个优秀的基于 Java 的持久框架&#xff0c;内部对 JDBC 做了封装&#xff0c;使开发者只需要关注 SQL 语句&#xff0c;而不关注 JDBC 的代码&#xff0c;使开发变得更加的简单MyBatis 通…...

cursor ide配置远程ssh qt c++开发环境过程记录

cursor是啥就不介绍了&#xff0c;好像是目前最好用的ai ide&#xff0c;下面主要是配置远程ssh连接linux机器进行qt5 c程序运行的配置过程记录。 一、c_cpp_properties.json 在项目根目录的.vscode目录里面新建c_cpp_properties.json文件&#xff0c;根据你的实际情况配置该文…...

萌新学 Python 之数值处理函数 round 四舍五入、abs 绝对值、pow 幂次方、divmod 元组商和余数

关于数值处理的常用函数&#xff1a;round、abs、pow、divmod 1. round(数值[,小数位]) 四舍五入 说明&#xff1a;对数值进行四舍五入&#xff0c;小数位可以没有&#xff0c;也可以是负数&#xff08;从小数点左边开始进行&#xff09; round(数值[,小数位]) 四舍五入 #…...

vim交换文件的作用

1.数据恢复&#xff1a;因为vim异常的退出&#xff0c;使用交换文件可以恢复之前的修改内容。 2.防止多人同时编辑&#xff1a;vim检测到交换文件的存在,会给出提示&#xff0c;以避免一个文件同时被多人编辑。 &#xff08;vim交换文件的工作原理&#xff1a;vim交换文件的工作…...

NoSQL与SQL比较

1.认识NoSQL NoSql可以翻译做Not Only Sql&#xff08;不仅仅是SQL&#xff09;&#xff0c;或者是No Sql&#xff08;非Sql的&#xff09;数据库。是相对于传统关系型数据库而言&#xff0c;有很大差异的一种特殊的数据库&#xff0c;因此也称之为非关系型数据库。 1.1.结构…...

ThinkPHP 8模型与数据的插入、更新、删除

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

Ollama windows安装

Ollama 是一个开源项目&#xff0c;专注于帮助用户本地化运行大型语言模型&#xff08;LLMs&#xff09;。它提供了一个简单易用的框架&#xff0c;让开发者和个人用户能够在自己的设备上部署和运行 LLMs&#xff0c;而无需依赖云服务或外部 API。这对于需要数据隐私、离线使用…...

【PyTorch】4.张量拼接操作

个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&#xff0c;能够处理复杂的数据模式。通过 PyTorch&#xff0…...

准备知识——旋转机械的频率和振动基础

旋转频率&#xff0c;也称为转速或旋转速率&#xff08;符号ν&#xff0c;小写希腊字母nu&#xff0c;也作n&#xff09;&#xff0c;是物体绕轴旋转的频率。其国际单位制单位是秒的倒数(s −1 )&#xff1b;其他常见测量单位包括赫兹(Hz)、每秒周期数(cps) 和每分钟转数(rpm)…...

STM32调试手段:重定向printf串口

引言 C语言中经常使用printf来输出调试信息&#xff0c;打印到屏幕。由于在单片机中没有屏幕&#xff0c;但是我们可以重定向printf&#xff0c;把数据打印到串口&#xff0c;从而在电脑端接收调试信息。这是除了debug外&#xff0c;另外一个非常有效的调试手段。 一、什么是pr…...

spring mvc 创建restapi 笔记

RestController RequestMapping("/spittles") public class SpittleController {// 示例&#xff1a;使用 RequestBody 接收 JSON 并自动转换为 Spittle 对象PostMappingpublic Spittle saveSpittle(RequestBody Spittle spittle) {// 此时 Spring 已经把请求体中的 …...

【C++】特殊类设计

目录 一、请设计一个类&#xff0c;不能被拷贝二、请设计一个类&#xff0c;只能在堆上创建对象三、请设计一个类&#xff0c;只能在栈上创建对象四、请设计一个类&#xff0c;不能被继承五、请设计一个类&#xff0c;只能创建一个对象(单例模式)5.1 饿汉模式5.2 懒汉模式 结尾…...

Java---入门基础篇(上)

前言 本片文章主要讲了刚学Java的一些基础内容,例如注释,标识符,数据类型和变量,运算符,还有逻辑控制等,记录的很详细,带你从简单的知识点再到练习题.如果学习了c语言的小伙伴会发现,这篇文章的内容和c语言大致相同. 而在下一篇文章里,我会讲解方法和数组的使用,也是Java中基础…...

Redis 消息队列详解

Redis 消息队列详解 Redis 作为一个高性能的内存数据库&#xff0c;支持多种实现消息队列的方式&#xff0c;主要包括&#xff1a; Redis List&#xff08;基于列表的队列&#xff09;Redis Pub/Sub&#xff08;发布/订阅&#xff09;Redis Stream&#xff08;消息流&#xf…...

C语言编译过程全面解析

今天是2025年1月26日&#xff0c;农历腊月二十七&#xff0c;一个距离新春佳节仅一步之遥的日子。城市的喧嚣中&#xff0c;年味已悄然弥漫——能在这个时候坚持上班的人&#xff0c;真可称为“牛人”了吧&#xff0c;哈哈。。。。 此刻&#xff0c;我在重新审视那些曾被遗忘的…...

萌新学 Python 之运算符

Python 中运算符包括&#xff1a;算术运算符、比较运算符、逻辑运算符、赋值运算符、位运算符、海象运算符 算术运算符&#xff1a;加 减 - 乘 * 除 / 取整 // 求余 % 求幂 ** 注意&#xff1a;取整时&#xff0c;一正一负整除&#xff0c;向下取整 比如 5 // …...

【开源免费】基于Vue和SpringBoot的在线文档管理系统(附论文)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)

四.4 Redis 五大数据类型/结构的详细说明/详细使用&#xff08; zset 有序集合数据类型详解和使用&#xff09; 文章目录 四.4 Redis 五大数据类型/结构的详细说明/详细使用&#xff08; zset 有序集合数据类型详解和使用&#xff09;1. 有序集合 Zset(sorted set)2. zset 有序…...

Linux 信号驱动IO

Linux 信号驱动IO 1. fcntl() 在Linux操作系统中&#xff0c;fcntl() 是一个用于操作文件描述符的系统调用。它提供了多种功能&#xff0c;包括控制文件描述符的属性、管理文件锁定、设置文件的非阻塞模式等。 本文只截取了用于IO模型的 fcntl() 部分内容&#xff0c; fcntl(…...

OpenCV:开运算

目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 OpenCV&#xff1a;闭运算-CSDN博客 …...

宝塔mysql数据库容量限制_宝塔数据库mysql-bin.000001占用磁盘空间过大

磁盘空间占用过多&#xff0c;排查后发现网站/www/wwwroot只占用7G&#xff0c;/www/server占用却高达8G&#xff0c;再深入排查发现/www/server/data目录下的mysql-bin.000001和mysql-bin.000002两个日志文件占去了1.5G空间。 百度后学到以下知识&#xff0c;做个记录。 mysql…...

使用 Iptables 实现网络安全策略:从入门到精通

使用 Iptables 实现网络安全策略:从入门到精通 在运维工作中,网络安全是重中之重,而 iptables 作为 Linux 内核自带的防火墙工具,提供了强大的流量控制能力。通过合理的 iptables 规则,我们可以有效防止未经授权的访问,保护服务器免受攻击。今天,我们就来深入探讨如何使…...

AI作画提示词:Prompts工程技巧与最佳实践

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…...

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍&#xff1a;什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎。 作用 1 运行java需要安装JDK&#xff0c;而Node.js是JavaScript的运行环…...

并发编程 - 线程同步(二)

经过前面对线程同步初步了解&#xff0c;相信大家对线程同步已经有了整体概念&#xff0c;今天我们就来一起看看线程同步的具体方案。 01、ThreadStatic 严格意义上来说这两个并不是实现线程同步方案&#xff0c;而是解决多线程资源安全问题&#xff0c;而我们研究线程同步最终…...

仿知乎网站问答源码,开源版

按照需要一定动手能力 发文章&#xff0c;发视频&#xff0c;发想法&#xff0c;提问回答&#xff0c;注册登录 开发环境 使用技术&#xff1a;springbootthymeleafRedis&#xff1b; 开发环境&#xff1a;tomcat8.0&#xff0c;jdk8.0, IDEA项目&#xff0c;mysql5.7 源码下…...

CTF-web: phar反序列化+数据库伪造 [DASCTF2024最后一战 strange_php]

step 1 如何触发反序列化? 漏洞入口在 welcome.php case delete: // 获取删除留言的路径&#xff0c;优先使用 POST 请求中的路径&#xff0c;否则使用会话中的路径 $message $_POST[message_path] ? $_POST[message_path] : $_SESSION[message_path]; $msg $userMes…...

阿里:基于路由和规划的多agent系统

&#x1f4d6;标题&#xff1a;Talk to Right Specialists: Routing and Planning in Multi-agent System for Question Answering &#x1f310;来源&#xff1a;arXiv, 2501.07813 &#x1f31f;摘要 &#x1f538;利用大型语言模型&#xff08;LLM&#xff09;&#xff0c…...

Java基础面试题总结(题目来源JavaGuide)

问题1&#xff1a;Java 中有哪 8 种基本数据类型&#xff1f;它们的默认值和占用的空间大小知道不&#xff1f; 说说这 8 种基本数据类型对 应的包装类型。 在 Java 中&#xff0c;有 8 种基本数据类型&#xff08;Primitive Types&#xff09;&#xff1a; 基本数据类型关键…...

CSS(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、什么是CSS?二、基本语法规范三、CSS选择器3.1 标签选择器3.2 id选择器3.3 class选择器3.4 通配符选择器3.5 复合选择器 四、常用CSS样式4.1 color4.2 font…...

架构技能(六):软件设计(下)

我们知道&#xff0c;软件设计包括软件的整体架构设计和模块的详细设计。 在上一篇文章&#xff08;见 《架构技能&#xff08;五&#xff09;&#xff1a;软件设计&#xff08;上&#xff09;》&#xff09;谈了软件的整体架构设计&#xff0c;今天聊一下模块的详细设计。 模…...

2. Java-MarkDown文件解析-工具类

2. Java-MarkDown文件解析-工具类 1. 思路 读取markdown文件的内容&#xff0c;根据markdown的语法进行各个类型语法的解析。引入工具类 commonmark 和 commonmark-ext-gfm-tables进行markdown语法解析。 2. 工具类 pom.xml <!-- commonmark 解析markdown --> <d…...

OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境

一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式&#xff0c;下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现&#xff0c;在OpenEuler上可以方便…...

【Rust自学】15.4. Drop trait:告别手动清理,释放即安全

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.4.1. Drop trait的意义 类型如果实现了Drop trait&#xff0c;就可以让程序员自定义当值…...

深入探讨Web应用开发:从前端到后端的全栈实践

在数字化时代&#xff0c;Web应用已成为连接用户与服务的关键桥梁。无论是电商平台、社交媒体&#xff0c;还是企业内部管理系统&#xff0c;Web应用都扮演着不可或缺的角色。本文将深入探讨Web应用开发的全栈实践&#xff0c;从前端的用户体验设计到后端的数据处理与存储&…...

4.贪心算法

贪心 贪心算法&#xff08;Greedy Algorithms&#xff09;是 C 等编程语言中常用的一种算法策略。 定义 贪心算法是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的是在某种意义上的局部最…...

js笔记(黑马程序员)

&#xff08;Web APIs day4&#xff09; 一、日期对象 1.实例化 在代码中发现了 new 关键字时&#xff0c;一般将这个操作称为实例化 创建一个时间对象并获取时间// 1&#xff0e;得到当前时间 2.日期对象方法 因为日期对象返回的数据我们不能直接使用&#xff0c;所以需…...

LangChain:使用表达式语言优化提示词链

在 LangChain 里&#xff0c;LCEL 即 LangChain Expression Language&#xff08;LangChain 表达式语言&#xff09;&#xff0c;本文为你详细介绍它的定义、作用、优势并举例说明&#xff0c;从简单示例到复杂组合示例&#xff0c;让你快速掌握LCEL表达式语言使用技巧。 定义 …...

Python 有用的资源

Python 有用的资源 引言 Python 作为一种强大的编程语言,因其简洁明了的语法和丰富的库资源,在数据分析、人工智能、网络开发等领域拥有广泛的应用。对于初学者和专业人士来说,掌握一些有用的Python资源可以大大提高编程效率。本文将为您介绍一些实用的Python资源,帮助您…...

汽车蓝牙钥匙定位仿真小程序

此需求来自于粉丝的真实需求,假期没事,牛刀小试。 一、项目背景 如今,智能车钥匙和移动端定位技术已经相当普及。为了探索蓝牙 Beacon 在短距离定位场景下的可行性,我们搭建了一个简易原型:利用 UniApp 在移动端采集蓝牙信标的 RSSI(信号强度),通过三边定位算法估算钥…...

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)

文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…...

python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位异或运算&#xff1a; 两个等长度二进制数上下对齐&#xff0c;相…...

electron打包客户端在rk3588上支持h265硬解

目录 前言 chromium是如何支持h265硬解 electron/chromium第一次编译 electron/chromium第二次编译 前言 我们的客户端程序是用electron打包的前端程序&#xff0c;其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的&#xff0c;但视频源…...

MyBatis 缓存机制详解

目录 一、什么是缓存&#xff1f; 1. 什么是缓存&#xff1f; 2. 为什么使用缓存&#xff1f; 3. 什么样的数据适合使用缓存&#xff1f; 二、MyBatis 缓存机制 1. 一级缓存&#xff08;也叫本地缓存&#xff09; 2. 一级缓存失效的情况 3. 二级缓存 4. 二级缓存失效的…...

【后端开发】字节跳动青训营Cloudwego脚手架

Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令&#xff1a; GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装&#xff1a; go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…...

数据结构选讲 (更新中)

参考 smWCDay7 数据结构选讲2 by yyc 。 可能会补充的&#xff1a; AT_cf17_final_j TreeMST 的 F2 Boruvka算法 目录 AT_cf17_final_j Tree MST AT_cf17_final_j Tree MST link 题意 给定一棵 n n n 个点的树&#xff0c;点有点权 w i w_i wi​&#xff0c;边有边权。建立…...

springboot 简化 spring开发

什么是自动配置&#xff1f; 简单概念&#xff1a; Spring Boot 自动配置是一种 “约定优于配置” 的做法。根据项目类路径&#xff08;classpath&#xff09;上存在的依赖、配置文件中的某些属性&#xff0c;Spring Boot 会自动为常见场景创建并配置相关 Bean&#xff0c;省…...

Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)

目录 一 数据集制作 1 labelimg的安装与使用 2 标注方式 3 数据集制作 二 模型训练 三 使用Yolo11 + OCR 实现“营业执照”信息解析完整方案 1 cutLinesforcode.py 2 getBusinessLicenseContentPart.py 3 getPartWords.py 4 pdfTojpg.py 5 main.py 本项目可用于毕业…...

机器学习day3

自定义数据集使用框架的线性回归方法对其进行拟合 import matplotlib.pyplot as plt import torch import numpy as np # 1.散点输入 # 1、散点输入 # 定义输入数据 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1]…...

C基础寒假练习(3)

一、求数组中的第二大值 #include <stdio.h> int main() {int arr[] {12, 35, 1, 10, 34, 1};int size sizeof(arr) / sizeof(arr[0]);if (size < 2) {printf("数组元素不足两个\n");return 0;}int first -2147483648, second -2147483648; // 使用IN…...