认识Mybatis的关联关系映射,灵活关联表对象之间的关系

news2024/11/10 8:29:08

                              

目录    

一、概述

( 1 )  介绍

( 2 )  关联关系映射

( 3 ) 关联讲述

二、一对一关联映射

2.1 数据库创建

2.2 配置文件 

2.3 代码生成

2.4 编写测试

三、一对多关联映射

四 、多对多关联映射

给我们带来的收获


一、概述

( 1 )  介绍

关联关系映射是指在数据库中,通过定义表之间的关联关系,将多个表的数据进行关联查询和映射的过程。通过关联关系映射,可以方便地获取相关联表的数据,并将其映射到对应的实体类中。

Mybatis是一种Java持久层框架,它提供了一种将数据库表和Java对象之间进行关联关系映射的方式。在Mybatis中,可以通过配置文件或注解的方式,定义表之间的关联关系,并将查询结果映射到对应的Java对象中。通过Mybatis的关联关系映射,可以方便地进行复杂的数据库查询操作。

在Mybatis中,可以通过配置映射文件来实现关联关系的映射。通过定义实体类和映射文件,可以将数据库中的多个表进行关联查询,并将查询结果映射到实体类的属性上。

在进行数据库查询操作时,通过关联查询获取到关联表中的相关数据,并将其映射到实体类中的关联属性上。

总结来说,关联关系映射是指通过配置映射文件,将数据库中的关联表进行关联查询,并将查询结果映射到实体类的关联属性上。通过扩展关联关系映射,可以方便地进行复杂的数据库查询操作,提高查询效率和简化数据操作的代码。

( 2 )  关联关系映射

关联关系映射在Mybatis中主要通过三种方式实现:一对一关联和一对多关联及多对多关联。

一对一关联:
在一对一关联中,两个表之间存在一对一的关系,例如学生表和身份证表,一个学生只有一个身份证,而一个身份证也只属于一个学生。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<association>标签来定义关联关系。通过配置映射关系,可以查询到学生表和身份证表的数据,并将其映射到对应的实体类中。

一对多关联:
在一对多关联中,两个表之间存在一对多的关系,例如部门表和员工表,一个部门可以有多个员工,而一个员工只属于一个部门。在Mybatis中,可以通过在实体类中定义关联属性,然后在映射文件中使用<collection>标签来定义关联关系。通过配置映射关系,可以查询到部门表和员工表的数据,并将其映射到对应的实体类中。

多对多关联:

是指两个表之间存在多对多的关联关系,即一个表的一条记录可以对应另一个表的多条记录,反之亦然。在数据库中,多对多关系通常需要通过中间表来实现。

在Mybatis中,可以通过定义中间表来映射多对多关系。假设有两个表,学生表和课程表,一个学生可以选择多门课程,而一门课程也可以被多个学生选择。为了映射这种多对多关系,需要创建一个中间表,例如选课表,用来记录学生和课程的关联关系。

( 3 ) 关联讲述

在关联关系映射中,还可以使用嵌套查询和延迟加载等技术来优化查询性能。嵌套查询是指在查询主表数据时,同时查询关联表的数据;延迟加载是指在需要使用关联数据时才进行查询,避免一次性查询所有关联数据。这些技术可以根据具体需求进行配置和使用。

在进行关联关系映射时,可以使用不同的标签来配置不同的关联关系,如<association>标签用于一对一关联,<collection>标签用于一对多关联。通过配置映射关系,可以根据具体需求查询到相关的数据,并将其映射到实体类中。

总结来说,关联关系映射是Mybatis中非常重要的特性之一,关联关系映射是指通过配置映射文件,将数据库中的关联表进行关联查询,并将查询结果映射到实体类的关联属性上。通过扩展关联关系映射,可以方便地进行复杂的数据库查询操作,也方便地进行表之间的关联查询和映射操作,提高了数据查询和操作的灵活性和效率及简化数据操作的代码。

