MyBatis-Plus-扩展操作(3)

news2025/1/23 17:37:07

3.扩展

代码生成
逻辑删除
枚举处理器
json处理器
配置加密
分页插件

3.1 代码生成

https://blog.csdn.net/weixin_41957626/article/details/132651552

下载下面的插件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
红色的是刚刚生成的。
在这里插入图片描述
我觉得不如官方的那个好用,唯一的好处就是勾选的选项能够看的懂得。

3.2逻辑删除

不是真的删除是进行uupdate的操作,把对应的标志位设置为对应的标志就可以的

mp中可以采用全局的配置设置对应的逻辑删除的操作达到和原先逻辑删除一样的方式。

下面是全局的配置。

  global-config:
    db-config:
      logic-delete-field: flag #全局删除的实体的字段名
      logic-delete-value: 1 #逻辑删除值
      logic-not-delete-value: 0 #逻辑未删除的值

说明所有的 表的都是基于下面的格式的。

可以在指定的表的字段上进行设置逻辑删除的字段需要进行单独的设置的。

在数据库中添加逻辑删除的字段。
在这里插入图片描述
测试对address的逻辑删除

 @Test
    void tes61(){
      boolean flag=  addressService.removeById(59L);
      System.out.println("删除的结果="+flag);
    }

删除的结果

JDBC Connection [HikariProxyConnection@118887511 wrapping com.mysql.cj.jdbc.ConnectionImpl@38ee7a9d] will not be managed by Spring
==>  Preparing: UPDATE address SET deleted=1 WHERE id=? AND deleted=0
==> Parameters: 59(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@39c96e48]
删除的结果=true

在这里插入图片描述
此时进行查询的时候查询不到

   @Test
    void tes62(){
        Address address=  addressService.getById(59L);
        System.out.println("address="+address);
    }

查询的结果

JDBC Connection [HikariProxyConnection@571251299 wrapping com.mysql.cj.jdbc.ConnectionImpl@55b5cd2b] will not be managed by Spring
==>  Preparing: SELECT id,user_id,province,city,town,mobile,street,contact,is_default,notes,deleted FROM address WHERE id=? AND deleted=0
==> Parameters: 59(Long)
<==      Total: 0
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@ebe067d]
address=null

此时我们进行逻辑删除的内容找不到了

数据库中的逻辑删除字段类型的设置

可以采用位的方式,也可以采用int的类型。

  • 采用这两种方式的显示的方式是不一样的

采用int的类型
在这里插入图片描述
此时在idea中显示的就是0和1,在代码的设计上需要注意一个问题false需要和0进行对应,1需要和true进行对应。

采用位的类型也是相似的道理但是直接显示的时候是不同的。
在这里插入图片描述
在这里插入图片描述
采用位的时候需要进行转义。

  @Test
    void tes63(){
        Address address=  addressService.getById(60L);
        System.out.println("address="+address);
    }

==>  Preparing: SELECT id,user_id,province,city,town,mobile,street,contact,is_default,notes,deleted FROM address WHERE id=? AND deleted=0
==> Parameters: 60(Long)
<==    Columns: id, user_id, province, city, town, mobile, street, contact, is_default, notes, deleted
<==        Row: 60, 1, 北京, 北京, 朝阳区, 13700221122, 修正大厦, Jack, 0, null, 0
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@205df5dc]
address=Address(id=60, userId=1, province=北京, city=北京, town=朝阳区, mobile=13700221122, street=修正大厦, contact=Jack, isDefault=false, notes=null, deleted=false)

3.3枚举处理器

像是状态的字段可以采用对应的状态转换器进行转换。

枚举类型是比常量更加标准的数据的类型。

    /**
     * 使用状态(1正常 2冻结)
     */
    private Integer status;

从枚举类中进行插入的时候需要时候不推荐间接调用的方式。有没有一种方式可以直接枚举类型的转换呢。

mp原先就帮我们定义好了对应的枚举类型的处理器。我们直接进行调用就可以了。

