MyBatis系统学习篇 - 分页插件

MyBatis是一个非常流行的Java持久层框架,它简化了数据库操作的代码。分页是数据库查询中常见的需求,MyBatis本身并不直接支持分页功能,但可以通过插件来实现,从而帮助我们在查询数据库的时候更加方便快捷

引入依赖

<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version>
</dependency>

在MyBatis-config.xml文件中配置分页插件

MyBatis核心配置文件中,标签的顺序: 重点强调顺序,我被坑过

  1. properties
  2. settings
  3. typeAliases
  4. typeHandlers
  5. objectFactory
  6. objectWrapperFactory
  7. reflectorFactory
  8. plugins
  9. environments
  10. databaseIdProvider
  11. mappers
<plugins><!--设置分页插件--><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>	

仅MyBatis的测试

引入相关依赖

        <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--  Mybatis 分页插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency>

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><!--MyBatis核心配置文件中,标签的顺序:properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?--><!--引入properties文件--><properties resource="jdbc.properties" /><!--设置类型别名--><typeAliases><!--typeAlias:设置某个类型的别名属性:type:设置需要设置别名的类型alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,即类名且不区分大小写--><!--<typeAlias type="com.atguigu.mybatis.pojo.User"></typeAlias>--><!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写--><package name="com.miaow.mybatis.bean"/></typeAliases><!--    该死的Mybatis 分页插件还有顺序  导入配置还要按照顺序进行--><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin></plugins><!--environments:配置多个连接数据库的环境属性:default:设置默认使用的环境的id--><environments default="development"><!--environment:配置某个具体的环境属性:id:表示连接数据库的环境的唯一标识,不能重复--><environment id="development"><!--transactionManager:设置事务管理方式属性:type="JDBC|MANAGED"JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务的提交或回滚需要手动处理MANAGED:被管理,例如Spring--><transactionManager type="JDBC"/><!--dataSource:配置数据源属性:type:设置数据源的类型type="POOLED|UNPOOLED|JNDI"POOLED:表示使用数据库连接池缓存数据库连接UNPOOLED:表示不使用数据库连接池JNDI:表示使用上下文中的数据源--><dataSource type="POOLED"><!--设置连接数据库的驱动--><property name="driver" value="${jdbc.driver}"/><!--设置连接数据库的连接地址--><property name="url" value="${jdbc.url}"/><!--设置连接数据库的用户名--><property name="username" value="${jdbc.username}"/><!--设置连接数据库的密码--><property name="password" value="${jdbc.password}"/></dataSource></environment><!-- 配置多个数据源 --><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!--引入映射文件--><mappers><!--xml引入配置文件  --><!--<mapper resource="mappers/UserMapper.xml"/>--><!--以包为单位引入映射文件要求:1、mapper接口所在的包要和映射文件所在的包一致2、mapper接口要和映射文件的名字一致--><package name="com.miaow.mybatis.mapper"/></mappers>
</configuration>

实体类User

package com.miaow.mybatis.bean;import java.util.List;/*** @author HWZ* @date 2024年05月07日 22:58* @description**/
public class User {private int id;private String name;private  String username;private String sex;private Book book;private Integer uid;private String bookName;private String cool;private List<Book> books;public List<Book> getBooks() {return books;}public void setBooks(List<Book> books) {this.books = books;}//    @Override
//    public String toString() {
//        return "User{" +
//                "id=" + id +
//                ", name='" + name + '\'' +
//                ", username='" + username + '\'' +
//                ", sex='" + sex + '\'' +
//                ", book=" + book +
//                '}';
//    }@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", username='" + username + '\'' +", sex='" + sex + '\'' +", book=" + book +", uid=" + uid +", bookName='" + bookName + '\'' +", cool='" + cool + '\'' +", books=" + books +'}';}public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getCool() {return cool;}public void setCool(String cool) {this.cool = cool;}public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public User(int id, String name, String username, String sex) {this.id = id;this.name = name;this.username = username;this.sex = sex;}public User() {}
}