二、一对一关联映射

这里进行一对一关联关系实例演示

这里的代码基于我博客文章中的 : Spring与Mybatis集成且Aop整合

2.1 数据库创建

创建名为 t_hibernate_book (书籍表) 数据表

创建名为 t_hibernate_book_category (书籍类别表) 数据表

其中名为 bid 的属性字段为 t_hibernate_book (书籍表) 的 bid(主键) 的外键

其中名为 cid 的属性字段为 t_hibernate_category (类别表) 的 category_id (主键) 的外键

创建名为 t_hibernate_category (类别表) 数据表

 创建名为 t_hibernate_order (订单表) 数据表

 创建名为 t_hibernate_order_item (订单详情表) 数据表

其中名为 order_id 的属性字段为 t_hibernate_order (订单表) 的 oid (主键) 的外键

2.2 配置文件 

修改名为 generatorConfig.xml 的 配置文件,修改后的所有代码如下 : 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!-- 引入配置文件 -->
    <properties resource="jdbc.properties"/>

    <!--指定数据库jdbc驱动jar包的位置-->
    <classPathEntry location="D:\\temp\\mvn_repository\\mysql\\mysql-connector-java\\5.1.44\\mysql-connector-java-5.1.44.jar"/>

    <!-- 一个数据库一个context -->
    <context id="infoGuardian">
        <!-- 注释 -->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
            <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
        </commentGenerator>

        <!-- jdbc连接 -->
        <jdbcConnection driverClass="${jdbc.driver}"
                        connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>

        <!-- 类型转换 -->
        <javaTypeResolver>
            <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 01 指定javaBean生成的位置 -->
        <!-- targetPackage:指定生成的model生成所在的包名 -->
        <!-- targetProject:指定在该项目下所在的路径  -->
        <javaModelGenerator targetPackage="com.CloudJun.model"
                            targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否对model添加构造函数 -->
            <property name="constructorBased" value="true"/>
            <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
            <property name="trimStrings" value="false"/>
            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!-- 02 指定sql映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="com.CloudJun.mapper"
                         targetProject="src/main/java">
            <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 03 生成XxxMapper接口 -->
        <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
        <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
        <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
        <javaClientGenerator targetPackage="com.CloudJun.mapper"
                             targetProject="src/main/java" type="XMLMAPPER">
            <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 配置表信息 -->
        <!-- schema即为数据库名 -->
        <!-- tableName为对应的数据库表 -->
        <!-- domainObjectName是要生成的实体类 -->
        <!-- enable*ByExample是否生成 example类 -->
        <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
        <!--enableCountByExample="false" enableDeleteByExample="false"-->
        <!--enableSelectByExample="false" enableUpdateByExample="false">-->
        <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
        <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
        <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
        <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
        <!--</table>-->

        <table schema="" tableName="t_hibernate_book" domainObjectName="HBook"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
        </table>

        <table schema="" tableName="t_hibernate_category" domainObjectName="Category"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
        </table>

        <table schema="" tableName="t_hibernate_book_category" domainObjectName="HBookCategory"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
        </table>

        <table schema="" tableName="t_hibernate_order" domainObjectName="Order"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
        </table>

        <table schema="" tableName="t_hibernate_order_item" domainObjectName="OrderItem"
               enableCountByExample="false" enableDeleteByExample="false"
               enableSelectByExample="false" enableUpdateByExample="false">
        </table>


    </context>
</generatorConfiguration>

2.3 代码生成

配置好 generatorConfig.xml 的配置文件后进行,自动生成代码,操作如图 : 

 代码生成后就会出现以下的实体类对象,配置文件,接口类,如图 : 

 

                            然后将每个实体类对象里面重写一下toString()方法

 2.4 编写测试

创建一个 名为 OrderItemVo 的类,继承OrderItem类,及属性有Order对象

package com.CloudJun.vo;

