SSM1---MyBatis

news2025/1/15 13:44:08

MyBatis

MyBatis环境搭建

我这个是使用IDEA,基于Maven搭建的

  • 首先建立一个空的Maven项目或者模块
  • 在pom.xml中引入所需依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ssm</artifactId>
        <groupId>com.itzhh.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>

    <artifactId>mybatis</artifactId>
    <dependencies>
    <!-- Mybatis核心 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <!-- junit测试 -->
    <dependency>
    <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

</project>
  • 在resources下面创建核心配置文件mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!--    顺序
properties?,settings?,typeAliases?,typeHandlers?,
objectFactory?,objectWrapperFactory?,reflectorFactory?,
plugins?,environments?,databaseIdProvider?,mappers?)".
-->



<!--引入properties文件-->
    <properties resource="jdbc.properties"/>
    
    <settings>
<!--        将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

<!--    设置类型别名-->
    <typeAliases>
<!--        <typeAlias type="com.itzhh.mybatisOne.Entity.User" alias="abc"/>-->
<!--        <typeAlias type="com.itzhh.mybatisOne.Entity.User" />-->
<!--        默认别名:类名,不区分大小写-->
<!--        通过包名指定别名,此包下所有类都有别名-->
        <package name="com.itzhh.mybatisOne.Entity"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
<!--    引入mybatis的映射文件-->
    <mappers>
<!--        <mapper resource="mappers\UserMapper.xml"/>-->
<!--        以包的形式引入,有注意点,要注意可能会出错-->
        <package name="com.itzhh.mybatisOne.Mapper"/>
    </mappers>
</configuration>
  • 所需的jdbc.properties根据自己的实际情况进行配置
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
  • 如果需要配置日志,在pom中引入相应依赖,同时创建log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>
  • 创建Maven工程对应的目录结构

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

  • 创建Mapper接口
package com.itzhh.mybatisOne.Mapper;

import com.itzhh.mybatisOne.Entity.User;

import java.util.List;

/**
 * Author: zhh
 * Date: 2022-12-21 10:48
 * Description: <描述>
 */
public interface UserMapper {
    int insertUser();
    void updateUser();
    void deleteUser();
    User selectUserById();

    List<User> selectAllUsers();
}

  • 创建对应的mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itzhh.mybatisOne.Mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
    insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
</insert>
    <update id="updateUser">
        update t_user set username='zhh' where id = 2
    </update>
    <delete id="deleteUser">
        delete from t_user where id = 4
    </delete>
    <select id="selectUserById" resultType="com.itzhh.mybatisOne.Entity.User">
        select * from t_user where id = 3
    </select>
    <select id="selectAllUsers" resultType="com.itzhh.mybatisOne.Entity.User">
        select * from t_user ;
    </select>
</mapper>

注意:因为我在mybatis核心配置文件中是通过包形式引入mybatis依赖文件的,所以只需要完整类名和包名对应即可,不需要每次都引入。但要注意对应的包的位置和名字必须一致。
在这里插入图片描述
在这里插入图片描述

  • 至此,一个简单的mybatis环境搭建完成。
  • 获取sqlsession的工具类
package com.itzhh.mybatisOne.utils;

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;

/**
 * Author: zhh
 * Date: 2022-12-21 11:20
 * Description: <描述>
 */
public class SqlSessionUtil {
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        try {
            //读取MyBatis的核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            //创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
            //SqlSession sqlSession = sqlSessionFactory.openSession();
            //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
            sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}

  • 简单测试案例
package com.itzhh.mybatisOne;

import com.itzhh.mybatisOne.Entity.User;
import com.itzhh.mybatisOne.Mapper.UserMapper;
import com.itzhh.mybatisOne.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * Author: zhh
 * Date: 2022-12-21 11:16
 * Description: <描述>
 */
public class TestMybatis {

    @Test
    public void testInsert(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int result = mapper.insertUser();
        sqlSession.close();
    }

    @Test
    public void testDelete(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.deleteUser();
        sqlSession.close();
    }

    @Test
    public void testUpdate(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        mapper.updateUser();
        sqlSession.close();
    }

