Mybatis案例-商品的增删改查

news2024/11/28 14:52:08

文章目录

      • 1. aim
      • 2.环境准备
      • 3.查询
        • 3.1 查所有
        • 3.2 查看详情
        • 3.3 条件查询
          • 3.3.1 Mybatics如何接收参数?
          • 3.3.2 多条件查询
          • 3.3.3 动态条件查询
          • 3.3.4 单条件查询
      • 4.添加
          • 主键返回
      • 5.修改
        • 5.1 修改全部字段
        • 5.2 修改动态字段
      • 6.删除
        • 6.1 删除1个
        • 6.2 批量删除

JDBC完成: https://blog.csdn.net/meini32/article/details/131981238

1. aim

要完成的功能列表清单:
1. 查询

  • 查询所有数据
  • 查看详情
  • 条件查询

2. 添加
3. 修改

  • 修改全部字段
  • 修改动态字段

4. 删除

  • 删除一个
  • 批量删除

2.环境准备

  1. 数据库表tb_brand
  2. 实体类Brand
  3. 测试用例
  4. 安装MyBatis×插件

数据库表:

-- 删除tb_brand表
drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
(
    -- id 主键
    id           int primary key auto_increment,
    -- 品牌名称
    brand_name   varchar(20),
    -- 企业名称
    company_name varchar(20),
    -- 排序字段
    ordered      int,
    -- 描述信息
    description  varchar(100),
    -- 状态:0:禁用  1:启用
    status       int
);
-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
       ('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1),
       ('小米', '小米科技有限公司', 50, 'are you ok', 1);


SELECT * FROM tb_brand;

实体Brand类

package com.itheima.pojo;

public class Brand {
    // id 主键
    private Integer id;
    // 品牌名称
    private String brandName;
    // 企业名称
    private String companyName;
    // 排序字段
    private Integer ordered;
    // 描述信息
    private String description;
    // 状态:0:禁用  1:启用
    private Integer status;


    public Integer getId() {
        return id;
    }

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

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getOrdered() {
        return ordered;
    }

    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

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

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brandName='" + brandName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", ordered=" + ordered +
                ", description='" + description + '\'' +
                ", status=" + status +
                '}';
    }
}

测试用例

在这里插入图片描述
MybatisX插件

功能

  • XML和接口方法互相跳转
  • 根据接口方法生成statement

在这里插入图片描述
在这里插入图片描述

3.查询

步骤

  • 编写接口:Mapper接口
  • 编写sql语句:sql映射文件
  • 执行方法,测试

3.1 查所有

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:数据库表的字段名称和―实体类的属性名称不一样,则不能自动封装数据

方法1:起别名
在这里插入图片描述
在这里插入图片描述
方法2:映射

1.定义标签
2.在标签中,使用resultMap属性替换resultType属性

在这里插入图片描述

3.2 查看详情

查看某一条数据的详情信息

1.编写mapper接口
在这里插入图片描述

2.定义接受参数
在这里插入图片描述

3. 编写sql语句

<select id="selectById" resultMap="brandResultMap">
        select * from tb_brand where id = #{id};
    </select>

4.执行sql
在这里插入图片描述

参数占位符
1.#{}:会将其替换为 ?,为了防止SQL注入 2.${}:拼sql。会存在SQL注入问题

3.3 条件查询

3.3.1 Mybatics如何接收参数?

1.单个参数

可以直接将参数作为方法的参数进行传递。在 SQL 语句中可以通过 #{paramName} 的形式引用该参数。

// Java 代码
public interface UserMapper {
    User getUserById(int id);
}

<!-- Mapper XML -->
<select id="getUserById" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

2.使用 @Param 注解来指定参数的名称:

可以使用 @Param 注解来指定参数的名称,然后在 SQL 语句中通过该名称引用参数。

// Java 代码
public interface UserMapper {
    User getUserByIdAndName(@Param("id") int id, @Param("name") String name);
}

<!-- Mapper XML -->
<select id="getUserByIdAndName" resultType="User">
    SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>

3.使用 Map 传递参数:

可以使用 Map 类型的参数传递多个参数。在 SQL 语句中通过键来引用对应的值:

// Java 代码
public interface UserMapper {
    User getUserByMap(Map<String, Object> params);
}

<!-- Mapper XML -->
<select id="getUserByMap" resultType="User">
    SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>

4.使用对象传递参数:

可以使用自定义的对象作为参数,MyBatis 会自动将对象的属性与 SQL 语句中的参数进行映射。例如:

// Java 代码
public class UserQuery {
    private int id;
    private String name;
    // 省略 getter 和 setter 方法
}

public interface UserMapper {
    User getUserByQuery(UserQuery query);
}

<!-- Mapper XML -->
<select id="getUserByQuery" resultType="User">
    SELECT * FROM user WHERE id = #{id} AND name = #{name}
</select>
3.3.2 多条件查询

步骤

  1. 编写多条件查询的接口(mapper);
  2. 添加到映射文件里
  3. 编写sql语句
  4. 执行,测试

1.定义接口

public interface BrandMapper {
    List<Brand> selectAll();
    Brand selectById(int id);  //通过id查看商品详情

    //使用 @Param 注解来指定参数的名称
    List<Brand> selectByMutiCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
    
    //使用对象来指定参数
    List<Brand> selectByMutiCondition(Brand brand);  

   //使用map来指定参数
    List<Brand> selectByMutiCondition(HashMap map);
    

}

2.添加到映射文件里

<!--
namespace:名称空间
-->

<mapper namespace="com.itheima.mapper.BrandMapper">

    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>

<!--    多条件查询-->
    <select id="selectByMutiCondition" resultMap="brandResultMap">
        SELECT * FROM tb_brand
        WHERE status = #{status} AND company_name LIKE #{companyName} AND brand_name LIKE #{brandName};
    </select>

</mapper>

3.执行,测试