import com.CloudJun.model.Order;
import com.CloudJun.model.OrderItem;

/**
 * @author CloudJun
 * @create  2023-08-26 15:54
 */
public class OrderItemVo extends OrderItem {

    private Order order;

    public Order getOrder() {
        return order;
    }
    public void setOrder(Order order) {
        this.order = order;
    }

}

在自动生成的OrderItemMapper.xml配置文件中进行增加以下配置

<resultMap id="OrderItemMap" type="com.CloudJun.vo.OrderItemVo" >
  <result column="order_item_id" property="orderItemId" ></result>
  <result column="product_id" property="productId" ></result>
  <result column="quantity" property="quantity" ></result>
  <result column="oid" property="oid" ></result>
  <association property="order" javaType="com.CloudJun.model.Order">
    <result column="order_id" property="orderId" ></result>
    <result column="order_no" property="orderNo" ></result>
  </association>
</resultMap>
<select id="selectByBiid" resultMap="OrderItemMap" parameterType="java.lang.Integer" >
  SELECT * FROM
  t_hibernate_order o ,
  t_hibernate_order_item oi
  WHERE o.order_id = oi.oid
  AND oi.order_item_id = #{oiid}
</select>

在自动生成的 OrderItemMapper 接口中进行增加以下代码

 OrderItemVo selectByBiid(@Param("oiid") Integer oiid);

创建一个接口名为 : OrderItemBiz 接口

package com.CloudJun.biz;

import com.CloudJun.model.OrderItem;
import com.CloudJun.vo.OrderItemVo;
import org.apache.ibatis.annotations.Param;

public interface OrderItemBiz {

    OrderItemVo selectByBiid(Integer oiid);

}

实现以上创建的接口,创建一个实现了名为 OrderItemBizImpl

package com.CloudJun.biz.impl;

import com.CloudJun.biz.OrderItemBiz;
import com.CloudJun.mapper.OrderItemMapper;
import com.CloudJun.vo.OrderItemVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author CloudJun
 * @create  2023-08-26 16:23
 */
@Service
public class OrderItemBizImpl implements OrderItemBiz {

    @Autowired
    private OrderItemMapper orderItemMapper;

    @Override
    public OrderItemVo selectByBiid(Integer oiid) {
        return orderItemMapper.selectByBiid(oiid);
    }
}

创建一个测试类 名为 Test01 ,用来进行方法测试

package com.CloudJun.biz.impl;


import com.CloudJun.biz.OrderBiz;
import com.CloudJun.biz.OrderItemBiz;
import com.CloudJun.vo.OrderItemVo;
import com.CloudJun.vo.OrderVo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @author CloudJun
 * @create  2023-08-26 15:03
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-context.xml"})
public class Test01 {

    
    @Autowired
    private OrderItemBiz orderItemBiz;

    @Before
    public void setUp() throws Exception {
    }
    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void selectByBiid() {
        OrderItemVo orderItemVo = orderItemBiz.selectByBiid(27);
        System.out.println(orderItemVo);
        System.out.println(orderItemVo.getOrder());
    }

}

执行测试类中selectByBiid()的方法,结果如图 : 

三、一对多关联映射

创建一个 名为 OrdeVo 的类,继承Order类,及属性有List<OrderItem>集合

用来存储查询到的OrderItem对象,因为是一对多所有查询出有多个对象

package com.CloudJun.vo;

import com.CloudJun.model.Order;
import com.CloudJun.model.OrderItem;
import com.CloudJun.utils.PageBean;

import java.util.ArrayList;
import java.util.List;

/**
 * @author CloudJun
 * @create  2023-08-26 14:54
 */
public class OrderVo extends Order {

    private List<OrderItem> orderItems = new ArrayList<OrderItem>();

    public List<OrderItem> getOrderItems() {
        return orderItems;
    }
    public void setOrderItems(List<OrderItem> orderItems) {
        this.orderItems = orderItems;
    }

}