Mapper接口

@Mapper
public interface UserMapper {/*** 查询用户对象*/User selectUser(@Param("user") User user);/*** 插入用户数据*/int insertUser(User user);/*** 更新数据*/int updateUser(@Param("user") User user);/*** 删除用户数据*/int deleteUser(int id);/*** 批量删除用户数据*/int  deleteUserBatch(@Param("ids") String ids);/*** 查询所有用户数据*/List<User> selectAll();/*** 查询单条数据,并转化为Map对象数据*/Map<String,Object> getUserToMap(@Param("id") int id);/*** 查询多条数据斌并转化为Map对象数据*/List<Map<String,Object>> get100UserToMap();/*** 查询多条数据并转换为Map对象的数据的第二种方式*/@MapKey("id")Map<Integer,User> get100UserToMap2();/*** 模糊查询*/List<User> selectUserLike(@Param("user") User user);/*** 动态设置表名查询数据*/List<User> selectUserByTableName(@Param("tableName") String tableName);User getUserById(int id);/*** 分步查询,先不考虑*/// User getUserById1(int id);/***  多对一 association*/User getUserBookById(int id);/*** 一对多 collection*/List<User> getDeptByUid(int id);/*** 动态插入*/int insertUserDynamic(@Param("users") List<User> users);/*** 根据传入的条件动态查询*/List<User> selectUserByCondition(@Param("user") User user);/*** trim用于去掉或添加标签中的内容*/List<User> selectUserByConditionTrim(@Param("user") User user);/*** choose、when、 otherwise相当于if...else if..else*/List<User> selectUserByConditionChoose(@Param("user") User user);/***  Mybatis的foreach标签用于循环集合,并生成SQL语句的in子句。*  实现批量删除*/int deleteMoreByArray(@Param("ids") int [] ids);
}

