【Spring集成MyBatis】MyBatis的多表查询

news2024/11/16 21:31:01

文章目录

  • 1. 一对一
    • 什么是一对一
    • User、Order类及Mapper,User、Order表
    • 一对一操作的实现
    • 一对一操作实现的第二种方式
  • 2. 一对多
    • 什么是一对多
    • 一对多操作实现
  • 3. 多对多
    • 什么是多对多
    • 多对多的实现
  • 4. 小结

1. 一对一

什么是一对一

一对一指的是表与表之间通过外键进行连接,比如我们有一个Order类,里面有属性idorderTimetotal,以及一个下这个订单的用户userId,通过userId找到对应的用户。一个订单会有一个对应的下单用户,这就是一对一。
在这里插入图片描述

User、Order类及Mapper,User、Order表

User表中有如下属性:
在这里插入图片描述

Java代码中,
User类的定义如下:

package com.example.demo.domain;

import java.util.Date;

public class User {
    int id;
    String username;
    String password;
    Date birthday;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                '}';
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

并写好对应的Mapper:
UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserMapper">

</mapper>

UserMapper.java

package com.example.demo.dao;

import com.example.demo.domain.User;

import java.io.IOException;
import java.util.List;

public interface UserMapper {
    void save(User user);

    User findById(int id);

    List<User> findAll();

}

Order表中有如下属性:
在这里插入图片描述

Java代码中,
Order类的定义如下:

package com.example.demo.domain;

import java.util.Date;

public class Order {
    int id;
    Date orderTime;
    double total;
    
    User user;

