MyBatis学习笔记(2022-11-30)

news2024/11/25 14:53:38

在这里插入图片描述

熬过无人问津的日子才会有诗和远方。


文章目录

  • 一、MyBatis简述
  • 二、快速入门
  • 三、MyBatis配置文件详解
    • 1. MyBatis核心配置文件
      • 1.1 configuration(配置)
      • 1.2 properties(属性)
      • 1.3 environments(环境配置)
      • 1.4 typeAliases(类型别名)
      • 1.5 settings(设置)
      • 1.6 mappers(映射器)
      • 1.7 其它配置
    • 2. MyBatis映射配置文件

一、MyBatis简述


  • MyBatis 是一款优秀的持久层框架,用于简化JDBC开发。(半自动化的ORM框架)
  • 它支持自定义SQL、存储过程以及高级映射。
  • MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Ordinary Java Object,普通的Java对象)映射成数据库中的记录。
  • MyBatis 是 Apache的一个开源项目iBatis,在2010年6月 Apache 将项目交与Google进行管理,更名MyBatis。于2013年11月迁移到GitHub上。
  • Mybatis官网:https://mybatis.org/mybatis-3/zh/index.html
  • 项目地址:https://github.com/mybatis/mybatis-3/releases
  • 目前最新版本是:3.5.11,其发布时间是2022年9月18日。

什么是框架?

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。
  • 在架构的基础之上构建软件编写更加高效、规范、通用、可扩展。

三层架构和SSM框架的关系

三层架构:数据访问层、业务逻辑层和表示层(web层),区分层次的目的即为了高内聚低耦合的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

MVC:模型(model)、视图(view)、控制器(controller。

SSM:Spring Framework、Spring MVC、MyBatis(扩展MyBatis-Plus)。

SSH:Spring、Struts、Hibernate(扩展JPA)。

JavaSE => JDBC => Servlet+JSP => SSM =>SpringBoot(分布式) => SpringCould(微服务)


MyBatis缺点

  • 编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。
  • SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。
  • 框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
  • 二级缓存机制不佳。

软件设计:(open-close开闭原则)尽量不修改源代码,对程序进行扩展。

  • 对扩展是开放的。
  • 对修改源码是关闭的。

如何使用MyBatis?

1、使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。

2、如果使用 Maven 来构建项目,则需将下面的依赖引入 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>



二、快速入门


通过本节可以初步了解MyBatis的使用以及logback的配置

1、创建一个普通的Maven项目

2、引入依赖坐标

<!-- mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>
<!-- mysql 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.46</version>
</dependency>
<!-- junit 单元测试 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope><!--作用范围只在测试环境有效-->
</dependency>
<!-- slf4j日志api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.20</version>
</dependency>
<!-- logback-classic -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
<!-- logback-core -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.3</version>
</dependency>

在这里插入图片描述


3、导入SQL脚本

-- 创建数据库
drop database if exists `mybatis`;
create database `mybatis` character set = utf8;

use mybatis;

-- 创建数据表
create table `user`(
	`id` int auto_increment primary key comment '编号',
	`name` varchar(20) unique comment '姓名', -- 唯一约束
	`pwd` varchar(20) comment '密码',
	`gender` char(1) comment '性别',
	`addr` varchar(30) comment '家庭住址'
)engine=innodb default charset=utf8;

-- 插入数据
insert into user(name,pwd,gender,addr) values
("张三","123456",'男',"北京"),
("李四","123456",'女',"南京"),
("王五","777777",'男',"杭州"),
("赵六","123456",'女',"温州"),
("陈七","666666",'男',"黑河");

在这里插入图片描述


4、编写实体类

package com.baidou.pojo;

/**
 * 用户实体类
 *
 * @author 白豆五
 * @version 2022/11/30 11:07
 * @since JDK8
 */
public class User {
    private Integer id;  // 编号
    private String name; // 姓名
    private String pwd;  // 密码
    private char gender; // 性别
    private String addr; // 家庭住址

    // 满参构造方法
    public User(Integer id, String name, String pwd, char gender, String addr) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
        this.gender = gender;
        this.addr = addr;
    }

    // 无参构造方法
    public User() {
    }

    // set/get方法
    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    
    // 重写Object类的toString方法,返回对象里的内容
    // Object类的toString方法返回的是对象的地址值,即: "类的全限定名@十六进制的哈希码"
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                ", gender=" + gender +
                ", addr='" + addr + '\'' +
                '}';
    }
}