下面是原先类的属性和枚举类的对应的关系。

在这里插入图片描述
基本操作

  • 定义一个枚举类
//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {
    NORMAL(1,"正常"),
    FREEZE(2,"冻结");
    @EnumValue
    private final int value;
    private final String desc;
}
  • 配置mp设置一个枚举类型的处理器
mybatis-plus:
  configuration:
    default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
  • 修改实体类
//    private Integer status;
    private UserStatus status;
  • 测试
@Test
void tes64(){
    User user=new User();
    user.setUsername("赵天");
    user.setPassword("123456");
    user.setPhone("102");
    JSONObject jsonObject=new JSONObject();
    //hutool中的
    jsonObject.set("age",20);
    jsonObject.set("intro","伏地魔");
    jsonObject.set("gender","female");
    user.setInfo(jsonObject.toString());
    user.setStatus(UserStatus.NORMAL);
    user.setBalance(2000);
    user.setCreateTime(DateTime.now());
    user.setUpdateTime(DateTime.now());
   boolean flag= userService.save(user);
   System.out.println("是否插入成功="+flag);
}
  • 结果
JDBC Connection [HikariProxyConnection@1844349670 wrapping com.mysql.cj.jdbc.ConnectionImpl@5af64ce0] will not be managed by Spring
==>  Preparing: INSERT INTO user ( username, password, phone, info, status, balance, create_time, update_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: 赵天(String), 123456(String), 102(String), {"age":20,"intro":"伏地魔","gender":"female"}(String), 1(Integer), 2000(Integer), 2023-09-03 16:55:18.777(Timestamp), 2023-09-03 16:55:18.778(Timestamp)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@345d053b]
是否插入成功=true

在这里插入图片描述

@Test
void tes65(){
    User user=userService.lambdaQuery()
            .eq(User::getUsername,"赵天").one();
    System.out.println(user.toString());
}

查询出来的结果
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info={"age": 20, "intro": "伏地魔", "gender": "female"}, status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)

3.4JSON处理器

如何将json字符串转换成对应的类的对象

在这里插入图片描述
数据库info的字段类型就是json

在这里插入图片描述
这个不是全局的。mvc底层最长用的就是jackson的不是json的类型处理器。

  • 原先采用的是下面的数据类型
    private Object info;
  • 现在需要改成下面的数据类型,并添加对应的类型处理器
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;
  • 创建一个实体类
@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
public class UserInfo implements Serializable {
    private Integer age;
    private String intro;
    private String gender;
}

  • 此时进行查询的操作
    @Test
    void tes65(){
        User user=userService.lambdaQuery()
                .eq(User::getUsername,"赵天").one();
        System.out.println(user.toString());
    }
  • 结果:此时查询出来的info的值是null。
JDBC Connection [HikariProxyConnection@1451516720 wrapping com.mysql.cj.jdbc.ConnectionImpl@49f3ff41] will not be managed by Spring
==>  Preparing: SELECT id,username,password,phone,info,status,balance,create_time,update_time FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<==    Columns: id, username, password, phone, info, status, balance, create_time, update_time
<==        Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d099323]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=null, status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)

出现上面的原因是我们没有设置resultMap的值

最简单的解决的方式:设置自动映射。

@TableName(value ="user",autoResultMap = true)

此时查询的值就出现了。

JDBC Connection [HikariProxyConnection@998015174 wrapping com.mysql.cj.jdbc.ConnectionImpl@3b2e5c0d] will not be managed by Spring
==>  Preparing: SELECT id,username,password,phone,info,status,balance,create_time,update_time FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<==    Columns: id, username, password, phone, info, status, balance, create_time, update_time
<==        Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7c1447b5]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=UserInfo(age=20, intro=伏地魔, gender=female), status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)

或者是采用自己指定的方式