//多条件查询-使用参数查询
public class MyBatisTest3 {
    public static void main(String[] args) throws IOException {
        int s = 0;
        String cn = "三只松鼠股份有限公司";
        String bn = "三只松鼠";

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brand = brandMapper.selectByMutiCondition(s,cn,bn);

        System.out.println(brand);

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


//多条件查询-使用对象
public class MyBatisTest3 {
    public static void main(String[] args) throws IOException {
        int s = 0;
        String cn = "三只松鼠股份有限公司";
        String bn = "三只松鼠";

        Brand brand1 = new Brand();
        brand1.setStatus(s);
        brand1.setBrandName(bn);
        brand1.setCompanyName(cn);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brand = brandMapper.selectByMutiCondition(brand1);

        System.out.println(brand);

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


//多条件查询-使用Map
public class MyBatisTest3 {
    public static void main(String[] args) throws IOException {
        int s = 0;
        String cn = "三只松鼠股份有限公司";
        String bn = "三只松鼠";

        HashMap map = new HashMap();
        map.put("status",s);
        map.put("companyName",cn);
        map.put("brandName",bn);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brand = brandMapper.selectByMutiCondition(map);

        System.out.println(brand);

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

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

3.3.3 动态条件查询

动态条件查询是指根据不同的条件组合,构建动态的 SQL 查询语句。
方法

  • 使用 <if 元素
  • 使用 <choose, <when, <otherwise 元素:
  • 使用 <trim, <where, <set元素
使用if
<select id="getUserByCondition" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <if test="id != null">
        AND id = #{id}
    </if>
    <if test="name != null">
        AND name = #{name}
    </if>
</select>
使用 choose, when, otherwise 元素
<select id="getUserByCondition" resultType="User">
    SELECT * FROM user
    WHERE 1=1
    <choose>
        <when test="id != null">
            AND id = #{id}
        </when>
        <when test="name != null">
            AND name = #{name}
        </when>
        <otherwise>
            AND status = 'ACTIVE'
        </otherwise>
    </choose>
</select>
使用 trim, where, set元素
<update id="updateUser" parameterType="User">
    UPDATE user
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
    </set>
    WHERE id = #{id}
</update>

1.编写接口

List<Brand> selectByMutiConditionActivate(Brand brand);

2.编写动态查询映射文件

<!--    动态查询-->
    <select id="selectByMutiConditionActivate" resultMap="brandResultMap">
        SELECT * FROM tb_brand
        WHERE 1=1
            <if test="status != null">AND status = #{status}</if>
            <if test="companyName != null and companyName!='' ">AND company_name LIKE #{companyName} </if>
            <if test="brandName != null and brandName!='' ">AND brand_name LIKE #{brandName} </if>

    </select>

3.测试

import com.itheima.mapper.BrandMapper;
import com.itheima.pojo.Brand;
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.HashMap;
import java.util.List;

public class MyBatisTest4 {
    public static void main(String[] args) throws IOException {
//        int s = 1;
        String cn = "三只松鼠股份有限公司";
//        String bn = "三只松鼠";

        Brand brand1 = new Brand();
//        brand1.setStatus(s);
//        brand1.setBrandName(bn);
        brand1.setCompanyName(cn);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        List<Brand> brand = brandMapper.selectByMutiConditionActivate(brand1);

        System.out.println(brand);

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

4.结果
在这里插入图片描述

3.3.4 单条件查询

MyBatis 单条件动态查询是指根据单个条件的存在与否,动态地构建 SQL
查询语句。根据不同的条件值,选择是否添加该条件到查询语句中,从而实现根据单个条件进行灵活查询的功能。
使用 <choose,《when> 和 《otherwise> 元素可以实现条件选择逻辑,根据不同的条件选择其中一个分支进行处理

<select id="getUserByCondition" resultType="User">
  SELECT * FROM user
  WHERE 1=1
  <choose>
    <when test="name != null">
      AND name = #{name}
    </when>
    <when test="age != null">
      AND age = #{age}
    </when>
    <otherwise>
      AND 1=1
    </otherwise>
  </choose>
</select>

4.添加

在这里插入图片描述

步骤

  1. 编写接口方法
  2. 编写sql语句,添加映射文件
  3. 执行方法,测试

MyBatis事务:

  • openSession(): 默认开启事务,进行增删改操作后需要使用 sqlSession.commit();
  • 手动提交事务openSession(true): 可以设置为自动提交事务 (关闭事务)

1.编写接口

public interface BrandMapper {
    
    //添加
    void addBrand(Brand brand);
}

2.编辑映射文件

<!--
namespace:名称空间
-->

<mapper namespace="com.itheima.mapper.BrandMapper">

    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>

    <insert id="addBrand">
        insert into tb_brand (brand_name, company_name, ordered,description, status)
        values (#{brandName},#{companyName},#{ordered},#{description},#{status});
    </insert>

</mapper>

3.测试 结果


//添加
public class MybatisTest5 {
    public static void main(String[] args) throws IOException {
        String bn = "百度";
        String cn = "百度公司";
        int od = 18;
        String ds = "百度一下你就知道";
        int st =0;

        Brand brand = new Brand();
        brand.setBrandName(bn);
        brand.setStatus(st);
        brand.setCompanyName(cn);
        brand.setDescription(ds);
        brand.setOrdered(od);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.addBrand(brand);

        //4.提交事务
        sqlSession.commit();

        //5.关闭
        sqlSession.close();

    }
}

在这里插入图片描述

主键返回

是什么?

在数据添加成功后,需要获取插入数据库数据的主键的值
比如: 添加订单和订单项
1.添加订单
2.添加订单项,订单项中需要设置所属订单的id

在这里插入图片描述
在这里插入图片描述

原因:执行完id没有绑定到对象上

解决:MyBatis 框架,可以使用 useGeneratedKeys 和 keyProperty
属性来自动获取生成的主键值,并将其设置到相应的属性上。

<insert id="addBrand" useGeneratedKeys="true" keyProperty="id">
        insert into tb_brand (brand_name, company_name, ordered,description, status)
        values (#{brandName},#{companyName},#{ordered},#{description},#{status});
    </insert>

在这里插入图片描述

5.修改

sql语句

UPDATE 表名 SET 列名1=1,列名2=2,... [ WHERE 条件];

mybatis标签

<update id="updateOrder" parameterType="Order">
  UPDATE orders
  SET order_number = #{orderNumber}, order_date = #{orderDate}
  WHERE id = #{id}
</update>

5.1 修改全部字段

public interface BrandMapper {
    //修改
    void updateBrand(Brand brand);
}

<update id="updateBrand">
        update tb_brand
        set brand_name=#{brandName},
            company_name=#{companyName},
            ordered=#{ordered},
            description=#{description},
            status=#{status}
        where id = #{id};
    </update>
//返回修改全部字段
public class MybatisTest7 {
    public static void main(String[] args) throws IOException {
        String bn = "快手";
        String cn = "fasthand公司";
        int od = 666;
        String ds = "老铁加油哇";
        int st =1;
        int id = 7;

        Brand brand = new Brand();
        brand.setId(id);
        brand.setBrandName(bn);
        brand.setStatus(st);
        brand.setCompanyName(cn);
        brand.setDescription(ds);
        brand.setOrdered(od);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.updateBrand(brand);


        //4.提交事务
        sqlSession.commit();

        //5.关闭
        sqlSession.close();

    }
}

在这里插入图片描述

5.2 修改动态字段

在 MyBatis 中,你可以使用 元素来实现动态修改字段。 元素根据条件的成立与否,决定是否包含某字段的修改语句片段。

void updateBrandActivate(Brand brand);
<update id="updateBrandActivate">
        update tb_brand
        <set>
            <if test="brandName != null and brandName!='' ">brand_name=#{brandName}</if>
            <if test="companyName != null and companyName!='' ">company_name=#{companyName}</if>
            <if test="ordered != null and ordered!='' ">ordered=#{ordered}</if>
            <if test="description != null and description!='' ">description=#{description}</if>
            <if test="status != null and status!='' ">status=#{status}</if>
        </set>
        where id = #{id};
    </update>
//返回动态修改字段
public class MybatisTest8 {
    public static void main(String[] args) throws IOException {
        String bn = "快手";
        String cn = "fasthand公司";
        int od = 666;
        String ds = "先穿裤子在穿鞋,先当孙子再当爷,记住这句话!";
        int st =0;
        int id = 7;

        Brand brand = new Brand();
        brand.setId(id);
//        brand.setBrandName(bn);
        brand.setStatus(st);
//        brand.setCompanyName(cn);
        brand.setDescription(ds);
//        brand.setOrdered(od);

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.updateBrandActivate(brand);


        //4.提交事务
        sqlSession.commit();

        //5.关闭
        sqlSession.close();

    }
}

在这里插入图片描述

6.删除

sql语句

DELETE FROM 表名 [WHERE 条件] ;

6.1 删除1个

void deleteOne(int id);
<delete id="deleteOne">
        delete from tb_brand where id = #{id};
    </delete>

//删除1

public class MybatisTest9 {
    public static void main(String[] args) throws IOException {

        int id = 6;

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.deleteOne(id);


        //4.提交事务
        sqlSession.commit();

        //5.关闭
        sqlSession.close();

    }
}

6.2 批量删除

void deleteMuti(@Param("ids")int[] ids);
<delete id="deleteMuti">
        delete from tb_brand
        where id
        in(
        <foreach collection="ids" item="id" separator=",">
            #{id}
        </foreach>
        );
    </delete>

//删除1

public class MybatisTest9 {
    public static void main(String[] args) throws IOException {

        int[] ids = {1,5,7};

        //1.加载核心文件,获取SqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        brandMapper.deleteMuti(ids);


        //4.提交事务
        sqlSession.commit();

        //5.关闭
        sqlSession.close();

    }
}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【0804作业】顺序执行2个线程 (完成逆置打印、拷贝文件) (实现类似cat打印到终端)

作业1&#xff1a; 要求定义一个全局变量 char buf[] "1234567"&#xff0c;创建两个线程&#xff0c;不考虑退出条件 要求定义一个全局变量 char buf[] "1234567"&#xff0c;创建两个线程&#xff0c;不考虑退出条件&#xff0c;另&#xff1a; A线程循…

前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;橙橙冰萃美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来…

第二天 什么是JWT ?

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 每天一个知识点 ✨特色专…

RocketMQ 主备自动切换模式部署

目录 主备自动切换模式部署 Controller 部署​ Controller 嵌入 NameServer 部署​ Controller 独立部署​ Broker 部署​ 兼容性​ 升级注意事项​ 主备自动切换模式部署 该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群&#xff0c;其架构如上图所示&#xff…

c++实现Qt信号和槽机制

文章目录 简介信号槽信号与槽的连接 特点观察者模式定义观察者模式结构图 实现简单的信号和槽 简介 信号槽机制与Windows下消息机制类似&#xff0c;消息机制是基于回调函数&#xff0c;Qt中用信号与槽来代替函数指针&#xff0c;使程序更安全简洁。  信号和槽机制是 Qt 的核心…

Scratch 之 大地图引擎怎么做?

引子 简单的介绍一下&#xff0c;一些游戏引擎是有一个隐形小地图存在的&#xff0c;这个隐形小地图通常用来侦测碰碰撞和移动。那么&#xff0c;一个大地图引擎的背景肯定是很大的(一般来说大小都超过200)&#xff0c;如果我们要做出一个枪战作品&#xff0c;那就迟早会发现一…

Spring源码解析(七):bean后置处理器AutowiredAnnotationBeanPostProcessor

Spring源码系列文章 Spring源码解析(一)&#xff1a;环境搭建 Spring源码解析(二)&#xff1a;bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三)&#xff1a;bean容器的刷新 Spring源码解析(四)&#xff1a;单例bean的创建流程 Spring源码解析(五)&…

IBM HR Analytics 员工流失 EDA 和可视化绩效分析

IBM HR Analytics 员工流失与绩效分析 背景导入库输出前五行数据清洗检查空值删除不必要的列 可视化商务旅行直方图离家的距离箱形图教育与数字公司的关系年龄和月收入散点图按教育领域和工作角色划分的工作满意度相关矩阵的交互式热图 背景 揭示导致员工流失的因素&#xff0…

陪诊小程序开发|陪诊系统定制|数字化医疗改善就医条件

健康问题这几年成为人们关注的焦点之一&#xff0c;然而看病却是一个非常麻烦的过程&#xff0c;特别是对于那些身处陌生城市或者不熟悉就医流程的人来说。幸运的是现在有了陪诊小程序下&#xff0c;为您提供便捷的助医服务&#xff0c;使得就医过程得更加简单和轻松。 陪诊系统…

国联易安网页防篡改保护系统“渠道招募”启动啦!

作为业内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全的领军企业&#xff0c;国联易安网页防篡改保护系统基于“高效同步”、“安全传输”两项技术&#xff0c;具备了独特的“五重防护”新特性&#xff0c;支持网页的全自动发布、网页监控、报警和自…

webpack基础知识十:与webpack类似的工具还有哪些?区别?

一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割&#xff0c;组织和打包应用。每个模块完成一个特定的子功能&#xff0c;所有的模块按某种方法组装起来&#xff0c;成为一个整体(bundle) 在前端领域中&#xff0c;并非只有webpack这一款…

c51单片机16个按键密码锁源代码(富proteus电路图)

注意了&#xff1a;这个代码你是没法直接运行的&#xff0c;但是如果你看得懂&#xff0c;随便改一改不超过1分钟就可以用 #include "reg51.h" #include "myheader.h" void displayNumber(unsigned char num) {if(num1){P10XFF;P10P11P14P15P160;}else if…

js修改img的src属性显示变换图片到前端页面,img的src属性显示java后台读取返回的本地图片

文章目录 前言一、HTML 图像- 图像标签&#xff08; <img>&#xff09;1.1图像标签的源属性&#xff08;Src&#xff09;1.2图像标签源属性&#xff08;Src&#xff09;显示项目中图片1.3图像标签源属性&#xff08;Src&#xff09;显示网络图片 二、图像标签&#xff08…

韦东山Linux驱动入门实验班(6)LED驱动---设备树

前言 &#xff08;1&#xff09;在韦东山Linux驱动入门实验班&#xff08;5&#xff09;LED驱动—驱动分层和分离&#xff0c;平台总线模型我们已经讲解了如何将驱动程序和硬件程序进行剥离。但是大佬们感觉这样还不行&#xff0c;他们认为要专门弄一个结构存储硬件信息&#x…

树,森林的遍历,以及其与二叉树遍历之间的关系

树和森林的的遍历 树的遍历 先根遍历 以下列树为演示 首先将树转化成二叉树&#xff08;孩子兄弟表示法&#xff1a;就是每个节点的左边连着它的左孩子&#xff0c;右边连自己右边的第一个兄弟&#xff09; 然后把转化为的二叉树进行先序遍历&#xff0c;中序遍历 进行先序…

【c语言初级】c++基础

文章目录 1. C关键字2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.2 C函数重载的原理--名字修饰采用C语言编译器编译后结果 1. C关键字 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想…

Spring Cloud Alibaba官方网站

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 官方网站 SCA&#xff08;Spring Cloud Alibaba&#xff09;为分布式应用开发提供一站式解决方案。它包含开发分布式应用程序所需的所有核心组件&#xff0c;使您可以轻松地…

LeetCode 周赛上分之旅 #38 结合排序不等式的动态规划

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

思维能力的学习

前言 在工作中&#xff0c;随着工作时间的增长&#xff0c;我们与他人的差异不是知识本身的差异&#xff0c;主要是思维方面的差异&#xff0c;所以我们需要培养自己的思维能力。 思维能力的学习 思维是一个具备内在框架和逻辑的系统工程&#xff0c;思维覆盖了学习、认知、问…