在自动生成的 OrderMapper.xml 配置文件中增加以下配置

  <resultMap id="OrderVoMap" type="com.CloudJun.vo.OrderVo">
      <result column="order_id" property="orderId" ></result>
      <result column="order_no" property="orderNo" ></result>
    <collection property="orderItems" ofType="com.CloudJun.model.OrderItem">
      <result column="order_item_id" property="orderItemId" ></result>
      <result column="product_id" property="productId" ></result>
      <result column="quantity" property="quantity" ></result>
      <result column="oid" property="oid" ></result>
    </collection>
  </resultMap>
  <select id="selectByOid" resultMap="OrderVoMap" parameterType="java.lang.Integer" >
     SELECT * FROM
     t_hibernate_order o ,
     t_hibernate_order_item oi
     WHERE o.order_id = oi.oid
      AND o.order_id = #{oid}
  </select>

在自动生成的 OrderMapper接口中进行增加以下代码

OrderVo selectByOid(@Param("oid") Integer oid);

创建一个接口名为 : OrderBiz 接口

package com.CloudJun.biz;

import com.CloudJun.vo.OrderVo;

public interface OrderBiz {

    OrderVo selectByOid(Integer oid);
    
}

在实现以上 OrderBiz 接口,创建一个实现类,名为 OrderBizImpl 

package com.CloudJun.biz.impl;

import com.CloudJun.biz.OrderBiz;
import com.CloudJun.mapper.OrderMapper;
import com.CloudJun.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author CloudJun
 * @create  2023-08-26 15:06
 */
@Service
public class OrderBizImpl implements OrderBiz {

    @Autowired
    private OrderMapper orderMapper;

    @Override
    public OrderVo selectByOid(Integer oid) {
        return orderMapper.selectByOid(oid);
    }
}

在测试类( Test01 )中增加以下测试方法及接口

    @Autowired
    private OrderBiz orderBiz;

    @Test
    public void selectByOid() {
        OrderVo orderVo = orderBiz.selectByOid(7);
        System.out.println(orderVo);
        orderVo.getOrderItems().forEach(System.out::println);
    }

执行其中的方法进行测试,结果为如图  :

 

四 、多对多关联映射

在自动生成的 HBookMapper.xml 配置文件中增加以下配置

  <resultMap id="HBookVoMap" type="com.CloudJun.vo.HBookVo" >
    <result column="book_id" property="bookId"></result>
    <result column="book_name" property="bookName"></result>
    <result column="price" property="price"></result>
    <collection property="categories" ofType="com.CloudJun.model.Category">
      <result column="category_id" property="categoryId"></result>
      <result column="category_name" property="categoryName"></result>
    </collection>
  </resultMap>

  <select id="selectByBookId" resultMap="HBookVoMap" parameterType="java.lang.Integer" >
    SELECT * FROM
    t_hibernate_book b,
    t_hibernate_book_category bc ,
    t_hibernate_category c
    WHERE b.book_id = bc.bid
    AND bc.cid = c.category_id
    AND b.book_id = #{bid}
  </select>

在自动生成的 HBookMapper 接口 中增加以下方法

  HBookVo selectByBookId(@Param("bid") Integer bid);

创建一个接口名为 HBookBiz 

package com.CloudJun.biz;

import com.CloudJun.vo.HBookVo;
import org.apache.ibatis.annotations.Param;

public interface HBookBiz {

    HBookVo selectByBookId(@Param("bid") Integer bid);

}

在实现以上 HBookBiz 接口,创建一个实现类,名为 HBookBizImpl 

package com.CloudJun.biz.impl;

import com.CloudJun.biz.HBookBiz;
import com.CloudJun.mapper.HBookMapper;
import com.CloudJun.vo.HBookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author CloudJun
 * @create  2023-08-26 17:43
 */
@Service
public class HBookBizImpl implements HBookBiz {