@TableName(value ="user",resultMap = "BaseResultMap")
<resultMap id="BaseResultMap" type="com.lxz.demo.domain.User">
    <id property="id" column="id" jdbcType="BIGINT"/>
    <result property="username" column="username" jdbcType="VARCHAR"/>
    <result property="password" column="password" jdbcType="VARCHAR"/>
    <result property="phone" column="phone" jdbcType="VARCHAR"/>
    <result property="info" column="info" jdbcType="OTHER" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
    <result property="status" column="status" jdbcType="INTEGER"/>
    <result property="balance" column="balance" jdbcType="INTEGER"/>
    <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>

3.5配置加密

mp默认是提供一个aes算法的加密的工具,对配置中的敏感信息做加密处理

生成加密的账号和密码

    @Test
    public void test1(){
        //生成16位随机aes密钥
        String randomKey= AES.generateRandomKey();
        System.out.println("randomKey="+randomKey);

        //利用密钥对用户名和密码进行加密
        String username=AES.encrypt("root",randomKey);
        System.out.println("username="+username);

        //利用密钥对密码加密
        String password=AES.encrypt("root",randomKey);
        System.out.println("password="+password);
    }

下面是生成的加密的账号和密码以及用于加密和解密的密钥:

randomKey=19cb291382b38782
username=ebMDrqWwkpNR9jkM+2x5Iw==
password=ebMDrqWwkpNR9jkM+2x5Iw==

将加密之后的配置到配置文件中

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mp?useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    username: mpw:ebMDrqWwkpNR9jkM+2x5Iw== #加密
    password: mpw:ebMDrqWwkpNR9jkM+2x5Iw== #加密
    driver-class-name: com.mysql.cj.jdbc.Driver

启动的时候加上对应的启动的参数

  • 要是单元测试的话就在下面设置上下面的内容
@SpringBootTest(args = "--mpw.key=19cb291382b38782")
  • 不是单元测试的话需要设置下面的内容

在这里插入图片描述
测试代码

  @Test
    void tes65(){
        User user=userService.lambdaQuery()
                .eq(User::getUsername,"赵天").one();
        System.out.println(user.toString());
    }
    
查询结果:
JDBC Connection [HikariProxyConnection@180949634 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f79edee] will not be managed by Spring
==>  Preparing: SELECT * FROM user WHERE (username = ?)
==> Parameters: 赵天(String)
<==    Columns: id, username, password, phone, info, status, balance, create_time, update_time
<==        Row: 1674613593516396924, 赵天, 123456, 102, <<BLOB>>, 1, 2000, 2023-09-03 16:55:19, 2023-09-03 16:55:19
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@568750b7]
User(id=1674613593516396924, username=赵天, password=123456, phone=102, info=UserInfo(age=20, intro=伏地魔, gender=female), status=NORMAL, balance=2000, createTime=Sun Sep 03 16:55:19 CST 2023, updateTime=Sun Sep 03 16:55:19 CST 2023)

说明解密的密码成功了。

4.插件功能

本质是拦截器功能

4.1分页插件

下面是常见的内容
在这里插入图片描述
编写配置类

@Configuration
//@MapperScan("com.lxz.demo.mapper")
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
        return interceptor;
    }
}

测试简单的分页

 @Test
    void tes65(){
        //分页参数
        Integer pageNum=1;
        Integer pageSize=10;
        //分页对象
        Page<User> page=new Page<User>(pageNum, pageSize);

        //排序
        page.addOrder(new OrderItem("username",false));
        //其他参数
         page=userService.page(page);
        Long count=page.getTotal();
        List<User> result=page.getRecords();
        System.out.println("count="+count);
        result.forEach(System.out::println);
    }

在这里插入图片描述

 //排序 这个是升序
        page.addOrder(new OrderItem("username",true));

有查询条件的

 page=userService.page(page,null);

4.2分页案例

接口内容:

在这里插入图片描述
补全实体:

  • 请求参数
package com.lxz.demo.domain.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

//返回结果
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageVo<T> implements Serializable {

    private Long total;
    private Long pages;
    /*
    * 采用泛型是最好的
    * */
    private List<T> list;

}

  • 返回参数
