快速学会使用association和collection

MyBatis之ResultMap的association和collection标签详解 MyBatis 创建时的一个思想是:数据库不可能永远是你所想或所需的那个样子。我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。而 ResultMap 就是 MyBatis 对这个问题的答案。- 用于在实例化类时,注入结果到构造方法中idArg- ID 参数;标记出作为 ID 的结果可以帮助提高整体性能arg- 将被注入到构造方法的一个普通结果id– 一个 ID 结果; 阅读详情

一对多时,在映射文件中写出它们的映射关系,这时是使用collection

<resultMap id="manMap" type="ManBean">
        <id property="manId" column="man_id"></id>
        <result property="manName" column="man_name"></result>
        <result property="manAge" column="man_age"></result>
        <result property="manGender" column="man_gender"></result>
    </resultMap>
<!-- extends 继承指定resultMap中的映射关系
    collection 专用于做集合属性中的元素对象映射关系
    property 书写集合属性的属性名 ofType 该集合属性元素的类型-->
    <resultMap id="man_car_map" type="ManBean" extends="manMap">
        <collection property="carList" ofType="CarBean">
            <id property="carId" column="car_id"></id>
            <result property="carName" column="carName"></result>
            <result property="carType" column="car_type"></result>
            <result property="carPrice" column="car_price"></result>
        </collection>
    </resultMap>

而一对一,多对一时时则使用association

<resultMap id="carMap" type="CarBean">
        <id property="carId" column="car_id"></id>
        <result property="carName" column="car_name"></result>
        <result property="carType" column="car_type"></result>
        <result property="carPrice" column="car_price"></result>
    </resultMap>

    <!-- association 用于属性对象属性中映射关系
    property 表示关联属性-书写属性名称
    javaType 表示关联属性的类型 -书写类的别名(类的全限定名 -包名+类名)-->
    <resultMap id="car_man_map" type="CarBean" extends="carMap">
        <association property="man" javaType="ManBean">
            <id property="manId" column="man_id"></id>
            <result property="manName" column="man_name"></result>
            <result property="manAge" column="man_age"></result>
            <result property="manGender" column="man_gender"></result>
        </association>
    </resultMap>

这里博主可以借一个实例来讲述它们的用法

这个项目中有两个表,一个人类实体,一个是车的实体

人类实体

public class ManBean {
    private int manID;//人的ID
    private String manName;//姓名
    private int manAge;//年龄
    private String manGender;//性别
    private ArrayList<CarBean> carList;//人拥有的汽车集合

    public ManBean() {
    }

    public ManBean( String manName, int manAge, String manGender) {

        this.manName = manName;
        this.manAge = manAge;
        this.manGender = manGender;
    }

    public int getManID() {
        return manID;
    }

    public void setManID(int manID) {
        this.manID = manID;
    }

    public String getManName() {
        return manName;
    }

    public void setManName(String manName) {
        this.manName = manName;
    }

    public int getManAge() {
        return manAge;
    }

    public void setManAge(int manAge) {
        this.manAge = manAge;
    }

    public String getManGender() {
        return manGender;
    }

    public void setManGender(String manGender) {
        this.manGender = manGender;
    }

    public ArrayList<CarBean> getCarList() {
        return carList;
    }

    public void setCarList(ArrayList<CarBean> carList) {
        this.carList = carList;
    }

    @Override
    public String toString() {
        return "ManBean{" +
                "manID=" + manID +
                ", manName='" + manName + '\'' +
                ", manAge=" + manAge +
                ", manGender='" + manGender + '\'' +
                ", carList=" + carList +
                '}';
    }
}

汽车实体

public class CarBean {
    private int carID;
    private String carName;//汽车姓名
    private String carType;//汽车类型
    private int carPrice;//汽车价格
    private ManBean man;//汽车主人


    public CarBean() {
    }

    public CarBean(String carName, String carType, int carPrice) {
        this.carName = carName;
        this.carType = carType;
        this.carPrice = carPrice;
    }

    public int getCarID() {
        return carID;
    }