    @Test
    public void testSelect(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.selectUserById();
        System.out.println(user);
        sqlSession.close();
    }

    @Test
    public void testSelectAll(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAllUsers();
        users.forEach(System.out::println);
        sqlSession.close();
    }
}

逆向工程的创建

  • 在pom.xml中添加相应的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SSM</artifactId>
        <groupId>com.itzhh.ssm</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis_mbg</artifactId>
    <packaging>jar</packaging>


    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
    </dependencies>
    <!-- 控制Maven在构建过程中相关配置 -->
    <build>
        <!-- 构建过程中用到的插件 -->
        <plugins>
            <!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.0</version>
                <!-- 插件的依赖 -->
                <dependencies>
                    <!-- 逆向工程的核心依赖 -->
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.2</version>
                    </dependency>
                    <!-- MySQL驱动 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.16</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>


</project>
  • 在resources下创建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>
    <!--
    targetRuntime: 执行生成的逆向工程的版本
    MyBatis3Simple: 生成基本的CRUD(清新简洁版)
    MyBatis3: 生成带条件的CRUD(奢华尊享版)
    -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <!-- 数据库的连接信息 -->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/ssm?
serverTimezone=UTC"
                        userId="root"
                        password="123456">
        </jdbcConnection>
        <!-- javaBean的生成策略-->
        <javaModelGenerator targetPackage="com.itzhh.mybatis.entity"
                            targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- SQL映射文件的生成策略 -->
        <sqlMapGenerator targetPackage="com.itzhh.mybatis.mapper"
                         targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- Mapper接口的生成策略 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.itzhh.mybatis.mapper" targetProject=".\src\main\java">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 逆向分析的表 -->
        <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
        <!-- domainObjectName属性指定生成出来的实体类的类名 -->
        <table tableName="t_emp" domainObjectName="Emp"/>
        <table tableName="t_dept" domainObjectName="Dept"/>
    </context>
</generatorConfiguration>
  • 双击执行
    在这里插入图片描述
  • 逆向工程只是帮助生成了一部分代码,其它步骤照旧。

分页插件的使用

  • 在pom.xml中添加相关依赖
<!--        分页插件依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
  • 在mybatis-config.xml中添加相关插件,注意放到environment标签之前
<!--    设置分页插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>
  • 在测试类中使用分页插件
package com.itzhh.mybatis;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.itzhh.mybatis.entity.Emp;
import com.itzhh.mybatis.entity.EmpExample;
import com.itzhh.mybatis.mapper.EmpMapper;
import com.itzhh.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * Author: zhh
 * Date: 2022-12-26 15:17
 * Description: <描述>
 */
public class TestPage {
    @Test
    public void testPage(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
        //查询之前开启分页功能
        Page<Object> page = PageHelper.startPage(1, 4);
        List<Emp> emps = mapper.selectByExample(null);
        //查询功能之后可以获取分页相关的所有数据
        PageInfo<Emp> pageInfo = new PageInfo<>(emps, 5);
        emps.forEach(System.out::println);
        System.out.println(pageInfo);

    }

}