Mapper接口的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.miaow.mybatis.mapper.UserMapper"><!--    启用二级缓存 --><cache/><!--resultMap:设置自定义映射属性:id:表示自定义映射的唯一标识type:查询的数据要映射的实体类的类型子标签:id:设置主键的映射关系result:设置普通字段的映射关系association:设置多对一的映射关系collection:设置一对多的映射关系属性:property:设置映射关系中实体类中的属性名column:设置映射关系中表中的字段名--><resultMap id="userMap" type="User"><!--        实际山和我们数据库字段别名差不多--><id property="id" column="id"></id><result property="name" column="name"></result><result property="username" column="username"></result><result property="sex" column="sex"></result><association property="book" javaType="Book"><id property="uid" column="uid"></id><result property="book" column="bookName"></result><result property="cool" column="cool"></result></association></resultMap><sql id="baseColum">id,name,username,sex</sql><resultMap id="deptMap" type="User"><id property="id" column="id"></id><result property="name" column="name"></result><result property="username" column="username"></result><result property="sex" column="sex"></result><collection property="books" ofType="Book"><result property="uid" column="uid"></result><result property="book" column="bookName"></result><result property="cool" column="cool"></result></collection></resultMap><select id="getDeptByUid" resultMap="deptMap">select a.*, b.uid as uid, b.book as bookName, b.cool as coolfrom user aleft join book b on a.id = b.uidwhere a.id = #{id}</select><!--    <resultMap id="userBookMap" type="User">--><!--        &lt;!&ndash;        实际山和我们数据库字段别名差不多&ndash;&gt;--><!--        <id property="id" column="id"></id>--><!--        <result property="name" column="name"></result>--><!--        <result property="username" column="username"></result>--><!--        <result property="sex" column="sex"></result>--><!--        <association property="book" select="com.miaow.mybatis.mapper.BookMapper.getBooksByUserUId" column="uid"/>--><!--&lt;!&ndash;        分步查询 ,再三考虑觉得还是跳过这种方式, &ndash;&gt;--><!--    </resultMap>--><!--    根据resultMap获取相关数据--><select id="getUserById" resultMap="userMap" parameterType="int" useCache="true">select <include refid="baseColum"></include>from userwhere id = #{id};</select><!--    <select id="getUserById1" resultMap="userBookMap" parameterType="int">--><!--        select * from user where id = #{id};--><!--    </select>--><!--    管理其他表多对一查询 --><select id="getUserBookById" resultMap="userMap" parameterType="int">select a.*, b.uid as uid, b.book as bookName, b.cool as coolfrom user aleft join book b on a.id = b.uidwhere a.id = #{id}</select><!--    插入单条数据* useGeneratedKeys:设置使用自增的主键* keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中--><insert id="insertUser" parameterType="com.miaow.mybatis.bean.User" useGeneratedKeys="true" keyProperty="id">insert into uservalues (#{id}, #{username}, #{name}, #{sex})</insert><!--    更新数据 --><update id="updateUser" parameterType="com.miaow.mybatis.bean.User">update userset name = #{user.name}where id = #{user.id}</update><!--    删除单条数据--><delete id="deleteUser" parameterType="int">deletefrom userwhere id = #{id}</delete><!--    批量删除数据--><delete id="deleteUserBatch" parameterType="java.lang.String">deletefrom userwhere id in (${ids})</delete><!--    foreach 批量删除数据-->
<!--    <delete id="deleteMoreByArray">-->
<!--        delete  from user where-->
<!--            <foreach collection="ids" item="id" separator="or">-->
<!--                id = #{id}-->
<!--            </foreach>-->
<!--    </delete>--><!--    批量删除方式2 --><delete id="deleteMoreByArray">delete  from user where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete><!--   根据ID查询相关数据--><select id="selectUser" resultType="com.miaow.mybatis.bean.User">select *from userwhere id = #{user.id}</select><!--    查询数据库所有数据--><select id="selectAll" resultType="com.miaow.mybatis.bean.User">select *from user</select><select id="getUserToMap" resultType="java.util.Map" parameterType="int">select *from userwhere id = #{id};</select><select id="get100UserToMap" resultType="java.util.Map">select *from userlimit 100;</select><select id="get100UserToMap2" resultType="java.util.Map">select *from userlimit 100;</select><select id="selectUserLike" resultType="com.miaow.mybatis.bean.User"parameterType="com.miaow.mybatis.bean.User">select *from userwhere username like "%" #{user.username} "%"</select><!--    动态设置表名查询数据 --><select id="selectUserByTableName" resultType="com.miaow.mybatis.bean.User"parameterType="java.lang.String">select *from ${tableName}limit 100</select><!--    实现动态插入--><insert id="insertUserDynamic">insert into user values<foreach collection="users" item="user" separator=",">(#{user.id},#{user.username}, #{user.name},#{user.sex})</foreach></insert><!--根据条件动态查询--><select id="selectUserByCondition" resultType="com.miaow.mybatis.bean.User">select * from user<where><if test="user.id != null">id = #{user.id}</if><if test="user.userName != '' and user.userName != null">and username = #{user.username}</if><if test="user.name != '' and user.name != null">and name = #{user.name}</if><if test="user.sex != '' and user.sex != null">and sex = #{user.sex}</if></where></select><!--    trimprefix:在trim标签中的内容的前面添加某些内容prefixOverrides:在trim标签中的内容的前面去掉某些内容suffix:在trim标签中的内容的后面添加某些内容suffixOverrides:在trim标签中的内容的后面去掉某些内容--><select id="selectUserByConditionTrim" resultType="com.miaow.mybatis.bean.User">select * from user<trim prefix="where" suffixOverrides="and"><if test="user.id != null">id = #{user.id}</if><if test="user.userName != '' and user.userName != null">and username = #{user.username}</if><if test="user.name != '' and user.name != null">and name = #{user.name}</if><if test="user.sex != '' and user.sex != null">and sex = #{user.sex}</if></trim></select><!--    choose、when、 otherwise相当于if...else if..else--><select id="selectUserByConditionChoose" resultType="com.miaow.mybatis.bean.User">select * from user<where><choose><when test="user.id != null">id = #{user.id}</when><when test="user.userName != '' and user.userName != null">and username = #{user.username}</when><when test="user.name != '' and user.name != null">and name = #{user.name}</when><when test="user.sex != '' and user.sex != null">and sex = #{user.sex}</when></choose></where></select>
</mapper>