    @Override
    public String toString() {
        return "Order{" +
                "id=" + id +
                ", orderTime=" + orderTime +
                ", total=" + total +
                ", user=" + user +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Date getOrderTime() {
        return orderTime;
    }

    public void setOrderTime(Date orderTime) {
        this.orderTime = orderTime;
    }

    public double getTotal() {
        return total;
    }

    public void setTotal(double total) {
        this.total = total;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

并写好对应的Mapper:
OrderMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.OrderMapper">

</mapper>

OrderMapper.java:

package com.example.demo.dao;

public interface OrderMapper {

}

还有SqlMapConfig.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <!-- 通过properties标签加载外部properties文件 -->
    <properties resource="jdbc.properties"></properties>

    <!-- 自定义别名 -->
    <typeAliases>
        <typeAlias type="com.example.demo.domain.User" alias="user"></typeAlias>
    </typeAliases>

    <!-- 配置分页助手插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>

    <!-- 数据源环境 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <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>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
        <mapper resource="mapper/OrderMapper.xml"></mapper>
    </mappers>

</configuration>

一对一操作的实现

假如我们有这样一条sql语句:

SELECT *, o.id `orderid` FROM `order` o, `user` u WHERE o.uid=u.id

两张表中分别有如下数据:
在这里插入图片描述

则查询的结果为:
在这里插入图片描述

若想要把这条语句中各个属性封装到Order中对应的各个属性中(其中User相关的属性封装到User里),应如下写sql语句:
在orderMapper.java中:

package com.example.demo.dao;

import com.example.demo.domain.Order;

import java.util.List;

public interface OrderMapper {
    List<Order> findAll();
}

orderMapper.xml中:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.OrderMapper">
    
    <resultMap id="orderMap" type="com.example.demo.domain.Order">
<!--        手动指定字段与实体属性的映射关系-->
<!--        column:数据表的字段名称-->
<!--        property:实体的属性名称-->
        <id column="oid" property="id"></id>
        <result column="ordertime" property="orderTime"></result>
        <result column="total" property="total"></result>
        <result column="uid" property="user.id"></result>
        <result column="username" property="user.username"></result>
        <result column="password" property="user.password"></result>
        <result column="birthday" property="user.birthday"></result>
    </resultMap>

    <select id="findAll" resultMap="orderMap">
        SELECT *, o.id `orderid`, u.id `userid` FROM `order` o, `user` u WHERE o.uid=u.id
    </select>

</mapper>

其中,我们将SQL语句的返回值通过resultMap属性指定为orderMap,并在上面定义了一个id为orderMapresultMap
resultMap中,type属性表示返回的具体的类,这里返回的是Order类,因为我们要将返回的值都封装在Order类中
下面的<id>标签表示主键,<result>表示其他结果
column用于指定返回的值名称,property用于指定将返回的值注入到Order对象的哪个属性里去
其中要注意的事,因为uid,password,birthday都是要注入到user这个对象里的,所以在property中写的是user下的属性
测试代码:

package com.example.demo;

import com.example.demo.dao.OrderMapper;
import com.example.demo.domain.Order;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class DemoApplication {

    public static void main(String[] args) throws IOException {
//        1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//        3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        4. 获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        List<Order> orderList = orderMapper.findAll();
        for (Order order: orderList){
            System.out.println(order);
        }

//        6. 释放资源
        sqlSession.close();
    }
}

查询结果:
在这里插入图片描述

一对一操作实现的第二种方式

id为orderMapresultMap还可以用以下的方式写:
association标签中的property用于指定属性的名称,javaType用于指定属性类型,如果我们没有在sqlMapConfig.xml中配置别名的话,这里就要写com.example.demo.domain.User
下面的内容是类似的,不过通过这个方法就不需要再写user.xxx了,直接写对应的属性名称就好

<resultMap id="orderMap" type="com.example.demo.domain.Order">
<!-- 手动指定字段与实体属性的映射关系 -->
<!-- column:数据表的字段名称 -->
<!-- property:实体的属性名称 -->
    <id column="oid" property="id"></id>
    <result column="ordertime" property="orderTime"></result>
    <result column="total" property="total"></result>

<!-- property:当前实体(order)属性名称(private User user -->
<!-- javaType:当前实体(order)中的属性类型(User) -->
    <association property="user" javaType="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
    </association>
</resultMap>

运行结果保持不变

2. 一对多

什么是一对多

一对多指的是,比如我们有一个Order类,里面有属性idorderTimetotal,以及一个下这个订单的用户userId,每个用户可以下多个订单,那就是一对多的关系。
在这里插入图片描述

一对多操作实现

想要查询一个用户及其名下的所有订单,我们的SQL语句是这么写的:

select *, o.id oid from `user` u, `order` o where u.id=o.uid

在这里插入图片描述
想要查询这种一对多关系的东西,我们应该如下实现:
修改User.java,其中多了一个用户订单的List属性

package com.example.demo.domain;

import java.util.Date;
import java.util.List;

public class User {
    int id;
    String username;
    String password;
    Date birthday;

//    描述当前用户存在哪些订单
    List<Order> orderList;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", orderList=" + orderList +
                '}';
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

UserMapper.java

package com.example.demo.dao;

import com.example.demo.domain.User;

import java.util.List;

public interface UserMapper {

    List<User> findAll();

}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserMapper">

    <resultMap id="userMap" type="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
        <collection property="orderList" ofType="order">
            <id column="oid" property="id"></id>
            <result column="orderTime" property="orderTime"></result>
            <result column="total" property="total"></result>
        </collection>
    </resultMap>

    <select id="findAll" resultMap="userMap">
        select *, o.id oid from `user` u, `order` o where u.id=o.uid
    </select>

</mapper>

在总配置文件中加上别名配置:

<!-- 自定义别名 -->
<typeAliases>
    <typeAlias type="com.example.demo.domain.User" alias="user"></typeAlias>
    <typeAlias type="com.example.demo.domain.Order" alias="order"></typeAlias>
</typeAliases>

其中<collection>表示列表集合,其中property指的是User类的属性名称,ofType是List里面的属性
下面的idcolumn和之前的意思一样
测试代码:

package com.example.demo;

import com.example.demo.dao.UserMapper;
import com.example.demo.domain.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class DemoApplication {

    public static void main(String[] args) throws IOException {
//        1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//        3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        4. 获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.findAll();
        for (User user: userList){
            System.out.println(user);
        }

//        6. 释放资源
        sqlSession.close();

    }
}

结果如下:
在这里插入图片描述

3. 多对多

什么是多对多

在这里插入图片描述
其中user_role表中的信息如下:
在这里插入图片描述

role表的信息如下:
在这里插入图片描述
通过一个user_role表来连接两个表,我们需要通过user_role为媒介进行role具体信息的查询
注意在这里,一个用户可以有多个角色,在user_role表中两个键均为主键。
一个用户可以有多个角色,一个角色可以被多个用户拥有,就是多对多的关系

多对多的实现

定义Role.java

package com.example.demo.domain;

public class Role {
    int id;
    String roleName;
    String description;

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", roleName='" + roleName + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

在User中加上对应的属性及方法:

package com.example.demo.domain;

import java.util.Date;
import java.util.List;

public class User {
    int id;
    String username;
    String password;
    Date birthday;

//    描述当前用户存在哪些订单
    List<Order> orderList;

//    描述当前用户的角色
    List<Role> roles;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", roles=" + roles +
                '}';
    }

    public List<Role> getRoles() {
        return roles;
    }

    public void setRoles(List<Role> roles) {
        this.roles = roles;
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

在UserMapper.java中加上对应方法的定义:

package com.example.demo.dao;

import com.example.demo.domain.User;

import java.util.List;

public interface UserMapper {

    List<User> findAll();
    
    List<User> findUserandRole();

}

在写对应的UserMapper.xml之前,先把SQL语句写好,这实际上就是通过user_role表来查询user对应的role相关的信息:

SELECT * FROM user u, user_role ur, role r where u.id = ur.userid and ur.roleid = r.id

查询结果如下:
在这里插入图片描述
此时继续写UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserMapper">

    <resultMap id="userMap" type="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
        <collection property="orderList" ofType="order">
            <id column="oid" property="id"></id>
            <result column="orderTime" property="orderTime"></result>
            <result column="total" property="total"></result>
        </collection>
    </resultMap>

    <select id="findAll" resultMap="userMap">
        select *, o.id oid from `user` u, `order` o where u.id=o.uid
    </select>

    <resultMap id="userandRoleMap" type="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
        <collection property="roles" ofType="role">
            <id column="roleid" property="id"></id>
            <result column="roleName" property="roleName"></result>
            <result column="description" property="description"></result>
        </collection>
    </resultMap>

    <select id="findUserandRole" resultMap="userandRoleMap">
        SELECT * FROM user u, user_role ur, role r where u.id = ur.userid and ur.roleid = r.id
    </select>

</mapper>

这里对应的语句是findUserandRole中的语句,返回的Map为userandRoleMap,里面定义了对应的user信息及role的信息
在总配置中加上别名配置:

<!-- 自定义别名 -->
<typeAliases>
    <typeAlias type="com.example.demo.domain.User" alias="user"></typeAlias>
    <typeAlias type="com.example.demo.domain.Order" alias="order"></typeAlias>
    <typeAlias type="com.example.demo.domain.Role" alias="role"></typeAlias>
</typeAliases>

测试代码:

package com.example.demo;

import com.example.demo.dao.UserMapper;
import com.example.demo.domain.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class DemoApplication {

    public static void main(String[] args) throws IOException {
//        1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//        2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
//        3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//        4. 获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.findUserandRole();
        for (User user : userList) {
            System.out.println(user);            
        }

//        6. 释放资源
        sqlSession.close();

    }
}

结果如下:
在这里插入图片描述
和表中查询出来的结果一致

4. 小结

在这里插入图片描述
感觉就是如果是一个类里面包含有另一个类(单个对象),就通过<resultMap>+<association>就可以
然后对于一个类里面包含有另一个类的列表的,通过<resultMap>+<collection>实现即可。
其中<resultMap>中有属性idtype,前者用于指定这个resultMap的名称,type指定这个resultMap的返回类型
下面的<id>是主键,<result>是其他信息,其中包含<column>是数据库查表得到的列名称,<property>是具体的属性名
<association>中的property是对应的属性名,javaType是对应的类型
<collection>中的property是对应的属性名,ofType是列表对应的类型

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

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

相关文章

002、ArkTS

之——开发语言 杂谈 基础编程语言ArkTS。引用来自华为开发者课堂。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;匹配ArkUI框架&#xff0c;扩展了声明式UI、状态管理等相应的能力&#xff0c;让开发者以更简洁…

Robust taboo search for the quadratic assignment problem-二次分配问题的鲁棒禁忌搜索

文章目录 摘要关键字结论研究背景1. Introduction 常用基础理论知识2. The quadratic assignment problem3. Taboo search3.1. Moves3.2 Taboo list3.3. Aspiration function3.4. Taboo list size4. Random problems5. Parallel taboo search 研究内容、成果7. Conclusion 潜在…

RabbitMQ之MQ的可靠性

文章目录 前言一、数据持久化交换机持久化队列持久化消息持久化 二、LazyQueue控制台配置Lazy模式代码配置Lazy模式更新已有队列为lazy模式 总结 前言 消息到达MQ以后&#xff0c;如果MQ不能及时保存&#xff0c;也会导致消息丢失&#xff0c;所以MQ的可靠性也非常重要。 一、…

Vatee万腾的科技探险:vatee数字化力量的前瞻征途

在Vatee万腾的科技探险中&#xff0c;我们领略到了一场数字化力量的前瞻征途&#xff0c;这是一次引领未来的创新之旅。Vatee万腾以其独特的科技理念和数字化力量&#xff0c;开启了一次引领行业的前瞻性征途&#xff0c;为数字化未来描绘出了崭新的篇章。 Vatee万腾的数字化力…

荆涛《春节回家》:歌声中的年味与乡愁

荆涛《春节回家》&#xff1a;歌声中的年味与乡愁春节&#xff0c;对于每一个中国人来说&#xff0c;都是一年中最为重要的时刻。它不仅仅是一个节日&#xff0c;更是团圆、乡愁、回忆与希望的象征。歌手荆涛的歌曲《春节回家》恰恰捕捉到了这些情感&#xff0c;用音乐为人们绘…

【AI认证笔记】NO.2人工智能的发展

目录 一、人工智能的发展里程碑 二、当前人工智能的发展特点 1.人工智能进入高速发展阶段 2.人工智能元年 三、人工智能高速发展的三大引擎 1.算法突破 2.算力飞跃 3.数据井喷 四、AI的机遇 五、AI人才的缺口 六、行业AI 人工智能算法&#xff0c;万物互联&#xff…

十大排序算法中的插入排序和希尔排序

文章目录 &#x1f412;个人主页&#x1f3c5;算法思维框架&#x1f4d6;前言&#xff1a; &#x1f380;插入排序 时间复杂度O(n^2)&#x1f387;1. 算法步骤思想&#x1f387;2.动画实现&#x1f387; 3.代码实现 &#x1f380;希尔排序 时间复杂度O(n*logn~n^2)希尔排序的设…

人工智能Keras图像分类器(CNN卷积神经网络的图片识别篇)

上期文章我们分享了人工智能Keras图像分类器(CNN卷积神经网络的图片识别的训练模型),本期我们使用预训练模型对图片进行识别:Keras CNN卷积神经网络模型训练 导入第三方库 from keras.preprocessing.image import img_to_array from keras.models import load_model impor…

用Java写一个飞翔的小鸟

目录 在 App包创建以下类 GameApp类 main包 Barrier 类 Bird 类 Cloud 类 GameBackGround 类 GameBarrierLayer 类 GameFrame 类 GameTime 类 util包 Constant 类 GameUtil 类 游戏运行结果如下&#xff1a; 碰到柱子就结束游戏 在 App包创建以下类 GameApp类 p…

matlab使用plot画图坐标轴上的导数速度一点和加速度两点如何显示

一、背景 在使用matlab中的plot函数画图时&#xff0c;有时需要在坐标轴上显示一个点的导数项&#xff0c;如横坐标是时间&#xff0c;纵坐标是速度&#xff0c;也就是位置的导数 y ˙ \dot y y˙​&#xff0c;如下图所示&#xff0c;这在matlab如何操作呢&#xff1f; 二…

基于单片机的肺活量检测系统(论文+源码)

1.系统设计 在基于单片机的肺活量检测系统中&#xff0c;在硬件上整个系统通过利用主控制器STC89C52单片机来实现对整个系统进行控制的功能&#xff0c;通过采用LCD1602实现实时液晶显示数据的功能&#xff0c;通过肺活量传感器XGZP6847ADC0832实现监测肺活量的工作&#xff0…

【从浅识到熟知Linux】基本指令之date和cal

&#x1f388;归属专栏&#xff1a;从浅学到熟知Linux &#x1f697;个人主页&#xff1a;Jammingpro &#x1f41f;每日一句&#xff1a;一篇又一篇&#xff0c;学写越上头。好像真的上头了~~ 文章前言&#xff1a;本文介绍date和cal指令用法并给出示例和截图。 文章目录 date…

医学检验科LIS系统源码 样本采集、检验、分析

LIS把检验、检疫、放免、细菌微生物及科研使用的各类分析仪器&#xff0c;通过计算机联网&#xff0c;实现各类仪器数据结果的实时自动接收、自动控制及综合分析&#xff1b;系统可与条码设备配套使用&#xff0c;自动生成条码&#xff0c;减少实验室信息传递中人为因素导致的误…

中通单号查询,中通快递物流查询,将途经指定城市的单号筛选出来

批量查询中通快递单号的物流信息&#xff0c;并将途经指定城市的单号筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#x…

【LeetCode:1457. 二叉树中的伪回文路径 | 二叉树 + DFS +回文数】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【unity实战】实现一个放置3d物品建造装修系统(附项目源码)

文章目录 最终效果前言绘制开始场景素材开始放置旋转物体扩展优化1. 绘制地图边界&#xff0c;确保放置物品在指定区域内工作2. 让模型所占面积大小更加准确3. 隐藏白色瓦片指示区域 最终效果其他源码参考完结 最终效果 前言 其实3d物品建造装修系统之前就已经做过了&#xff…

论文阅读——DDeP(cvpr2023)

分割标签耗时且贵&#xff0c;所以常常使用预训练提高分割模型标签有效性&#xff0c;反正就是&#xff0c;需要一个预训练分割模型。典型的分割模型encoder部分通过分类任务预训练&#xff0c;decoder部分参数随机初始化。作者认为这个方法次优&#xff0c;尤其标签比较少的情…

代码随想录算法训练营第四十四天|57. 爬楼梯、322.零钱兑换、279. 完全平方数

KamaCoder 57. 爬楼梯 题目链接&#xff1a;题目页面 (kamacoder.com) 这道题使用完全背包来实现&#xff0c;我们首先考虑的是总的楼梯数&#xff0c;因此dp数组大小为n 1 &#xff0c;其意义是&#xff0c;在n阶时有多少种方法爬到楼顶&#xff0c;因此&#xff0c;当前n状…

【腾讯云云上实验室-向量数据库】用向量数据库——实现高效文本检索功能

文章目录 前言Tencent Cloud VectorDB 简介Tencent Cloud VectorDB 使用实战申请腾讯云向量数据库腾讯云向量数据库使用步骤腾讯云向量数据库实现文本检索 结论和建议 前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据&#xff0c;也有部分人使用过非关…

【spring(五)】SpringMvc总结 SSM整合流程

目录 一、SpringMVC简介&#xff1a; 二、SpringMVC快速入门&#xff1a; 三、SpringMVC bean的管理&#xff1a;⭐ ①配置bean ②扫描bean 四、SpringMVC配置类&#xff1a;⭐ 五、SpringMVC 请求与响应 六、SpringMVC REST风格 七、SSM整合 异常处理&#xff1a; 八、…