    public void setCarID(int carID) {
        this.carID = carID;
    }

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getCarType() {
        return carType;
    }

    public void setCarType(String carType) {
        this.carType = carType;
    }

    public int getCarPrice() {
        return carPrice;
    }

    public void setCarPrice(int carPrice) {
        this.carPrice = carPrice;
    }

    public ManBean getMan() {
        return man;
    }

    public void setMan(ManBean man) {
        this.man = man;
    }

    @Override
    public String toString() {
        return "CarBean{" +
                "carID=" + carID +
                ", carName='" + carName + '\'' +
                ", carType='" + carType + '\'' +
                ", carPrice=" + carPrice +
                ", man=" + man +
                '}';
    }
}

dao层

ICarDao

public interface ICarDao {

    //根据人的id添加汽车集合
    void addCar(@Param("list") ArrayList<CarBean> carBeans,@Param("manID") int manID);

    //根据人的id删除他的汽车
    void delCar(@Param("manID") int manID);

    //根据人的id查询他的所有汽车
    ArrayList<CarBean> findCarsByManID(int manID);
    
    //根据汽车价格动态查询
    ArrayList<CarBean> findByTypePrice(@Param("carType") String carType,@Param("startPrice") int startPrice,@Param("endPrice") int endprice);

    //根据汽车类型和价格动态查询
    ArrayList<CarBean> findByItem(String carTypr,int startPrice,int endPrice);
    
    //根据车的id查看属于哪个人
    CarBean findCarIncludeMan(int carID);

    //根据车名分页查询
    ArrayList<CarBean> checkByCut(String carName);

}

IManDao

public interface IManDao {

    //添加一个人
    void addMan(ManBean manBean);
    
    //根据id删除一个人
    void delMan(@Param("manID") int manID);
    
    //根据人的id查询这个人的所有车
    ManBean findManIncludeCars(int manID);

    //根据id查询一个人
    ManBean findById(int manID);
    
    //根据id更改这个人的姓名和年龄
    void updateman(@Param("manID") int manID,@Param("manName") String manName,@Param("manAge") int manAge);
    
    //根据条件动态分页查询
    ArrayList<ManBean> cutList(@Param("startIndex") int startIndex, @Param("pageSize") int pageSize, @Param("manName") String manName,
                               @Param("manAge") int manAge, @Param("manGender") String manGender);
    
    //根据条件查询
    int cutcount(@Param("manName") String manName,@Param("manAge") int manAge,@Param("manGender") String manGender);

    //根据id更改人的性别
    void updateman1(@Param("manID") int manID,@Param("manGender") String manGender);
}

service层

ICarService

public interface ICarService {

    ArrayList<CarBean> findByItem(String carTypr,int startPrice,int endPrice);
    CarBean findCarIncludeMan(int carID);

    PageInfo<CarBean> checkByCut(int pageNo,String carName);

}

IManService

public interface IManService {
    //在添加公民信息时,需要将其汽车信息一并添加到数据库
    void addManIncludeCar( ManBean manBean, ArrayList<CarBean> carBeans);

    void delMan(int manID);

    ManBean findManIncludeCars(int manID);
    CutPageBean<ManBean> findByCut(@Param("pageNO") int pageNO, @Param("manName") String manName, @Param("manAge") int manAge, @Param("manGender") String manGender);

    void updateMan(@Param("manID") int manID,@Param("manGender") String manGender);

}

它们的实现类

ManServiceImpl

public class ManServiceImpl implements IManService {
    private IManDao dao = new ManDaoImpl();
    private ICarDao carDao = new CarDaoImpl();

    @Override
    public void addManIncludeCar(ManBean manBean, ArrayList<CarBean> carBeans) {
        dao.addMan(manBean);
        carDao.addCar(carBeans,manBean.getManID());

    }

    @Override
    public void delMan(int manID) {
        carDao.delCar(manID);
        dao.delMan(manID);
    }

    @Override
    public ManBean findManIncludeCars(int manID) {
        ManBean manBean = dao.findById(manID);
        carDao.findCarsByManID(manID);
        return manBean;
    }