测试方法

 @Testpublic void test17() throws IOException {InputStream is = Resources.getResourceAsStream("D:\\myProgram\\IDEAProgram\\java-again\\SSM\\src\\main\\resources\\mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession session = sqlSessionFactory.openSession(true);UserMapper userMapper = session.getMapper(UserMapper.class);//查询之前,设置分页条件//显示第1页10条数据Page<Object> page = PageHelper.startPage(1, 10);User user = new User();List<User> users = userMapper.selectAll();if (users == null || users.size() == 0) {System.out.println("你查询的表无数据");return;}for (User user1 : users) {System.out.println(user1);}//获取分页System.out.println("总条数:" + page.getTotal());System.out.println("总页数:" + page.getPages());System.out.println("当前页:" + page.getPageNum());System.out.println("每页显示条数:" + page.getPageSize());session.close();}

在这里插入图片描述

  • pageNum:当前页的页码
  • pageSize:每页显示的条数
  • size:当前页显示的真实条数
  • total:总记录数
  • pages:总页数
  • prePage:上一页的页码
  • nextPage:下一页的页码
  • isFirstPage/isLastPage:是否为第一页/最后一页
  • hasPreviousPage/hasNextPage:是否存在上一页/下一页
  • navigatePages:导航分页的页码数
  • navigatepageNums:导航分页的页码,[1,2,3,4,5]

Spring + MyBatis 相对完整的案例

引入依赖

首先,在pom.xml文件中引入MyBatis和分页插件的依赖。

<dependency><groupId>org.mybatis.spring</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version>
</dependency>

配置MyBatis分页插件

在在Spring的配置文件中(如applicationContext.xml),配置分页插件。

<bean id="pageHelper" class="com.github.pagehelper.PageInterceptor"><property name="properties"><props><prop key="helperDialect">mysql</prop><prop key="reasonable">true</prop><prop key="supportMethodsArguments">true</prop><prop key="params">count=countSql</prop></props></property>
</bean>

配置MyBatis SqlSessionFactory

在Spring的配置文件中,配置MyBatis的SqlSessionFactory,并将分页插件添加到SqlSessionFactory中。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><property name="plugins"><array><ref bean="pageHelper" /></array></property><property name="mapperLocations" value="classpath*:mappers/*.xml" />
</bean>

配置数据源和事务管理

配置数据源和事务管理器。

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/your_database" /><property name="username" value="your_username" /><property name="password" value="your_password" />
</bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" />
</bean><tx:annotation-driven transaction-manager="transactionManager" />

创建Mapper接口

定义Mapper接口,并编写查询方法。例如:

@Mapper
public interface UserMapper {@Select("SELECT * FROM users")List<User> selectAllUsers();
}

使用分页插件

在Service层或Controller层中使用PageHelper进行分页操作。

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public PageInfo<User> getUsers(int pageNum, int pageSize) {PageHelper.startPage(pageNum, pageSize);List<User> users = userMapper.selectAllUsers();return new PageInfo<>(users);}
}

调用分页方法

在Controller中调用分页方法,并返回分页结果。

@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/users")public PageInfo<User> getUsers(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "10") int pageSize) {return userService.getUsers(pageNum, pageSize);}
}

注意博客主要围绕在实例上进行,很多东西都是建立在相关之前的mybatis系列文章的基础上,但为了给新手玩家看到明白,我将上述实例给出了,当然你直接复制粘贴肯定是会报错的,尤其是第一个Mybatis的实例,因为Book类需要你自己创建一个,里边属性值,你看心情给予吧,反正也无伤大雅。