package com.lxz.demo.domain.vo;

import com.lxz.demo.domain.UserInfo;
import com.lxz.demo.enums.UserStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

//返回结果
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserVo implements Serializable {

    private Long id;
    private String username;

    private UserInfo info;

    private UserStatus status;

    private Long balance;


}

  • 接口类
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/page")
    public PageVo<UserVo> queryUserByPage(@RequestBody  PageQuery query){
        return userService.queryUserByPage(query);
    }

}

或者

区别在于注入的方式是不同的

@RestController
@RequestMapping("/users2")
@RequiredArgsConstructor
public class UserController2 {


    private final UserService userService;

    @PostMapping("/page")
    public PageVo<UserVo> queryUserByPage(@RequestBody  PageQuery query){
        return userService.queryUserByPage(query);
    }
}

  • 服务层
public interface UserService extends IService<User> {

    PageVo<UserVo> queryUserByPage(PageQuery query);
}

 @Autowired
    private UserMapper userMapper;

    @Override
    public PageVo<UserVo> queryUserByPage(PageQuery query) {
        // mapper.selectPage() 都是可以的
        Page<User> page=Page.of(query.getPageNo(),query.getPageSize());
        if (!StrUtil.isBlank(query.getSortBy())){
            page.addOrder(new OrderItem(query.getSortBy(),query.getIsAsc()));
        }
        page=userMapper.selectPage(page,null);
        Long pages=page.getPages();
        Long total=page.getTotal();
        List<User> list=page.getRecords();
        PageVo pageVo=new PageVo();
        pageVo.setPages(pages);
        pageVo.setTotal(total);
        pageVo.setList(list);

        if (CollUtil.isEmpty(list)){
            //没有数据直接返回
            return new PageVo(page.getTotal(),page.getPages(), Collections.emptyList());
        }else {
            //转换Vo的方法
           List<UserVo> userVos= BeanUtil.copyToList(list,UserVo.class);
            return new PageVo(page.getTotal(),page.getPages(), userVos);
        }
    }
  • 测试接口
localhost:8081/users/page

