MyBatis 学习(二)之 第一个 MyBatis 案例
目录
1 配置 MyBatis 方式
1.1 XML 配置文件
1.2 Java 注解配置
1.3. Java API 配置
2 在 MySQL 中创建一张表
3 创建一个基于 Maven 的 JavaWeb 工程
4 编写 User 实体类
5 创建 Mybatis 全局配置文件
6 编写一个 DAO 或 Mapper 接口
7 编写 SQL 映射配置文件(重要)
8 加载映射文件
9 导入日志文件
10 创建 MyBatisTest 测试类
11 参考文档
1 配置 MyBatis 方式
MyBatis 可以通过以下三种方式来创建和配置
1.1 XML 配置文件
最常见的方式是使用 XML 配置文件来配置 MyBatis。在 XML 配置文件中,可以定义数据源、映射文件的位置、类型别名、插件等信息。XML 配置文件通常包括 MyBatis 的全局配置和映射文件的配置。以下是一个简单的 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="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="com/example/mapper/ExampleMapper.xml"/></mappers>
</configuration>
1.2 Java 注解配置
从 MyBatis 3.4.1 版本开始,MyBatis 支持使用 Java 注解来配置映射关系。可以使用 @MapperScan 注解来指定 Mapper 接口所在的包,也可以使用 @Mapper 注解来标记 Mapper 接口。以下是一个简单的 Java 注解配置示例:
@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {// 数据源配置// 其他配置...
}
1.3. Java API 配置
除了使用 XML 配置文件和 Java 注解外,MyBatis 还支持使用 Java API 来进行配置。通过编写 Java 代码,可以动态地创建 SqlSessionFactory 对象,并且进行各种配置。以下是一个简单的 Java API 配置示例:
DataSource dataSource = getDataSource(); // 获取数据源
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(MyMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
2 在 MySQL 中创建一张表
drop table if exists person;
create table person (
id int(10) primary key auto_increment, #主键,自动增长
name varchar(14) unique not null, #该行不重复,不为空
age int,
sex char(10) default '女' # 没有插入该列,填入默认值"女"
)charset=utf8; #utf-8 编码#多行插入
insert into person(name, age, sex) values
('西施', 18, '女'),
('大乔', 32, null),
('王昭君', 24, null);insert into person(name,age) values('赵飞燕',27);
insert into person(name,age) values('虞姬', 25);
insert into person(id,name,age) values(9, '貂蝉', 26);

3 创建一个基于 Maven 的 JavaWeb 工程
可以参考以下博文:
IDEA 2023.2 配置 JavaWeb 工程-CSDN博客
https://blog.csdn.net/zjs246813/article/details/136199249?spm=1001.2014.3001.5501导入依赖
<dependencies><!-- Mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><!-- 日志处理 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>
4 编写 User 实体类
public class User {private Integer id;private String name;private Integer age;private String sex;// Getter、Setter、toString() 方法省略
}
5 创建 Mybatis 全局配置文件
创建 mysql.properties 配置文件
study 改为自己的数据库名
root 是数据库用户名
123456 是数据库用户密码
驱动器一般为 com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/study?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
name=root
password=123456
driver=com.mysql.cj.jdbc.Driver
在 resources 目录中,创建 Mybatis 的全局配置文件 mybatis-config.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><!-- 通过properties标签,读取java配置文件的内容 --><properties resource="mysql.properties" /><!-- 配置环境.--><environments default="development"><!-- id属性必须和上面的default一致 --><environment id="development"><!--配置事务的类型--><transactionManager type="JDBC"></transactionManager><!--dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象源 --><dataSource type="POOLED"><!--配置连接数据库的4个基本信息--><property name="url" value="${url}" /><property name="username" value="${name}" /><property name="password" value="${password}" /><property name="driver" value="${driver}" /></dataSource></environment></environments>
</configuration>
对 mybatis-config.xml 中配置项的简单说明:
- properties:用于加载外部属性文件,通过指定 resource="mysql.properties",MyBatis 会尝试从当前目录下查找名为 "mysql.properties" 的文件,并将其中的属性值应用到配置 property 中
- environments:
配置当前的环境,default 属性有 development 和 work 两种选择,默认是 development 开发模式,work 是工作模式指定当前运行环境,通过 default 属性指定某个运行环境的标识符 id 来使用该运行环境 - environment:
配置每个 environment 定义的环境,可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境。其 id 属性也有 development 和 work 两种选择,并且必须和上面的 default 属性一致配置运行环境,通过 id 属性来标识该环境。如果配置了两个相同的 environment,即它们的 id 属性值相同,MyBatis 会用后面的覆盖掉前面的 - transactionManager:配置事务管理器类型,type 属性中有 JDBC 和 MANAGED 两种,一次只能配置一个
- JDBC 使用 JdbcTransactionFactory 工厂生成的 JdbcTransaction 对象实现,以 JDBC 的方式进行数据库的提交、回滚等操作,它依赖于从数据源得到的连接来管理事务范围
- MANAGED 使用 ManagedTransactionFactory 工厂生成的 ManagedTransaction 对象实现,它的提交和回滚不需要任何操作,而是把事务交给容器进行处理,默认情况下会关闭连接,如果不希望默认关闭,只要将其中的 closeConnection 属性设置为 false 即可
- dataSource:配置数据源类型,type属性有 UNPOOLED、POOLED 和 JNDI 三种选择:
- UNPOOLED (UnpooledDataSourceFactory):采用非数据库池的管理方式,每次请求都会新建一个连接,并用完后关闭它,所以性能不是很高。该方式适用于只有小规模数量并发用户的简单应用程序上
- POOLED (PooledDataSourceFactory):采用连接池的概念将数据库链接对象 Connection 组织起来,可以在初始化时创建多个连接,使用时直接从连接池获取,避免了重复创建连接所需的初始化和认证时间,从而提升了效率,所以这种方式比较适合对性能要求高的应用中。在开发或测试环境中经常用到此方式
- JNDI (JndiDataSourceFactory):数据源 JNDI 的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。在生产环境中优先考虑这种方式
- property:dataSource 中的 property 元素就是数据库相关的配置信息
6 编写一个 DAO 或 Mapper 接口
在 com.mapper 目录下创建一个 UserMapper 接口
package com.mapper;import com.entity.User;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface UserMapper {// 查询所有用户List<User> selectAllUser();// 通过 id 查询一个用户User selectUserById(int id);// 模糊查询,根据 name 字段查询用户List<User> selectUserByName(String name);// insert、update、delete的返回值都是int(影响行数)// 添加用户// 带两个参数,需要在接口中通过@Param注解指定名称(因为编译时参数名不会保留)int insertUser(@Param("name") String name,@Param("age") int age,@Param("sex") String sex);// 根据 id 更新用户int updateUser(@Param("id") int id,@Param("name") String name,@Param("age") int age,@Param("sex") String sex);// 根据 id 删除用户int deleteUsesr(int id);
}
7 编写 SQL 映射配置文件(重要)
在目录 resources 创建 mapper 目录,然后在 mapper 目录下创建一个 UserMapper.xml 文件。Mybatis 中所有数据库的操作都基于 SQL 映射配置文件中配置的SQL语句,在 SQL 映射配置文件中可以配置任何类型的 SQL 语句。框架会根据配置文件中的参数配置,完成对 SQL 语句输入输出参数的映射配置。
| 相关属性 | 描述 |
|---|---|
| namespace | 表示命名空间,用来设定当前 Mapper 配置文件的唯一标识,将来在 Java 程序中通过 namespace 属性值来定位到这个配置文件,namespace 属性值可以随意命名,建议使用 Mapper 接口的全类名命名,如 com.mapper.UserMapper |
| id | SQL 映射语句的唯一标识 |
| parameterType | 用来指定 SQL 语句中的参数类型,可以是一个简单类型,也可以是一个复杂对象类型 |
| resultType 和 resultMap | 用来指定 SQL 语句的返回值类型,resultType 用于指定返回的单一结果类型,而 resultMap 用于指定返回结果的映射关系,通常用于复杂的查询结果映射 |
| parameterMap | 用来指定参数映射关系 |
| sql | 用于定义可重用的 SQL 片段,可以在不同的 SQL 语句中重复使用,从而减少重复编写相同的 SQL 代码 |
| include | 用于引用外部的 SQL 片段,可以在 SQL 映射文件中引用其他 SQL 片段,从而实现模块化的 SQL 代码编写 |
| cache | 用于配置结果缓存,可以指定 SQL 语句的查询结果是否需要被缓存 |
#{} | #{} 表示 SQL 语句的占位符 |
${} | ${} 表示 SQL 语句的拼接符 |
#{} 和 ${} 介绍
- #{}:SQL 语句的占位符,相当于JDBC中的 "?",它会自动进行 Java 类型和 JDBC 类型转换,可以防止 SQL 注入攻击。#{} 接受的输入参数的类型可以是简单类型、普通 JavaBean 或者 HashMap 。当接受简单类型时,#{} 中可以写 value 或者其他任意名称。如果接受的是JavaBean,它会通过 OGNL 读取对象中的属性值,例如,一个JavaBean user,它有一个属性 name,在映射文件中可以使用 #{user.name} 来引用这个属性值
- ${}: SQL 语句的拼接符,会将接收到的参数在不进行 JDBC 类型转换的情况下拼接在 SQL 语句中,${} 里面必须要写参数,不然会报错。${} 接受输入参数的类型可以是简单类型、普通 JavaBean 或者 HashMap 。当接受简单类型时,${} 中只能写 value,而不能写其他任意名称。如果接受的是 JavaBean,它会通过 OGNL 读取对象中的属性值,同上
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace-绑定一个对应dao/mapper接口-->
<mapper namespace="com.mapper.UserMapper"><!-- 查询所有用户 --><!--通过 resultType 指定查询的结果是 User 类型的数据只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性--><!-- id 和 com.mapper.UserMapper.selectAllUser 对应 --><select id="selectAllUser" resultType="com.entity.User">select * from person;</select><!-- 通过id查询一个用户 --><!-- 带一个简单类型的参数, 这种情况下parameterType属性可以省略,mybatis可以自动推断出类型 --><select id="selectUserById" parameterType="int" resultType="com.entity.User">select * from person where id = #{id};</select><!-- 模糊查询,根据name字段查询用户--><select id="selectUserByName" parameterType="String" resultType="com.entity.User">select * from person where name like '%${value}%';</select><!-- 添加用户--><!-- 带两个参数,需要在接口中通过@Param注解指定名称(因为编译时参数名不会保留) --><!-- insert、update、delete的返回值都是int(影响行数) --><insert id="insertUser" parameterType="com.entity.User">insert into person(name, age, sex)values (#{name}, #{age}, #{sex});</insert><!-- 根据id更新用户 --><update id="updateUser" parameterType="com.entity.User">update person set name = #{name},age = #{age},sex = #{sex} where id = #{id}</update><!-- 根据id删除用户 --><delete id="deleteUser" parameterType="int">delete from person where id = #{id}</delete>
</mapper>
8 加载映射文件
将上面创建的 UserMapper.xml 文件配置到全局配置文件 mybatis-config.xml 中

<!--指定映射配置文件的位置,这个映射配置文件指的是每个业务独立的配置文件-->
<mappers><mapper resource="mapper/UserMapper.xml"/>
</mappers>
9 导入日志文件
导入日志文件,在 resources 目录下创建 log4j.properties 配置文件,并且导入如下配置(如果log报错则以管理员的方式启动 Eclipse 或 IDEA)
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=D:/axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
10 创建 MyBatisTest 测试类
使用 JDBC 的事务管理在进行增删改操作时,需要进行提交事务,也就是 sqlSession.commit(),否则数据不会操作成功
public class MybatisTest {//定义 SqlSessionSqlSession sqlSession = null;@Beforepublic void getSqlSession() throws IOException {//加载 mybatis 全局配置文件 Resources// 原 InputStream is = MybatisTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//创建 SqlSessionFactory 对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//根据 sqlSessionFactory 产生 sessionsqlSession = sqlSessionFactory.openSession();}//查询所有用户数据@Testpublic void testSelectAllUser() {/*** 注意:这个字符串由 UserMapper.xml 文件中的两个部分构成(namespace + id)* <mapper namespace="com.mapper.UserMapper">中 namespace 的值* <select id="selectAllUser" > 中的 id 值* 这样Mybatis才能找到需要的SQL*/String statement = "com.mapper.UserMapper.selectAllUser";List<User> listUser = sqlSession.selectList(statement);for (User user : listUser) {System.out.println(user);}sqlSession.close();}//根据Id查询一个用户数据@Testpublic void testSelectUserById() {String statement = "com.mapper.UserMapper.selectUserById";User user = sqlSession.selectOne(statement, 1);System.out.println(user);sqlSession.close();}//模糊查询:根据 person 表的 name 字段@Testpublic void testSelectUserByName() {String statement = "com.mapper.UserMapper.selectUserByName";List<User> listUser = sqlSession.selectList(statement, "大");for (User user : listUser) {System.out.println(user);}sqlSession.close();}//添加一个用户数据@Testpublic void testInsertUser() {String statement = "com.mapper.UserMapper.insertUser";User user = new User();user.setName("嫦娥");user.setAge(24);user.setSex("女");int i = sqlSession.insert(statement, user);System.out.println( (i>0)? "添加成功!":"添加失败!");//提交插入的数据sqlSession.commit();sqlSession.close();}//根据id修改用户数据@Testpublic void testUpdateUser(){//如果设置的 id不存在,那么数据库没有数据更改String statement = "com.mapper.UserMapper.updateUser";User user = new User();user.setId(10);user.setName("王红");user.setAge(26);user.setSex("女");int i = sqlSession.update(statement, user);System.out.println( (i>0)? "修改成功!":"修改失败!");//提交数据sqlSession.commit();sqlSession.close();}//根据id删除用户数据@Testpublic void testDeleteUser(){String statement = "com.mapper.UserMapper.deleteUser";int i = sqlSession.delete(statement, 10);System.out.println( (i>0)? "删除成功!":"删除失败!");sqlSession.commit();sqlSession.close();}
}
部分执行结果


执行过程(添加一个用户)

11 参考文档
Mybatis3详解(二)----Mybatis的第一个入门实例 - 唐浩荣 - 博客园 (cnblogs.com)
MyBatis中#{}占位符与${}拼接符的用法说明_java_脚本之家 (jb51.net)
相关文章:
MyBatis 学习(二)之 第一个 MyBatis 案例
目录 1 配置 MyBatis 方式 1.1 XML 配置文件 1.2 Java 注解配置 1.3. Java API 配置 2 在 MySQL 中创建一张表 3 创建一个基于 Maven 的 JavaWeb 工程 4 编写 User 实体类 5 创建 Mybatis 全局配置文件 6 编写一个 DAO 或 Mapper 接口 7 编写 SQL 映射配置文件&#…...
30天自制操作系统(第21天)
21.1 攻克难题——字符串显示API 显示单个字符时,用 [CS:ECX] 的方式特意指定了 CS(代码段寄存器),因此可以成功读取 msg的内容。但在显示字符串时,由于无法指定段地址,程序误以为是 DS而从完全错误的内存地…...
linux系统Jenkins的安装
Jenkins安装 安装上传安装包解压包首次登录要去服务器查看密码,更改密码选择需要安装的插件设置Admin用户和密码安装完成 安装 上传安装包 上传 jdk17 tomcat jenkins.war的安装包 . 上传 tomcat安装包解压包 解压jdk tar xf jdk-11.0.18_linux-x64_bin.tar.gz解…...
【GStreamer】basic-tutorial-1:GstBus、GstMessage详解
【目录】郭老二博文之:图像视频汇总 1、先看示例 #include <gst/gst.h>int main (int argc, char *argv[]) {GstElement *pipeline;GstBus...
Python中的可变变量与不可变变量
python中的可变与不可变变量 一、变量的三个参数 就像区分一个人一样,同样都是张三,可能这个张三就不是那个张三。同一个变量是指的什么相同呢? Python中的对象包含三个要素,id(内存地址),typ…...
OpenGL调用窗口,方向键和鼠标
9.2 OpenGL调用窗口,方向键和鼠标 9.2.1 opengl调用窗口 OpenGL调用窗口步骤: 第一步:初始化 GLFW,初始化OpenGL,初始化窗口,初始化上下文 第二步:设置窗口大小和位置,设置输入输出 第三步…...
fastAdmin表格列表的功能
更多文章,请关注:fastAdmin后台功能详解 | 夜空中最亮的星 FastAdmin是一款基于ThinkPHP5Bootstrap的极速后台开发框架。优点见开发文档 介绍 - FastAdmin框架文档 - FastAdmin开发文档 在这里上传几张优秀的快速入门图: 一张图解析FastAdmin中的表格列…...
用来检查 CUDA、Conda 和 PyTorch 的版本的python文件
提供的 Python 代码片段包括几个语句,用来检查 CUDA、Conda 和 PyTorch 的版本,以及一些与 CUDA 相关的系统配置。让我们分解一下:PyTorch 版本和配置:torch.__config__.show():显示 PyTorch 的构建配置。 torch.__ver…...
基于Redisson,实现分布式锁注解
1.原始写法 我们平常使用redisson的分布式锁是不是基本都用下面的这个模板,既然是模板,那为何不把他抽出来呢? // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁 boolean res lock.tryLock(100, 10, TimeUnit.SECON…...
【机器学习】机器学习是什么?
你知道机器学习是什么吗?它就像是一个超级聪明的孩子,可以通过观察和经验不断学习和成长。而我们要做的就是培养和教育这个孩子,让他能够从数据中学习并做出决策和预测。 那么,我们该如何培养和教育这个聪明的孩子呢?首…...
一文速览深度伪造检测(Detection of Deepfakes):未来技术的守门人
一文速览深度伪造检测(Detection of Deepfakes):未来技术的守门人 前言一、Deepfakes技术原理卷积神经网络(CNN):细致的艺术学徒生成对抗网络(GAN):画家与评审的双重角色…...
C# 中的执行表达式树(Expression Tree)
引言: 在C#编程中,表达式树(Expression Tree)是一种强大的工具,用于表示和执行计算表达式。表达式树将计算表达式抽象为树状结构,每个节点代表表达式中的一个元素,如常量、变量、方法调用等。本…...
森林监测VR虚拟情景再现系统更便利
AI人工智能技术已经逐渐渗透到各个领域,为我们的生活带来了诸多便利。在虚拟仿真教学领域,AI技术的应用也日益丰富,为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术,AI/VR虚拟现…...
高频面试题整理(一)
文章目录 平台无关性如何实现?JVM如何加载 .class文件?什么是反射?谈谈ClassLoader谈谈类的双亲委派机制类的加载方式Java的内存模型?JVM内存模型-jdk8程序计数器:Java虚拟机栈局部变量表和操作数栈: Java内存模型中堆和栈的区别…...
2-23 switch、JVM内存模型、垃圾回收机制、this、static、变量的分类
文章目录 switch 实现成绩评级JVM内存模型概念栈的特点堆的特点 垃圾回收机制通用的分代垃圾回收机制三种清理算法垃圾回收过程垃圾回收常见的两种检测引用算法内存泄露常见原因 this的用法创建对象的四步 static 静态特点 变量的分类和作用域import switch 实现成绩评级 switc…...
基础!!!吴恩达deeplearning.ai:卷积层
以下内容有任何不理解可以翻看我之前的博客哦:吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止,你使用的所有神经网络层都是密集层类型,这…...
SpringBoot案例(黑马学习笔记)
这个案例呢,就是Tlias智能学习辅助系统。 参考接口文档完成后端功能的开 发,然后结合前端工程进行联调测试即可。 完成后的成品效果展示: 准备工作 需求&环境搭建 需求说明 部门管理 部门管理功能开发包括: ● 查询部门列…...
项目流程图
实现便利店自助付款项目 服务器: 1、并发服务器(多进程、多线程、IO多路复用) 2、SQL数据库的创建和使用(增删改查) 3、以模块化编写项目代码,按照不同模块编写.h/.c文件 客户端: 1、QT客户端界…...
鸿蒙这么大声势,为何迟迟看不见岗位?最新数据来了
对于鸿蒙生态建设而言,2024年可谓至关重要,而生态建设的前提,就是要有足够的开发人才。与之对应的,今年春招市场上与鸿蒙相关岗位和人才旺盛的热度,一方面反应了鸿蒙生态的逐渐壮大,另一方面也让人们对鸿蒙…...
Qt中关于信号与槽函数的思考
信号与槽函数的思考 以pushbutton控件为例,在主界面上放置一个pushbutton控件,点击右键选择关联槽函数,关联一个click函数,如下图所示: 在该函数中,实现了一个点击pushbutton按钮后,弹出一个窗…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