最后补充一下Mybatis分页插件提供的配置属性:

  • helperDialect: 指定数据库的方言,如mysql、oracle、postgresql等。插件会根据方言生成相应的分页SQL。
  • reasonable: 当该参数设置为true时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页。默认值为false。
  • supportMethodsArguments: 支持从方法参数读取分页参数。默认值为false。
  • params: 用于配置一些特殊的参数,如count=countSql表示使用count查询时的SQL。
  • pageSizeZero: 当该参数设置为true时,如果pageSize=0则查询全部结果。默认值为false
  • rowBoundsWithCount: 使用RowBounds分页时是否进行count查询。默认值为false。
  • offsetAsPageNum: 使用RowBounds分页时,是否将offset作为pageNum使用。默认值为false。
  • pageSizeZero: 当pageSize为0时,返回所有结果。默认值为false。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端路由切换解决方案 —— 虚拟任务栈让你的 H5 像APP一样丝滑

目录 01: 前言 02: 通用组件&#xff1a;trigger-menu 和 trigger-menu-item 构建方案分析 03: 通用组件&#xff1a;构建 trigger-menu 和 trigger-menu-item 04: 前台业务下 H5 的应用场景 05: 通用组件&#xff1a;transition-router-view 构建方案分析 与 虚拟任务栈…

Java实战:将学生列表写入文件

本实战项目旨在演示如何使用Java语言将学生信息列表写入到一个文本文件中&#xff0c;并进行单元测试以确保代码的正确性。 创建静态方法 定义一个名为writeStudentsToFile的静态方法&#xff0c;该方法接收两个参数&#xff1a;一个Student对象的列表和一个文件路径。使用File…

Python疑难杂症--考试复习