在这里插入图片描述

5、编写mapper接口

package com.baidou.mapper;

import com.baidou.pojo.User;

import java.util.List;

/**
 * 基于MyBatis实现用户接口
 * mapper、dao都是对数据库进行持久化操作的(crud)
 */
public interface UserMapper {
    // 查询所有用户
    List<User> selectAll();
}

在这里插入图片描述

6、编写UserMapper.xml(SQL映射文件)

参考MyBatis官网的入门案例:https://mybatis.org/mybatis-3/zh/getting-started.html

在这里插入图片描述

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?> <!--xml文档声明-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
    引入外部的dtd约束:  <!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置">
           根标签:         mapper
           dtd文件名:      -//mybatis.org//DTD Mapper 3.0//EN
           dtd文件的位置:  https://mybatis.org/dtd/mybatis-3-mapper.dtd
-->


<!--
    mapper根标签:映射器
         namespace:名称空间,用来绑定对应的mapper接口
-->
<mapper namespace="com.baidou.mapper.UserMapper">
    <!--
        select标签: selct查询语句
             id: 是这里的唯一标识用来绑定接口中对应的方法
             resultType: 返回值类型
    -->
    <select id="selectAll" resultType="com.baidou.pojo.User">
        select * from user
    </select>
</mapper>

7、编写MyBatis核心配置文件

参考MyBatis官网的入门案例:https://mybatis.org/mybatis-3/zh/getting-started.html

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

<?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">

<!--mybatis核心配置文件-->
<configuration>
    <!--可以多环境切换
		 default="development"
    -->
    <environments default="development">
    	<!--开发环境-->
        <environment id="development">
            <!--事务管理-->
            <transactionManager type="JDBC"/>
            <!--数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--映射器-->
    <mappers>
        <!--之后mapper的配置文件需要在这里注册-->
        <mapper resource="com/baidou/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

8、编写logback.xml日志配置文件

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!-- 配置文件修改时重新加载,默认true -->
<configuration scan="true">

    <!--控制台输出-->  
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">                
        <encoder> 
            <!-- 输出的日志格式 -->
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg%n</pattern>   
        </encoder>    
    </appender>

    <!--level:用来设置日志输出级别,OFF FATAL ERROR WARN INFO DEBUG TRACE ALL,默认DEBUG-->
    <logger name="com.baidou" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

9、编写测试

import com.baidou.mapper.UserMapper;
import com.baidou.pojo.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 org.junit.Test;

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

/**
 * mybatis快速入门
 * @author 白豆五
 * @version 2022/11/30 12:55
 * @since JDK8
 */
public class MyTest {

    /**
     * 方式一: 使用qlSession.selectList()查询所有用户(旧版mybatis的API,不推荐使用)
     * @throws IOException
     */
    @Test
    public void test1() throws IOException {
        // 1、加载mybatis核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

        // 2、获取对应的SqlSession对象,用来执行sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3、执行sql语句,  selectList()方法的参数是一个字符串,该字符串必须是映射配置文件的 namespace.id
        List<User> list = sqlSession.selectList("com.baidou.mapper.UserMapper.selectAll");
        // 输出结果
        for (User user :
                list) {
            System.out.println(user);
        }
        // 4、释放资源
        sqlSession.close();
    }

    /**
     * 使用Mapper代理开发,查询所有用户
     * @throws IOException
     */
    @Test
    public void test2() throws IOException {
        // 1、加载Mybatis核心配置文件,获取SqlSessionFactory对象
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 2、获取对应的SqlSession对象,用来执行sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 3、获取mapper,来调用mapper中的方法
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();
        users.forEach(System.out::println);
        // 4、关闭SqlSession
        sqlSession.close();
    }
}

test1()方法执行结果:
在这里插入图片描述