    @Override
    public CutPageBean<ManBean> findByCut(int pageNO, String manName, int manAge, String manGender) {
        CutPageBean<ManBean> cutPageBean = new CutPageBean<>();
        ArrayList<ManBean> list = dao.cutList((pageNO-1)*CutPageBean.PAGE_SISE,CutPageBean.PAGE_SISE,manName,manAge,manGender);
        int count = dao.cutcount(manName,manAge,manGender);
        cutPageBean.setCount(count);
        cutPageBean.setList(list);

        return cutPageBean;
    }

    @Override
    public void updateMan(int manID, String manGender) {
        dao.updateman1(manID,manGender);
    }
}

CarServiceImpl

public class CarServiceImpl implements ICarService {
    private ICarDao dao;
    @Override
    public ArrayList<CarBean> findByItem(String carTypr, int startPrice, int endPrice) {
        return null;
    }

    @Override
    public CarBean findCarIncludeMan(int carID) {
        return null;
    }

    @Override
    public PageInfo<CarBean> checkByCut(int pageNo, String carName) {
        PageHelper.startPage(pageNo,3);
        PageInfo<CarBean> pageInfo = PageInfo.of(dao.checkByCut(carName));

        return pageInfo;
    }
    
}

它们的映射文件

ICarDao.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.project.dao.ICarDao">
    <insert id="addCar">

        insert into t_car(t_carname,t_cartype,t_carprice,fk_manid) values
        <foreach collection="list" item="car" separator=",">
            (#{car.carName},#{car.carType},#{car.carPrice},#{manID})
        </foreach>

</insert>

    <delete id="delCar">
        delete from t_car where fk_manid=#{manID}
    </delete>

    <resultMap id="carMap" type="CarBean">
        <id property="carID" column="pk_carid"></id>
        <result property="carName" column="t_carname"></result>
        <result property="carType" column="t_cartype"></result>
        <result property="carPrice" column="t_carprice"></result>
    </resultMap>

    <resultMap id="car_man_map" type="CarBean" extends="carMap">
<!--       property表示属性名称在carBean里面  javaTYPE写关联属性的类型  一般写类的别名(类的全限定名)-->
        <association property="man" javaType="ManBean">
            <id property="manID" column="pk_manid"></id>
            <result property="manName" column="t_manname"></result>
            <result property="manAge" column="t_manage"></result>
            <result property="manGender" column="t_mangender"></result>
        </association>
    </resultMap>
    <select id="findCarsByManID" resultMap="carMap">
      select * from t_car where fk_manid = #{manID}
    </select>

    <select id="findByTypePrice" resultMap="carMap">
        select * from t_car where 1=1
        <if test="carType != null and carType !=''">
            and t_carType like "%"#{carType}"%"
        </if>
        <if test="startPrice != 0">
            and t_carprice >=#{startPrice}
        </if>
        <if test="endPrice != 0">
            <![CDATA[and t_carprice <=#{endPrice}]]>
        </if>
    </select>

<!--当我们需要查找一辆车属于哪个主人的时候属于一对一,这时我们就可以选用association-->

    <select id="findCarIncludeMan" resultMap="car_man_map">
        select c.*,m.*  from t_car c left join t_human m on c.fk_manid = m.pk_manid
        where c.pk_carid=#{carID}
    </select>

    <select id="checkByCut" resultMap="carMap">
        select * from t_car where t_carname like "%"#{carName}"%"
    </select>
</mapper>

IManDao.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.project.dao.IManDao">

<!--    keyproperty可以绑定bean里的主键    usegeneratedKeys  使用数据库自动增长列,并将最最新的数据主键值赋值给绑定的主键属性-->
    <insert id="addMan" keyProperty="manID" useGeneratedKeys="true">
        insert  into t_human(t_manname,t_manage,t_mangender)
                            values (#{manName},#{manAge},#{manGender})
    </insert>

    <delete id="delMan">
      delete from t_human where pk_manid=#{manID}
    </delete>

    <resultMap id="manMap" type="ManBean">
        <id property="manID" column="pk_manid"></id>
        <result property="manName" column="t_manname"></result>
        <result property="manAge" column="t_manage"></result>
        <result property="manGender" column="t_mangender"></result>
    </resultMap>


    <resultMap id="man_car_map" type="ManBean" extends="manMap">
        <collection property="carList" ofType="CarBean">
            <id property="carID" column="pk_carid"></id>
            <result property="carName" column="t_carname"></result>
            <result property="carType" column="t_cartype"></result>
            <result property="carPrice" column="t_carprice"></result>
        </collection>

    </resultMap>

<!--    当我们想要查找一个人拥有多少辆车时,这种情况属于一对多,这时我们就需要使用collection-->
    <select id="findManIncludeCars" resultMap="man_car_map">
        select m.*,c.* from t_human m left join t_car c on m.pk_manid = c.fk_manid
        where  m.pk_manid = #{manID}
    </select>

    <select id="findById" resultMap="manMap">
        select * from t_human
        where  pk_manid = #{manID}
    </select>

    <update id="updateman">
        update t_human set t_manname=#{manName},t_manage=#{manAge} where pk_manid = #{manID}
    </update>


    <select id="cutList" resultMap="manMap">
        select * from t_human where 1=1
        <include refid="dySql"></include>
        limit #{startIndex},#{pageSize}
    </select>

    <!--    include  引用sql语句块  用它的id引用-->
    <select id="cutcount" resultType="int">
        select count(*)  from t_human where 1=1
        <include refid="dySql"></include>

    </select>

    <!--    用于封装可重用的代码-->
    <sql id="dySql">
        <if test="manName != null and manName !=''">
            and t_manname like "%"#{manName}"%"
        </if>
        <if test="manAge != 0">
            and t_manage >=#{manAge}
        </if>
        <if test="manAge != 0">
            <![CDATA[and t_manage <=#{manAge}]]>
        </if>
        <if test="manGender != null and manGender != ''">
            and t_mangender like "%"#{manGender}"%"
        </if>
    </sql>

    <update id="updateman1">
        update t_human set t_mangender=#{manGender} where pk_manid = #{manID}
    </update>
</mapper>

当然需要测试的话还需要配置文件放在resource目录下

mybatis.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration  
	PUBLIC	"-//mybatis.org//DTD Config 3.0//EN"  
	"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>

	<typeAliases>
		<package name="com.project.bean"/>
	</typeAliases>

	<!--  分页插件-->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<property name="helperDialect" value="mysql"/>
		</plugin>
	</plugins>

   <environments default="dev">  

        <environment id="dev">  

            <transactionManager type="JDBC"></transactionManager>  

            <dataSource type="POOLED">  
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:端口号/数据库名称?characterEncoding=utf-8&amp;allowMultiQueries=true"/>
				<property name="username" value="用户名"/>
				<property name="password" value="密码"/>
            </dataSource>  

        </environment>  

    </environments>  
	
	<mappers>
<!--		<mapper resource="mapper/ManBean.xml"/>-->
		<package name="com.project.dao"/>
	</mappers>
</configuration>  

测试类如下

public class TestService {
    public static void main(String[] args) {
//        IDepartService service = new DepartServiceImpl();
//        System.out.println(service.findByCutItem(2,null,null,null));


        IManService manService = new ManServiceImpl();
//        ManBean manBean = new ManBean();
//        ArrayList<CarBean> carBeans = new ArrayList<>();
//        carBeans.add(new CarBean("奥迪","suv",250000));
//        carBeans.add(new CarBean("宝马","小轿车",300000));
//        carBeans.add(new CarBean("特斯拉","suv",280000));
//
//        manService.addManIncludeCar(manBean,carBeans);

//        manService.delMan(manBean.getManID());
//        manService.findManIncludeCars(manBean.getManID());
//        manService.findByCut(1,null,0,null);
        
//        manService.updateMan(17,"女");


        ICarService carService = new CarServiceImpl();
        System.out.println(carService.checkByCut(1,"马"));
    }
}

总结一下就是一对一,多对一时使用association

一对多时使用collection

这周的画在这里啦  还没有涂完

 

MyBatis深度解析:从核心原理到动态SQL与性能优化实战 在Java持久层开发中,ORM框架是连接应用与数据库的关键技术,它通过对象关系映射简化了数据操作。其核心原理在于将Java对象与数据库表进行映射,自动处理SQL生成、参数绑定和结果集转换,从而提升开发效率并降低直接使用JDBC的复杂度。这一技术价值在于平衡了开发便捷性与对SQL的掌控力,尤其适用于需要复杂查询和高性能调优的企业级应用场景。本文聚焦于半自动ORM框架MyBatis,深入探讨其通过动态SQL标签(如<if>、<foreach>)灵活构建查询,以及利用一级缓存和二级缓存机制进行性能优化的具体实践, 阅读详情

相关推荐

具身智能【2026-01】:Being-H0.5【VLA + Flow Matching】【MoT+MoE架构】【UniHand2.0数据集:4 亿个样本/35000小时 】

BeingBeyond Teamhttps://research.beingbeyond.com/being-h05Real-World Deployment Figure 1: Being-H0.5 at a Glance. We scale human-centric robot learning with Being-H0.5 toward cross-embodiment generalization. We introduce UniHand-2.0, a large-scale corpus

u013250861的博客 251

collection和association的区别

collection和association的使用区别 关联-association 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ private Card card_one; private List<Card> card_many; } 在映射card_one属性时用association标签, 映射card_many时用collection标签. 所以association是用

忘忧的博客 9030

WAM-2026-06:Kairos【骨架:4B VideoDiT;VLM:Qwen3.5-2B;原生MoT双DiT+FM;数据:数百万小时开放视频+10万小时人类数据;形态:单/双臂+灵巧手+人形】

Learning, Maintaining, and Deploying Control-Sufficient World States Kairos Team学习、维护与部署控制充分的世界状态 Kairos TeamWorld models are becoming a central substrate for Physical AI, yet their current development is differentiating across representational, generative

u013250861的博客 199

mybatis中<association> 和 <collection>

association用于配置一对一的关联关系,表示两个对象之间的关系是一对一的。例如,一个订单对象关联一个用户对象。 collection用于配置一对多的关联关系,表示一个对象关联多个对象。例如,一个部门对象关联多个员工对象。

tanxinji的博客 4908

Mybatis中collection和association的使用区别详解

主要介绍了Mybatis中collection和association的使用区别详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

保姆级教程:用海思PQTool搞定ISP图像调试,从参数读取到固件烧录全流程

本文提供海思PQTool的ISP图像调试全流程指南,从参数读取、实时调试到固件烧录,涵盖环境配置、核心功能解析、参数固化及生产部署。通过实战案例和避坑指南,帮助开发者高效提升图像质量,适用于海思开发板的ISP调试与优化。

weixin_30872337的博客 281

mybatis的association以及collection的用法

注意,只有在做select查询时才会用到这两个标签,都有三种用法,且用法类似。先看如下代码(省略set、get方法): 以上是实体类、dao层的设计以及在UserDao.xml中queryById方法的sql语句的编写,因为不论用association的哪种方式,sql语句都是一样的写,不同的只是userMap的写法,所以这里先给出这段代码。User询Card是一对一关系,在数据库中,tb_user表通过外键card_id关联tb_card表。下面分别用association的三种用法来实现queryBy

justleavel的博客 5476

ADS许可证配置全攻略:从破解文件放置到环境变量设置(实测有效版)

本文详细介绍了ADS许可证配置的全流程,包括环境准备、全新安装、破解文件部署和环境变量设置等关键步骤。针对常见的安装和授权问题,提供了实测有效的解决方案,帮助工程师快速完成ADS的配置与优化。

websocket5live的博客 379

Mybatis快速入门(3)

帮助新手快速学习Mybatis

m0_62946761的博客 7780

DFX从芯片到系统:可制造性、可测试性与可靠性设计实战指南

DFX(Design for eXcellence)是一套面向产品全生命周期的设计方法论,涵盖可制造性(DFM)、可测试性(DFT)、可靠性(DFR)等维度。其核心原理是将制造、测试、维护等环节的约束前置到设计阶段,从而降低流片与量产风险。在芯片与系统硬件领域,DFX不仅是提升良率与测试效率的关键手段,更是保障车规、工控等严苛场景下长期稳定运行的基础。从芯片物理实现到PCB布局,再到系统级散热与维护设计,DFX的落地需要工具链、流程闸门与跨部门协作的体系化支撑。本文基于实际项目经验,分享DFX从设计决策到工

weixin_32349093的博客 350

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 211

MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

6.1 高级结果映射 在关系型数据库中,我们经常要处理一对一、一对多的关系。 在 RBAC 权限系统中还存在着一个用户拥有多个角色、一个角色拥有多个权限这样复杂的嵌套关系。使用已经学会的 MyBatis 技巧都可以轻松地解决这种复杂的关系。在面对这种关系的时候,我们可能要写多个方法分别查询这些数据,然后再组合到一起。这种处理方式特别适合用在大型系统上,由于分库分表,这种用法可以减少表之间的关联查询,方便系统进行扩展。 但是在一般的企业级应用中,使用 MyBatis 的高级结果映射便可以轻松地处理这..

随风而逝的博客 442

Oracle EBS 中美国销售税的实现方式

Oracle EBS通过eBTax引擎实现美国销售税管理,需配置税务管辖区、税率及规则等要素,基于收货地址和商品分类计税。系统支持免税交易和使用税处理,但因美国税率复杂多变,建议集成Vertex等第三方服务自动更新税率。关键配置包括创建USSales Tax制度、维护地点层级及物料税务分类,同时需管理客户免税证书。对于跨国业务,系统也支持欧盟VAT等其他国家税制配置。

金牌架构师 296

Tilt 实战指南:K8s 微服务开发环境里,改完代码 4 步自动上线

改完一个接口,你还要手动 `docker build`、推镜像、`kubectl apply`、等滚动更新、`port-forward` 验证——微服务一多,这套动作一天要重复几十遍。Tilt 把这条链路收进一条 `tilt up` 命令:你在项目里写一个 Tiltfile 定义环境,之后保存代码,Tilt 就自动监听、重建镜像、部署并转发端口,省掉每次手动重新部署。 ## 它是谁 Tilt

gitblog_00615的博客 363

OpenCV计算机视觉实战(12)——图像金字塔与特征缩放

图像金字塔技术通过对原始图像按不同分辨率进行多层次表示,不仅能提升计算效率,还能为图像融合、检测与识别提供多尺度特征。高斯金字塔 (Gaussian Pyramid) 用于构建多级低通图像,拉普拉斯金字塔 (Laplacian Pyramid) 则提取各层之间的细节信息。本节将深入介绍如何使用 OpenCV 构建高斯与拉普拉斯金字塔,并以经典的图像融合案例,展示图像金字塔在特征缩放与融合中的强大应用。

qq_30167691的博客 1404

rk3568 修改开机动画

bootanimation.zip是一个Android设备启动时播放的动画文件,它包含了一系列的图片和描述文件,用于描述动画的播放顺序和持续时间。

weixin_35723192的博客 2729

基于SpringBoot+Vue3的健身器材交易小程序商城系统详解

在电商系统开发中,小程序商城与后台管理系统的联动是常见的技术形态。SpringBoot作为后端服务框架,以轻量配置和生态整合能力支撑了RESTful API、数据库访问与权限控制;Vue3配合Element Plus可用于搭建运营管理后台;而微信小程序则为C端用户提供商品浏览与交易入口。三者结合能够形成用户、商品、订单、购物车等核心业务的完整闭环,适合作为课程设计、毕业设计或中小型器材电商平台二次开发的基础。在实际部署过程中,需要关注MySQL初始化、后端接口配置、管理端代理设置以及小程序开发者工具的本地调

weixin_34377919的博客 399

PDAF相位对焦原理

pdaf光路图

camerall 1万+

专业 英语

计算机、数学、机械等专业的专业英语词汇

Edward2022的博客 2950

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringBoot艺术展览导览系统设计与实现全解析

在Java后端开发领域,SpringBoot凭借“约定优于配置”的设计理念,已成为构建企业级应用的主流框架。它内嵌Tomcat、自动配置核心组件,大幅降低了项目搭建与部署的复杂度,让开发者能更专注于业务逻辑实现。结合MyBatis与MySQL这一经典数据持久层组合,能够快速构建高内聚、低耦合的系统架构。此类技术栈广泛应用于各类管理系统的开发,尤其在文旅数字化场景中,构建线上导览与预约平台已成为行业趋势。本文围绕一套前后端分离的艺术展览导览系统,从业务设计、数据库建模到核心功能模块实现进行全面解析,涵盖用户认

weixin_34005090的博客 315

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

AI Agent记忆系统设计:从RAG到涟漪式用户心智建模

AI Agent的记忆能力,本质是解决跨会话一致性缺失这一基础交互问题。传统RAG仅提供被动检索,而真正有效的记忆需模拟人类‘主动回忆’机制——通过状态层、事件层与模型层的分层架构,实现用户身份锚点、动态偏好与硬性约束的轻量化建模。结合ripplemem提出的涟漪式关联思想,将记忆单元按类型、时效与作用域标准化,并以语义+时序加权触发,显著提升任务完成率与人格连续性。该方案已落地医疗、电商、企业知识等场景,兼顾GDPR合规与低延迟要求,是LangChain/LangGraph开发者构建生产级Agent的核心

weixin_34214500的博客 461

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MyBatis读取数据库返回前端全链路详解:从Mapper映射到JSON序列化

在Web开发中,数据从数据库到前端页面的流转涉及SQL查询、ORM映射、接口封装与前端渲染等多个环节。MyBatis作为轻量级持久层框架,通过XML或注解将结果集自动映射为Java对象,是Java后端开发者必须掌握的核心技能。理解Mapper接口与XML的对应关系、`#{}`预编译机制、下划线转驼峰配置以及一级/二级缓存的作用边界,能有效规避脏读和无效查询等隐患。结合Spring Boot的自动配置和统一响应体设计,可构建清晰的三层架构,并通过fetch请求让前端轻松获取JSON数据。本文以用户信息查询为案

weixin_33853827的博客 292

association标签的用法以及注意事项

Mybatis的association标签简介: mybatis进行多表查询时会用上association标签,它的属性包括property,column,javaType等,它的作用是让实体类对象与数据库表的列相互对应,以便让mybatis可以进行多表查询。 Mybatis的association标签用法: association标签一般放在resultMap标签内部,然后配置标签的属性,property属性为实体类的属性名,column属性为数据库表的列名,javaType属性为封装的实体类对象名,如:

BUG粉碎机 1万+

对与association和collection的理解:

对与association和collection的理解:我们经常会遇到两组对象一对多或者多对一的关系。

啊阿啊啊啊杨的博客 1427

<collection> 和 <association>的详细用法(附详细代码解析)

标签用于一对一映射,将Address映射到User对象的address属性中。标签用于一对多映射,将Order列表映射到User对象的orders属性中。这两个标签在 MyBatis 的复杂查询和结果集映射中非常有用,能有效地将关系型数据库的数据转换为 Java 对象,从而简化开发工作。

2302_78571314的博客 1895

mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用

mybatis中一对多,多对一的映射处理,collection和association标签的使用,分布查询级联查询。association:处理多对一的映射关系。association标签的结构:, property:需要处理多对一的映射关系的属性名, javaType:该属性的类型.collection:用来处理一对多的映射系,property:需要处理一对多的映射关系的属性名,ofType:表示该属性对应的集合中存储的数据的类型.

m0_63622279的博客 1919
上一篇: 单例模式的四种实现方式(饿汉模式、懒汉模式、静态内部类、枚举类)
下一篇: 快来学Vue的一些基础操作!
LINchuana
博客等级 码龄8年 456粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值