1.排序输出字典中数据 dic1 {Tom:21,Bob:18,Jack:23,Ana:20} dic2 {李雷:21,韩梅梅:18,小明:23,小红:20} nint(input()) if n>len(dic1):nlen(dic1) print(sorted(dic1.keys())[:n]) print(sorted(dic2.items(),keylambda item:item[1])[:n]) 2.罗马数字转换 def F(s):d{…

SQL—DQL(数据查询语言)之小结

一、引言 在前面我们已经学习完了所有的关于DQL&#xff08;数据查询语言&#xff09;的基础语法块部分&#xff0c;现在对DQL语句所涉及的语法&#xff0c;以及需要注意的事项做一个简单的总结。 二、DQL语句 1、基础查询 注意&#xff1a; 基础查询的语法是&#xff1a;SELE…

FineBi导出Excel后台版实现

就是不通过浏览器,在后台运行的导出 参考文档在:仪表板查看接口- FineBI帮助文档 FineBI帮助文档 我这里是将这个帮助文档中导出的excel文件写到服务器某个地方后,对excel进行其他操作后再下载。由于原有接口耦合了HttpServletRequest req, HttpServletResponse res对象,…

海外短剧APP/H5 系统开发搭建

目前已经有多个客户用我们搭建的海外短剧系统&#xff0c;在使用中已经取得了较高的收益。目前一个客户打算做日本区域的海外短剧项目&#xff0c;需求已经理清楚了&#xff0c;系统正在搭建中

[MYSQL] 部门工资最高的员工

表&#xff1a; Employee ----------------------- | 列名 | 类型 | ----------------------- | id | int | | name | varchar | | salary | int | | departmentId | int | ----------------------- 在 SQL 中&#xff0c;id…

Deconfounding Duration Bias in Watch-time Prediction for Video Recommendation

Abstract 观看时间预测仍然是通过视频推荐加强用户粘性的关键因素。然而&#xff0c;观看时间的预测不仅取决于用户与视频的匹配&#xff0c;而且经常被视频本身的持续时间所误导。为了提高观看时间&#xff0c;推荐总是偏向于长时间的视频。在这种不平衡的数据上训练的模型面…

[机器学习]GPT LoRA 大模型微调,生成猫耳娘

往期热门专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用&#xff1b;手写框架等Aws服务器实战Aws Linux服务器上操作nginx、git、JDK、VueJava微服务实战Java 微服务实战&#xff0c;Spring Cloud Netflix套件、Spring Cloud Alibaba套件、Seata、gateway、shadingjdbc…

牛客网刷题 | BC104 翻转金字塔图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

万字详解 MySQL MGR 高可用集群搭建

文章目录 1、MGR 前置介绍1.1、什么是 MGR1.2、MGR 优点1.3、MGR 缺点1.4、MGR 适用场景 2、MySQL MGR 搭建流程2.1、环境准备2.2、搭建流程2.2.1、配置系统环境2.2.2、安装 MySQL2.2.3、配置启动 MySQL2.2.4、修改密码、设置主从同步2.2.5、安装 MGR 插件 3、MySQL MGR 故障转…

智慧排水监测系统方案

智慧排水监测系统方案 智慧排水监测系统作为现代城市基础设施管理的重要组成部分&#xff0c;旨在通过先进的信息技术手段&#xff0c;实现对城市排水系统的全面、实时、高效的远程监控与管理。该系统整合了物联网技术、大数据分析、云计算平台与人工智能算法&#xff0c;不仅…

告别暗黄,唤醒肌肤

&#x1f3ad; 想象一下&#xff0c;你的皮肤是舞台上的主角&#xff0c;但最近它似乎有些“疲惫”和“黯淡”&#xff0c;仿佛失去了往日的星光✨。别急&#xff0c;今天&#xff0c;我要为你揭秘一个能让肌肤重新焕发光彩的“魔法”——胶原蛋白&#xff01;&#x1f3a9; &a…

docker查看容器目录挂载

查看命令 docker inspect --format{{ json .Mounts }} <container_id_or_name> | jq 示例 docker inspect --format{{ json .Mounts }} af656ae540af | jq输出

FreeRTOS笔记 - 二(正点原子)

一&#xff0c;任务创建和删除 具体的参数&#xff08;看视频&#xff09; 1&#xff0c;动态和静态创建的区别 动态: 任务的任务控制块以及任务的栈空间所需的内存&#xff0c;均由FreeRTOS从 FreeRTOS 管理的堆中分配。 静态: 任务的任务控制块以及任务的栈空间所需的内存&am…

vscode设置编辑器文件自动保存

步骤 1.打开vscode的设置 2.在搜索栏输入关键字“保存”&#xff1b; 在 Files: Auto Save 设置项&#xff0c;选择自动保存的模式

java使用资源过高排查

在生产环境中有可能出现某java程序使用资源特别严重&#xff0c;这就需要找到该java进程&#xff0c;然后通过进程去找到是哪个线程的问题&#xff0c;这里我们就是用pidstat工具来排查一下 安装pidstat工具 yum -y install sysstat 查看java服务的pid jps 通过pid查看线…

C# WinForm —— 25 ProgressBar 介绍与使用

1. 简介 用于显示某个操作的进度 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 pbar 开头ContextMenuStrip右键菜单Enabled控件是否可用ForeColor用于显示进度的颜色MarqueeAnimationSpeed进度条动画更新的速度&#xff0c;以毫秒为单位M…

CSAPP Lab08——Proxy Lab完成思路

蓝色的思念 突然演变成了阳光的夏天 空气中的温暖不会很遥远 ——被风吹过的夏天 完整代码见&#xff1a;CSAPP/proxylab-handout at main SnowLegend-star/CSAPP (github.com) Q&#xff1a;计算机网络中port的作用是什么&#xff1f; A&#xff1a;在计算机网络中&#xff…

qt中实现多语言功能

qt中实现多语言功能 原理&#xff1a; 其本质就是生成ts文件&#xff0c;然后使用Linguist软件手工翻译&#xff0c;再生成qm文件&#xff0c;最后在主程序的开始加载不同的qm文件&#xff0c;实现多语言。 步骤&#xff1a; 修改程序文件 在pro文件中加入说明 TRANSLATI…