test2()方法执行结果:
在这里插入图片描述

  • 第一种方式:sqlSession.selectList()需要传入映射文件的名称空间和查询语句的id(即 "namespace.id"),然后它每次返回的类型都是Object,会存在类型转换问题,导致不太安全。
  • 第二种方式:sqlSession.getMapper(),更灵活的使用方法,不依赖上述的字符串字面值而且安全,只需传参UserMapper.class,返回的是mapper接口的代理对象,然后通过mapper调用对应方法完成sql的执行。

官网解释:
在这里插入图片描述



三、MyBatis配置文件详解


MyBatis核心配置文件:mybatis-config.xml

MyBatis映射配置文件:XxxMapper.xml

后期在使用MyBatis框架做数据库操作(持久化操作)会经常使用这两个配置文件。

当然我们也可以在这个XML的dtd约束文件中查看相应的配置:

在这里插入图片描述


1. MyBatis核心配置文件


核心配置文件(mybatis-config.xml)的层级结构如下:

在这里插入图片描述

注:配置每个标签时,需要遵守前后顺序!


1.1 configuration(配置)


configuration表示核心配置文件的根标签。

在这里插入图片描述


1.2 properties(属性)


  • properties属性可以引用外部配置文件;
  • properties属性也可以在内部增加一些属性配置;
  • 如果两个文件有共同的字段,会优先使用外部配置文件的!

1、编写db.properties配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8
username=root
password=123456

2、在mybatis-config.xml中引用db.properties

<?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>
    <!--引入外部配置文件-->
    <properties resource="db.properties"/>

    <environments default="development">
        <environment id="development">
            <!--事务管理-->
            <transactionManager type="JDBC"/>
            <!--配置数据库连接信息-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--映射器-->
    <mappers>
        <!--<mapper resource="com/baidou/mapper/UserMapper.xml"/>-->
        <package name="com.baidou.mapper"/>
    </mappers>
</configuration>

1.3 environments(环境配置)


  • MyBatis 可以配置多种环境,但每个 SqlSessionFactory 实例只能选择一种环境;
  • 用ID这个唯一标识来切换默认使用的环境,如开发环境、测试环境、生产环境/线上;
  • MyBatis默认的事务管理器是JDBC,后期在Spring中会替换成声明式事务;
  • MyBatis默认连接池是POOLED,后期我们可以使用第三方数据库连接池(如Druid、C3P0等)。

在这里插入图片描述

在公司做项目的时候,如果开发阶段连接开发环境的数据库,那么数据库的配置要管运维或者DBA的同事要。


1.4 typeAliases(类型别名)


类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写;

使用场景:1、给实体类起别名(跟map挺像,K-V键值对)

<typeAliases>
    <typeAlias type="com.baidou.pojo.User" alias="user"/>
</typeAliases>

使用场景:2、扫描实体类的包,它的的默认别名为类名,首字母小写

<typeAliases>
    <package name="com.baidou.pojo"/>
</typeAliases>

在实体类比较少的时候使用第一种方式,如果实体类比较多建议使用第二种方式!

区别:第一种可以自定义别名,第二种它就不行(如果非要改 需要在实体类上增加@Alias注解)。


下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

1.5 settings(设置)


在MyBatis全局配置文件中通过<settings>标签控制MyBatis全局开关。

MyBatis的设置:https://mybatis.org/mybatis-3/zh/configuration.html#settings

在这里插入图片描述


示例:在mybatis-config.xml配置日志输出

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

1.6 mappers(映射器)


mappers(映射器)的作用是告诉 MyBatis 到哪里去找映射文件;

使用场景:1. 使用相对于类路径的资源引用(推荐使用)

<!-- 每一个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

使用场景:2. 使用映射器接口实现类绑定注册

<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>

使用场景:3. 使用包扫描进行注入绑定

<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

注:接口和它的配置文件必须同名,接口和它的映射文件必须在同级包下(SQL映射文件可以放在src目录中,也可以放在resources目录中 );


1.7 其它配置


  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • databaseIdProvider(数据库厂商标识)

2. MyBatis映射配置文件