    @Autowired
    private HBookMapper hBookMapper;

    @Override
    public HBookVo selectByBookId(Integer bid) {
        return hBookMapper.selectByBookId(bid);
    }

}

在测试类( Test01 )中增加以下测试方法及接口

    @Autowired
    private HBookBiz hbookBiz;
    @Test
    public void selectByBookId() {
        HBookVo hBookVo = hbookBiz.selectByBookId(8);
        System.out.println(hBookVo);
        hBookVo.getCategories().forEach(System.out::println);
    }

执行其中的方法进行测试,结果为如图  :

 

在自动生成的 CategoryMapper.xml 配置文件中增加以下配置

  <resultMap id="CategoryVoMap" type="com.CloudJun.vo.CategoryVo">
    <result column="category_id" property="categoryId"></result>
    <result column="category_name" property="categoryName"></result>
    <collection property="books" ofType="com.CloudJun.model.HBook">
      <result column="book_id" property="bookId"></result>
      <result column="book_name" property="bookName"></result>
      <result column="price" property="price"></result>
    </collection>
  </resultMap>

  <select id="selectByCategoryId" resultMap="CategoryVoMap" parameterType="java.lang.Integer" >
     SELECT * FROM
     t_hibernate_book b,
     t_hibernate_book_category bc ,
     t_hibernate_category c
     WHERE b.book_id = bc.bid
     AND bc.cid = c.category_id
     AND c.category_id = #{cid}
  </select>

在自动生成的 CategoryMapper 接口 中增加以下方法

CategoryVo selectByCategoryId(@Param("cid") Integer cid);

创建一个接口名为 CategoryBiz 

package com.CloudJun.biz;

import com.CloudJun.vo.CategoryVo;

public interface CategoryBiz {

    CategoryVo selectByCategoryId( Integer cid);

}

在实现以上 CategoryBiz 接口,创建一个实现类,名为 CategoryBizImpl 

package com.CloudJun.biz.impl;

import com.CloudJun.biz.CategoryBiz;
import com.CloudJun.mapper.CategoryMapper;
import com.CloudJun.vo.CategoryVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author CloudJun
 * @create  2023-08-26 17:56
 */
@Service
public class CategoryBizImpl implements CategoryBiz {
    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public CategoryVo selectByCategoryId(Integer cid) {
        return categoryMapper.selectByCategoryId(cid);
    }

}

在测试类( Test01 )中增加以下测试方法及接口 

    @Autowired
    private CategoryBiz categoryBiz;    
    @Test
    public void selectByCategoryId() {
        CategoryVo categoryVo = categoryBiz.selectByCategoryId(8);
        System.out.println(categoryVo);
        categoryVo.getBooks().forEach(System.out::println);
    }

执行其中的方法进行测试,结果为如图  : 

 

给我们带来的收获

学习Mybatis的关联关系映射可以带来以下收获和认识:

  • 1. 灵活的数据查询:通过关联关系映射,可以方便地进行多表关联查询,获取到关联表中的相关数据。这样可以减少数据库查询的次数,提高查询效率,并且可以一次性获取到所有关联数据,减少了后续数据操作的开销。
  • 2. 数据的一致性和完整性:在进行关联关系映射时,可以通过定义中间表和映射关系,保证数据的一致性和完整性。在插入、更新和删除数据时,需要同时维护中间表的数据,以保证关联关系的正确性。
  • 3. 简化数据操作:通过关联关系映射,可以将关联表中的数据映射到实体类的关联属性上,使得获取关联数据变得简单和直观。不需要手动编写复杂的SQL语句,只需要通过配置映射文件,就可以方便地获取到关联数据。
  • 4. 提高代码的可读性和可维护性:通过Mybatis的关联关系映射,可以将数据操作的逻辑和SQL语句分离,使得代码更加清晰和易于理解。同时,通过使用映射文件,可以方便地修改和维护数据操作的逻辑,提高代码的可维护性。