  • 结果:
DEBUG 12-26 15:23:43,224 Cache Hit Ratio [SQL_CACHE]: 0.0 (LoggingCache.java:60) 
DEBUG 12-26 15:23:43,293 ==>  Preparing: SELECT count(0) FROM t_emp (BaseJdbcLogger.java:137) 
DEBUG 12-26 15:23:43,315 ==> Parameters:  (BaseJdbcLogger.java:137) 
DEBUG 12-26 15:23:43,331 <==      Total: 1 (BaseJdbcLogger.java:137) 
DEBUG 12-26 15:23:43,333 ==>  Preparing: select emp_id, emp_name, emp_age from t_emp LIMIT ? (BaseJdbcLogger.java:137) 
DEBUG 12-26 15:23:43,333 ==> Parameters: 4(Integer) (BaseJdbcLogger.java:137) 
DEBUG 12-26 15:23:43,334 <==      Total: 4 (BaseJdbcLogger.java:137) 
Emp{empId=1, empName='zhh', empAge=34}
Emp{empId=2, empName='zhh', empAge=34}
Emp{empId=3, empName='abc', empAge=null}
Emp{empId=4, empName='fcd', empAge=null}
PageInfo{pageNum=1, pageSize=4, size=4, 
startRow=1, endRow=4, total=34, pages=9, 
list=Page{count=true, pageNum=1, pageSize=4, 
startRow=0, endRow=4, total=34, pages=9, reasonable=false, pageSizeZero=false}
[Emp{empId=1, empName='zhh', empAge=34}, 
Emp{empId=2, empName='zhh', empAge=34}, 
Emp{empId=3, empName='abc', empAge=null}, 
Emp{empId=4, empName='fcd', empAge=null}], 
prePage=0, nextPage=2, isFirstPage=true, 
isLastPage=false, hasPreviousPage=false, 
hasNextPage=true, navigatePages=5, 
navigateFirstPage=1, navigateLastPage=5, 
navigatepageNums=[1, 2, 3, 4, 5]}

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

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

相关文章

技术分享| 复盘一起看球场景

卡塔尔世界杯已经落幕&#xff0c;作为“后新冠时代”的首个大型全球体育赛事&#xff0c;也同时被多个“史上首次”与“历史之最”所装点&#xff0c;但同时也是国内疫情的高峰期&#xff0c;相信大多数人都是顶着高烧咳嗽跟好友线上看完了总决赛&#xff0c;对于线上互动一起…

民锋国际期货:期货交易 | 博弈之道,遵守法则

期货交易 | 博弈之道&#xff0c;遵守法则 对于一些好的书籍我会阶段性复读&#xff0c;因为每一次阅读都会有新的收获和更深的理解。这么做的目的是经过反复的咀嚼消化将其运用到交易实践中&#xff0c;为己所用。 最近重温了《海龟交易法则》&#xff0c;而第一次读这本书应…

C++TensorRT | TensorRT模型编译流程

tensorrt的工作流程如下图: 首先定义网络 优化builder参数 通过builder生成engine,用于模型保存、推理等 engine可以通过序列化和逆序列化转化模型数据类型(转化为二进制byte文件,加快传输速率) 再进一步推动模型由输入张量到输出张量的推理 代码结构: 定义 builder, con…

由手机号正则引发的思考,正则属性 lastIndex

问题&#xff1a; let reg /^1[3456789]\d{9}$/g 正则是验证手机号的证&#xff0c;为何突然不能验证正确的手机号了呢&#xff1f;其中有何蹊跷&#xff1f; 解决方案&#xff1a;底部有3种解决方案&#xff0c;方案3解决最稳妥 先来看一段正则&#xff1a; let reg /^1[3…

物联网架构实例—部标过检工具使用(物联网套件压测)

1.安装包 下载 2.安装MySQL数据库 如果安装时提示缺少C 2015的组件&#xff0c;需要执行vc_redist.x64.exe进行修改&#xff0c;直接双击执行vc_redist.x64.exe即可。 安装到这里&#xff0c;除了root账户外&#xff0c;另外需要增加一个gps账户&#xff0c;这个是过检工具连…

【电商】电商后台---价税管理

文章对电商后台系统中的价税管理进行了系统的介绍&#xff0c;希望通过此文能够加深你对电商系统的认识。 前面介绍了商品管理部分&#xff0c;从商品的属性、分类到商品资质、商品图片都做了说明&#xff0c;在梳理的过程中越发的感觉到每部分细节才是关键。但实话实说通过前几…

2023年全国NPDP产品经理国际认证火热招生啦

产品经理国际资格认证NPDP是国际公认的唯一的新产品开发专业认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年…

3节点Fate集群实战记录 -- 纵向联邦学习

前一篇博客记录了3节点fate集群实现横向联邦学习的实践过程link&#xff0c;本篇接着记录纵向联邦学习的实践过程&#xff0c;其中有些简单步骤未详细列出&#xff0c;具体执行方法可以参考上篇博客。 纵向联邦的场景简单说就是A和B两数据方&#xff0c;A知道B有A没有的特征bx&…

自监督学习UNSUPERVISED REPRESENTATION LEARNING BY PREDICTING IMAGE ROTATIONS论文笔记

文章目录一、自监督简介1.监督和无监督学习2.无监督学习3.自监督学习二、论文内容0.辅助任务1.出发点2.符号假设3.网络模型4.优点三、实验结果1.CIFAR实验a.评估学习到的特征层次结构b.探讨学习到的特征质量和辅助任务旋转角度之间的关系c.对比实验2.在IMageNet上不同任务的实验…

使用固定TCP端口地址远程MySQL数据库【内网穿透】

系列文章 公网远程连接内网MySQL数据库【内网穿透】使用固定TCP端口地址远程MySQL数据库【内网穿透】 在上篇文章中&#xff0c; 我们成功实现了在公网环境下远程连接内网MySQL数据库。但由于使用的免费的cpolar内网穿透&#xff0c;其所生成的公网地址为随机临时地址&#xf…

Java swing实现的一款餐厅点餐系统

一、项目简介 本项目是一套Java swing实现的一款餐厅点餐系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…

Python 面向对象编程 (二) —— 类函数的定义和构造

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…

日本知名汽车零部件公司巡礼系列之株式会社137

株式会社137 业务内容&#xff1a; 汽车功能部件制造(离合器系统、制动系统) 代理供货业务(汽车相关制造商) 运输业务(汽车相关制造商) 公司简介&#xff1a; 资本金&#xff1a;5000万日元 员工数&#xff1a;山形工厂44名&#xff08;男31名&#xff0c;女13名&#xf…

折腾Transmission实现固定IP服务器BT做种教程

title: 折腾Transmission实现固定IP服务器BT做种完美 通过网络分享资源&#xff0c;是为了让人下载&#xff0c;但由于种种原因&#xff0c;放到商业网盘的资源经常会被删除&#xff0c;于是我只好自建简易的http文件下载服务&#xff0c;比如frp.v2fy.com [外链图片转存中……

易基因|动物发育过程中顺式调控区域的活性DNA去甲基化早于脊椎动物起源:重磅研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年12月02日&#xff0c;澳大利亚悉尼加尔文医学研究所基因组学和表观遗传学系Ozren Bogdanovic研究团队在《SCIENCE ADVANCES》杂志发表了题为“Active DNA demethylation of develo…

随机创建姓名、手机号等信息Faker类创建的对象的各方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 随机创建姓名、手机号等信息 Faker类创建的对象的各方法 [太阳]选择题 以下python代码结果错误的一项是? from faker import Faker fkFaker() print(fk.name()) print(fk.phone_number()) p…

基于gis平台监控的点位规划系统研究

一、背景 自 2002 年天津市启动了以 “警防、民防、技防” 三张网为主要内容的社会治安防控体系。“技防网” 既覆盖天津全域的具有地区特点的城市报警与监控系统。经多年推进建设&#xff0c;“技防网” 已形成了较为完整的架构体系和建设、运行、管理模式&#xff0c;整体架构…

【K3s】第7篇 详解Kubernetes发布服务类型(例如:暴露给 Kubernetes 集群外部的 IP 地址)

目录 1、发布服务类型 2、NodePort 类型 选择你自己的端口 为 type: NodePort 服务自定义 IP 地址配置 1、发布服务类型 对一些应用的某些部分&#xff08;如前端&#xff09;&#xff0c;可能希望将其暴露给 Kubernetes 集群外部的 IP 地址。 Kubernetes ServiceTypes 允许…

Vue二次封装组件并发布到npm仓库

1.认识npm NPM的全称是Node Package Manager&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块&#xff08;包&#xff09;的标准。 使用Vue框架进行开发&#xff0c;组件封装是一个很常规的操作。一个封装好的组件可以在项目的任意地方使…

FFmpeg简单使用:解封装h264 ---- 提取SPS PPS

前言 我们从flv和mp4等文件解封装读取的AVPacket并没有SPS、PPS数据&#xff0c;而是保存在 AVFormatContext -> streams -> codecpar -> extradata里面&#xff0c;下面我们打开一个flv文件看一下 分析一下这块数据&#xff0c;起始位置&#xff1a;0980 大小&#…