MyBatis 真正强大之处在于它的语句映射,这是它的魔力所在。由于它的功能强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于写SQL代码😥。

SQL 映射配置文件标签结构如下:

  • mapper – 作为映射配置文件的根标签,namespace属性值就是绑定mapper接口的全限定名(包名.接口名)。
    • cache – 该命名空间的缓存配置。
    • cache-ref – 引用其它命名空间的缓存配置。
    • resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
    • parameterMap – 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。
    • sql – 可被其它语句引用的可重用语句块。
    • select – 映射查询语句,resultType – SQL语句执行的返回值;parameterType – 参数类型;
    • insert – 映射插入语句。
    • update – 映射更新语句。
    • delete – 映射删除语句。

在mapper接口中定义方法,方法名就是该SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致;

在这里插入图片描述


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

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

相关文章

vue项目 element UI input框扫码枪扫描过快 出现数据丢失问题(已解决二)

项目需求: 输入框要掉两个接口&#xff0c;根据第一个验证接口返回的code&#xff0c;弹不同的框&#xff0c;点击弹框确认再掉第二个接口 根据客户现场反应&#xff0c;扫描枪快速扫描会出现 料号前几位字符丢失 不完整的问题。于是开始了测试之路。 解决方案探索 1.首先考…

数据可视化,销量第一的新能源汽车是什么?比亚迪新能源汽车销量接近60万辆

去年以来&#xff0c;新能源汽车火热度席卷全球&#xff0c;中国的新能源汽车无论制造或者销售&#xff0c;数量增长迅猛。下面小编用一款数据可视化软件&#xff0c;带你用可视化数据解读高端制造背后&#xff0c;中国新能源汽车的具体销售情况。同样如果你工作上有数据报表需…

[附源码]计算机毕业设计springboot酒店物联网平台系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

全国省市县 经纬度的 json数据(提供原文件),写Java代码,入库(提供代码)

目录 1 需求2 分析1 需求 有一个全国省市县 经纬度的 json数据,我想要使用代码入库 如何操作,代码咋写 2 分析 首先分析json结构, 一般拿到一个json数据,如果最外层不是 { } 包裹的,那么自己手动加一个 以上这个是自己加的,这个就是key 值就是list 集合 分析完json数…

【并发】深入理解Java线程的底层原理

线程基础知识 线程与进程 进程 操作系统会以进程为单位&#xff0c;分配系统资源&#xff08;CPU时间片、内存等资源&#xff09;&#xff0c;进程是资源分配的最小单位。 当一个程序被运行&#xff0c;从磁盘加载这个程序的代码至内存&#xff0c;这时就开启了一个进程。 线…

LDcad零件新增与导入

LDcad大颗粒小颗粒套装导入方法&#xff0c;以后LDcad也可以用套装搭建模型了。 LDcad大颗粒小颗粒套装导入方法&#xff0c; 以后LDcad也可以用套装搭建模型了。 有个遗憾&#xff0c;就是零件不全。 具体导入方法看下文。 我们可以看到。这些套装都有对应的图标。方便…

环境温湿度在线监测如何实现?有何应用场景?

温度、湿度等环境数据与人们生活生产息息相关。温湿度传感器作为能将温度量和湿度量转换成容易被测量处理的电信号的设备或装置&#xff0c;广泛应用于工农业生产、气象、环保、国防、科研等经常需要对环境或设备的温度与湿度进行测量的领域&#xff0c;因此也产生了对温湿度远…

ASP.NET Core 3.1系列(15)——Entity Framework Core之DB First

1、前言 本文开始介绍一些关于Entity Framework Core的内容。在EFCore中&#xff0c;常用的为DB First模式和Code First模式&#xff0c;下面就来介绍一下如何在EFCore中使用DB First模式生成实体类和数据库上下文。 2、创建测试数据库 在SQL Server中新建一个数据库Dao&…

2016-04《信息资源管理 02378》真卷解析,逐题解析+背诵技巧