总结来说,学习Mybatis的关联关系映射可以带来灵活的数据查询、数据的一致性和完整性、简化数据操作以及提高代码的可读性和可维护性等好处。通过掌握关联关系映射的知识,可以更加有效地进行数据库操作和数据查询,提高开发效率和代码质量。

 

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

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

相关文章

Premiere Pro软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Adobe Premiere Pro&#xff0c;简称PR&#xff0c;是Adobe公司开发的一款非线性视频编辑软件&#xff0c;被广泛应用于电影、电视剧、广告、纪录片、独立电影和音乐会等影视制作领域。它被公认为是行业内的标准工具&#xff0c…

陶哲轩6000字详述:计算机辅助数学证明的历史

导读 几个世纪以来&#xff0c;计算机&#xff08;机器&#xff09;一直是数学家的好朋友&#xff0c;他们利用它计算、提出猜想以及进行数学证明。随着交互式定理证明器、机器学习算法和生成式AI等更为先进的工具的出现&#xff0c;机器被更具创新性和深度的方式得到运用。 近…

深度学习3. 强化学习-Reinforcement learning | RL

强化学习是机器学习的一种学习方式&#xff0c;它跟监督学习、无监督学习是对应的。本文将详细介绍强化学习的基本概念、应用场景和主流的强化学习算法及分类。 目录 什么是强化学习&#xff1f; 强化学习的应用场景 强化学习的主流算法 强化学习(reinforcement learning) …

yum命令安装程序

Ubuntu图系统的安装命令&#xff1a; top命令&#xff1a; df -h查看磁盘占用信息 网络状态监控 环境变量和&#xffe5;符号的用法&#xff1a; 上传下载命令&#xff1a; 压缩解压常见&#xff1a;的压缩格式 tar tar解压&#xff1a;

汤普森采样(Thompson sampling)理论支持

目录 一、UCB与TS算法数学原理&#xff08;1&#xff09;Upper Confidence Bounds 数学原理&#xff08;2&#xff09;Thompson sampling 数学原理1、TS 基本数据原理1. beta 分布2. 共轭分布与共轭先验3. 采样的编程实现 2、TS 算法流程(1) TS算法基础版本 二、UCB与TS算法的优…

深度学习2.神经网络、机器学习、人工智能

目录 深度学习、神经网络、机器学习、人工智能的关系 大白话解释深度学习 传统机器学习 VS 深度学习 深度学习的优缺点 4种典型的深度学习算法 卷积神经网络 – CNN 循环神经网络 – RNN 生成对抗网络 – GANs 深度强化学习 – RL 总结 深度学习 深度学习、神经网络…

ModaHub魔搭社区:WinPin经营大脑助手

产品介绍 智慧经营助手:企业专属的“数据工程师”“BI分析师” WinPlan决策系统 算力 阿里云 腾讯云 AWS亚马逊 框架 业务数据基座 WinPlan垂直大模型 模型 分析模型 预测模型 决策模型 应用 精准预测

微信视频号下载,个人在用的好使工具,就一个可执行文件,打开直接用

比其它一些工具好使&#xff0c;目前个人在用的好使工具&#xff0c;就一个可执行文件&#xff0c;打开直接用&#xff1a; 先监听&#xff08;安装一下证书&#xff09;&#xff08;图1&#xff09;打开视频号左侧选择地址&#xff0c;点“复制链接”&#xff08;图2&#xf…

二叉树链式结构的实现

文章目录 1.前置说明 2.二叉树的遍历 文章内容 1.前置说明 学习二叉树的基本操作前&#xff0c;需先要创建一棵二叉树&#xff0c;然后才能学习其相关的基本操作。由于现在我们对于二叉树的了解还处于初级阶段&#xff0c;所以我们手动创建一棵简单的二叉树&#xff0c;以便…

文本编辑器Vim常用操作和技巧