{
    "pageNo":"1",
    "pageSize":"5",
    "sortBy":"username",
    "isAsc":"false"
}
  • 查询结果
{
	"total": 100005,
	"pages": 20001,
	"list": [
		{
			"id": 1674613593516396800,
			"username": "赵天",
			"info": {
				"age": 20,
				"intro": "伏地魔",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 2000
		},
		{
			"id": 1674613593516396800,
			"username": "赵六99999",
			"info": {
				"age": 99999,
				"intro": "99999伏地魔",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 2000
		},
		{
			"id": 1674613593516396800,
			"username": "赵六99998",
			"info": {
				"age": 99998,
				"intro": "99998伏地魔",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 2000
		},
		{
			"id": 1674613593516396800,
			"username": "赵六99997",
			"info": {
				"age": 99997,
				"intro": "99997伏地魔",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 2000
		},
		{
			"id": 1674613593516396800,
			"username": "赵六99996",
			"info": {
				"age": 99996,
				"intro": "99996伏地魔",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 2000
		}
	]
}

但是此时的枚举不是我们需要的类型

{
			"id": 2,
			"username": "Rose",
			"info": {
				"age": 19,
				"intro": "青涩少女",
				"gender": "female"
			},
			"status": "NORMAL",
			"balance": 300
		},

在原先的枚举类上加上对应的 @JsonValue注解

//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {
    NORMAL(1,"正常"),
    FREEZE(2,"冻结");
    @EnumValue
    private final int value;
    @JsonValue
    private final String desc;
}

此时返回的内容就是下面的内容

此时把 @JsonValue注解加载desc上

	{
			"id": 3,
			"username": "Hope",
			"info": {
				"age": 25,
				"intro": "上进青年",
				"gender": "male"
			},
			"status": "正常",
			"balance": 99800
		},

要是在value上加上对应的注解的话返回的就是下面的格式的内容

//用户状态信息
@AllArgsConstructor
@Getter
public enum UserStatus {
    NORMAL(1,"正常"),
    FREEZE(2,"冻结");
    @EnumValue
    @JsonValue
    private final int value;
//    @JsonValue
    private final String desc;
}
{
			"id": 1,
			"username": "Jack",
			"info": {
				"age": 20,
				"intro": "佛系青年",
				"gender": "male"
			},
			"status": 2,
			"balance": 0
		},

4.3简化4.2操作

封装分页

    public<T> Page<T> getPage(String defaultSort, Boolean defaultIsAsc){
        //分页插件
        Page<T> p=new Page<T>(pageNo,pageSize);
        if (!StrUtil.isBlank(sortBy)){
            //排序条件
            p.addOrder(new OrderItem(sortBy,isAsc));
        }else { //可以不设置排序可以设置默认的排序
            //默认排序
            p.addOrder(new OrderItem(defaultSort,defaultIsAsc));
        }
        return p;
    }

}

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

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

相关文章

架构图怎么制作?分享5个实用方法!

面对复杂的系统、应用程序或项目&#xff0c;绘制架构图是一种关键的手段&#xff0c;帮助我们清晰地展示各个组件、关系和交互。本文将带你深入了解几种常见的制作架构图的方法&#xff0c;一起看下去吧。 1 手绘和扫描 对于简单的概念&#xff0c;你可以手绘架构图&#…

自考本科,毕业八年,2023浙大MPA提面优秀分享

去年十月中旬&#xff0c;我参加了浙江大学MPA提前批面试。结果出乎意料地&#xff0c;我竟然获得了A资格。对此&#xff0c;我自己也感到难以置信。事实上&#xff0c;我只是抱着试一试的心态递交了申请材料。因为通过我对前几年浙大自划线的情况来看&#xff0c;对于浙江大学…

OSPF协议:优点、初始化流程和管理

文章目录 一、RIP的缺陷二、定义三、OSPF初始化流程1. 建立邻居和邻接关系2. 邻接路由器之间交换链路状态信息&#xff0c;实现区域内链路状态数据库同步3. 每台路由器根据本机链路状态数据库&#xff0c;计算到达每个目的网段的最优路由&#xff0c;写入路由表 四、OSPF分区域…

自媒体MCN公司选择企业云盘:哪个更适合?

自媒体MCN公司用什么企业云盘好&#xff1f;Zoho WorkDive企业网盘助力内容创作与MCN公司进行文件储存与管理。 一、MCN公司业务背景 A公司是一家处于蓬勃发展的MCN(多频道网络)机构&#xff0c;其业务范围广泛且多元化。A公司为文化娱乐行业提供经纪人服务&#xff0c;帮助艺人…

软考备考-程序员-备考笔记

软考备考-程序员-备考笔记 持续更新中》》》》》 更新日志&#xff1a; 刷题软件&#xff1a; 希赛网&#xff1a;每日一练和往年真题是免费的 软考通&#xff1a;完全免费 软考真题&#xff1a;完全免费 51CTO题库:微信小程序&#xff0c;不用下载&#xff0c;顺手 试卷题…

Java集合大总结——Map集合

Map集合框架 1、Map集合框架1.1 关于Map接口中的主要实现类1.2 各实现类的特点&#xff1a; 2. HashMap 和 Hashtable 的区别3. HashMap 和 HashSet 区别4. HashMap 和 TreeMap 区别 1、Map集合框架 注意&#xff1a;Map接口是在java.util.Map 的包下&#xff0c;Map 接口不是…

深度学习面试八股文(2023.9.06)

一、优化器 1、SGD是什么&#xff1f; 批梯度下降&#xff08;Batch gradient descent&#xff09;&#xff1a;遍历全部数据集算一次损失函数&#xff0c;计算量开销大&#xff0c;计算速度慢&#xff0c;不支持在线学习。随机梯度下降&#xff08;Stochastic gradient desc…

知识库搭建最简单的方法:登录、创建、优化,就这三步!

实际应用中&#xff0c;企业所需要的知识库场景不止一个&#xff0c;更多是很多场景的复合模式&#xff0c;甚至还需要不同团队间的协作配合&#xff0c;这个时候就还需要去考虑不同部门/团队间的业务拉通。 搭建知识库 所以当我们搭建知识库的时候&#xff0c;不仅要掌握基础…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度&#xff1a; O&#xff1a;读作big O&#xff0c;在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。时间复杂度为一个算法流程中&#xff0c;常数操作数量的一…

docker系列(1) - docker环境篇

文章目录 1. docker环境1.1 docker安装1.2 阿里云镜像加速器1.2 docker管理工具(portainer)1.3 docker网络1.3.1 网络说明1.3.2 创建指定网关的网络 1. docker环境 1.1 docker安装 #CentOS 6 rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noar…

windows10系统-14-VirtualBox中的设置

VirtualBox 常用设置说明 Ubuntu-server18.04.2LTS安装VirtualBox增强功能 VirtualBox官网 使用VirtualBox一步一步安装Ubuntu 22.04 ubuntu server官网安装教程 1 新建虚拟机 (1)点击新建&#xff0c;在新建虚拟电脑对话框填入虚拟电脑的名称&#xff0c;保存的位置。推荐保…

代码随想录第41天| 343.整数拆分,96.不同的二叉搜索树

343.整数拆分 这道题全程懵逼 343. 整数拆分 class Solution {public int integerBreak(int n) {//推论一&#xff1a; 若拆分的数量 a 确定&#xff0c; 则 各拆分数字相等时 &#xff0c;乘积最大。//推论二&#xff1a; 将数字 n尽可能以因子 3等分时&#xff0c;乘积最大…

ElementPlus·面包屑导航实现

面包屑导航 使用vue3中的UI框架elementPlus的 <el-breadcrumb> 实现面包屑导航 <template><!-- 面包屑 --><div class"bread-container" ><el-breadcrumb separator">"><el-breadcrumb-item :to"{ path:/ }&quo…

apt安装yum

配置apt国内镜像源 /etc/apt/sources.list deb https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ trusty-…

19 螺旋矩阵

螺旋矩阵 题解1 循环&#xff08;4个标志——根据顺时针&#xff09;题解2 方向 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 提示&#xff1a; - m matrix.length - n matrix[i].length - 1 < m, n <…

LVS NAT模式负载均衡群集部署

目录 1 群集(集群) cluster 1.1 群集的类型 2 LVS的工作模式及其工作过程 2.1 NAT模式&#xff08;VS-NAT&#xff09; 2.2 直接路由模式&#xff08;VS-DR&#xff09; 2.3 IP隧道模式&#xff08;VS-TUN&#xff09; 3 LVS-NAt 模式配置步骤 3.1 部署共享存储 3.2 配…

【全网最全protobuf中文版教程】

protocal buffer Notes 文章目录 protocal buffer Notes为什么是ProtoBufprotoBuf数据要素字段编号标签字段类型标量枚举复合类型mapgroup 导入其他消息类型编码解码编码解码 proto生成文件 为什么是ProtoBuf 通常&#xff0c;程序运行时产生的一些结构化数据会经历存储或者与…

基于Java+SpringBoot+Vue校园求职招聘系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行&#xff0c;\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

docker系列(5) - docker仓库

文章目录 5 docker仓库5.1 创建命名空间5.2 创建镜像仓库5.3 设置访问凭证5.3 镜像仓库命令信息5.4 登录阿里云上传镜像5.5 拉取镜像运行5.6 私有仓库(docker Registry)5.6.1 安装docker registry5.6.2 准备镜像5.6.2 本地私服仓库5.6.3 推送到私服仓库5.6.4 拉取私服镜像 5 do…