本系列博客合计 21 篇&#xff0c;每篇都将解析一张《信息资源管理》真卷&#xff0c;并附带答案解析与背诵技巧。 全国 2016 年 4 月自学考试信息资源管理试题&#xff08;02378&#xff09; 单选题 1、按信息表现形式划分&#xff0c;信息可分为&#xff08;C&#xff09; …

JavaScript的Web api接口

JavaScript的Web api 文章目录JavaScript的Web api选中元素事件操作元素获取/元素内容获取/修改元素属性获取/修改表单元素属性实现一个显示/隐藏 密码的功能实现一个加减计算器复选框全选/全不选获取/修改样式属性点击文字放大字体实现白天模式与夜间模式的切换操作节点新增节…

【附源码】计算机毕业设计JAVA住房公积金筹集子系统的网站系统

【附源码】计算机毕业设计JAVA住房公积金筹集子系统的网站系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xf…

3D漫游:所见即所得的形式,构建线上数字展厅

企业在数字化转型的大环境下&#xff0c;较为常用的当属数字展厅了&#xff0c;数字展厅能够为企业、行业协会、展销基地以及体验中心助力&#xff0c;以所见即所得的形式构建线上数字空间&#xff0c;满足企业的数字化展示和数字化营销。3D漫游&#xff0c;更加沉浸式的三维空…

使用 Hibernate Envers 进行实体审计

业务应用程序中的常见要求是在特定数据更改时存储版本控制信息;当某事发生变化时&#xff0c;谁改变了它&#xff0c;改变了什么。在这篇博文中&#xff0c;我们将介绍Hibernate Envers&#xff0c;它是Hibernate JPA库的一个组件&#xff0c;它为实体类提供了一个简单的审计/版…

【Linux网络配置实战】服务器Network静态路由配置

【Linux网络配置实战】服务器Network静态路由配置一、环境介绍1.环境规划2.实验目的二、检查各节点IP地址1.检查server01服务器上2.检查server02服务器网卡3.检查route01上的网卡三、在route01上启动IP包转发四、查看当前两节点互通情况1.查看server01和server02连通状态2.查看…

新手小白可以做什么互联网项目,副业项目应该怎么选择

现在网上的信息这么冗杂&#xff0c;有没有可靠的副业项目呢&#xff1f;怎样才能找到适合自己的副业呢&#xff1f; 说实话&#xff0c;在网上找副业并不难&#xff0c;搜索一下就会出来很多&#xff0c;但新手小白不知道如何选择&#xff0c;导致焦虑&#xff0c;一个重要的…

helm2.0安装及部署

一、helm简介 Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart&#xff0c;一个Chart是一个目录&#xff08;一般情况下会将目录进行打包压缩&#xff0c;形成name-version.tgz格式的单一文件&#xff0c;方便传输和存储&#xff09…

Linux 如何设置代理

安装部署 clash 是一款用 Go 语言开发的软件&#xff0c;所以我可以直接下载预编译的版本进行部署。 下载地址&#xff1a;https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz软件的作者提供了多种架构下预编译的二进制文件&#xff0…

67 - 经典问题解析五(指针的判别 构造中的异常)

---- 整理自狄泰软件唐佐林老师课程 1. 问题一 编写程序判断一个变量是不是指针&#xff1f; 1.1 指针的判别 C中仍然支持C语言中的可变参数函数C编译器的 匹配调用 优先级&#xff1a;重载函数 > 函数模板 > 变参函数 #include <iostream> #include <strin…

16-JavaSE基础巩固项目:拼图小游戏

阶段项目-拼图小游戏 一、项目介绍 1、目的 锻炼逻辑思维能力&#xff0c;让我们知道前面学习的知识点在实际开发中的应用场景。 1、为了学习一个新知识&#xff1a;GUI GUI全称&#xff1a;Graphical User Interface&#xff08;又称图形用户接口&#xff09;是指采用图形化…

三维地质建模数据处理

三维地质建模计算在地质工程、地球物理、矿产勘查等领域获得了广泛的应用&#xff0c;常用软件包括GOCAD、Surpac、XModel、DMine等。通过三维地质建模&#xff0c;既可以表达空间几何对象&#xff0c;也可以表现空间属性分布&#xff0c;进而实现地下三维空间可视化、地质解释…