文章目录 1. Vim常用操作1.1 Vim简介1.2 Vim工作模式1.3 插入命令1.4 定位命令1.5 删除命令1.6 复制和剪切命令1.7 替换和取消命令1.8 搜索和搜索替换命令1.9 保存和退出命令 2. Vim使用技巧 1. Vim常用操作 1.1 Vim简介 Vim是一个功能强大的全屏幕文本编辑器&#xff0c;是L…

Java—实现多线程程序 | 入门

目录 一、前言 二、基本概念 进程 线程 三、Java多线程实现 java.lang.Thread类 获取线程名字及对象 获取main进程名 Thread currentThread() 四、线程优先级 设置优先级 一、前言 前期入门学习的代码中&#xff0c;全部都是单线的程序&#xff0c;也就是从头到尾…

Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap

在上个月的Build 2017开发者大会上&#xff0c;微软宣布将SUSE&#xff0c;Ubuntu和Fedora引入Windows 商店&#xff0c;反应出微软对开放源码社区的更多承诺。 该公司去年以铂金会员身份加入Linux基金会。现在&#xff0c;微软针对内测者的Windows商店已经开始提供 部分Linux发…

JavaScript——为什么静态方法不能调用非静态方法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

C++中的const成员变量和成员函数

在类中&#xff0c;如果你不希望某些数据被修改&#xff0c;可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。 const成员变量 const 成员变量的用法和普通 const 变量的用法相似&#xff0c;只需要在声明时加上 const 关键字。初始化 const 成员变量只有…

VUE笔记(六)vue路由

一、路由的简介 1、实现生活中的路由 路由&#xff1a;路由其实就是一个key-value对应关系 路由器&#xff1a;用于管理多个路由关系的设备被称为路由器 2、前端的路由 目前使用的前端项目都是单页面的应用&#xff08;SPA&#xff09;&#xff0c;一个项目中只有一个html页…

网络学生用品商店系统设计与实现(论文+源码)_kaic

摘 要 随着互联网的发展&#xff0c;人们的生活发生了巨大的变化&#xff0c;给人们的生活、工作等方面带来了相当大的提高&#xff0c;电子化成为了节约成本、调高效率的代名词。电子商务是利用微电脑技术和网络通讯技术进行的商务活动&#xff0c;买卖双方通过网络所进行各…

亚马逊云科技 云技能孵化营 初识机器学习

目录 前言 一、课程介绍 二、什么是机器学习 三、机器学习算法进阶过程 四、亚马逊云科技能给我们什么 总结 前言 近期参加了“亚马逊云科技 云技能孵化营”&#xff0c;该孵化营的亚马逊云科技培训与认证团队为开发者准备了云从业者的精要知识及入门课程&#xff0c;帮助…

python 面试题--3(15题)

目录 Python中的生成器是什么&#xff1f;如何创建一个生成器&#xff1f; 解释Python中的递归函数及其使用场景。 Python中的迭代器和可迭代对象有什么区别&#xff1f; 什么是Python中的模块和包&#xff1f;它们有什么区别&#xff1f; 如何在Python中处理异常&#xf…

提升团队效率!探索多款热门一站式团队协作工具

“常见的几种团队协作工具有&#xff1a;Zoho Projects、Slack、Microsoft Teams、Asana、Trello等。” 团队协作已经成为了企业、组织和个人工作的重要组成部分。为了提高工作效率和协同能力&#xff0c;各种团队协作工具应运而生。本文将介绍团队协作工具的功能以及常见的几种…

E. Nastya and Potions - 记忆化搜索

分析&#xff1a; dfs永远都需要记忆化搜索&#xff0c;也算是优化技巧吧&#xff0c;首先不知道哪种方法更加好&#xff0c;本质就是找每种材料的最小费用&#xff0c;能通过几种费用更少的材料代替就可以将费用优化成更小&#xff0c;这也就需要dfs来找最小费用&#xff0c;但…