MyBatis-Plus基本CRUD

news2024/9/28 13:24:29

MyBatis-Plus基本CRUD

  • 三、基本CRUD
    • 1、BaseMapper
    • 2、插入
    • 3、删除
      • a>通过id删除记录
      • b>通过id批量删除记录
      • c>通过map条件删除记录
    • 4、通过id修改一条记录
    • 5、查询
      • a>根据id查询用户信息
      • b>根据多个id查询多个用户信息
      • c>通过map条件查询用户信息
      • d>查询所有数据
    • 6、通用Service
      • a>IService
      • b>创建Service接口和实现类
      • c>测试查询记录数
      • d>测试批量插
  • 四、常用注解
    • 1、@TableName
      • a>问题
      • b>通过@TableName解决问题
      • c>通过全局配置解决问题
    • 2、@TableId
      • a>问题
      • b>通过@TableId解决问题
      • c>@TableId的value属性
      • d>@TableId的type属性
    • 3、@TableField
      • a>情况1
      • b>情况2
    • 4、@TableLogic
      • a>逻辑删除
      • b>实现逻辑删除
  • 五、条件构造器和常用接口
    • 1、wapper介绍
    • 2、QueryWrapper
      • a>例1:组装查询条件
      • b>例2:组装排序条件
      • c>例3:组装删除条件
      • d>例4:条件的优先级
      • e>例5:组装select子句
      • f>例6:实现子查询
    • 3、UpdateWrapper
    • 4、condition

申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10418字,阅读大概需要3分钟
更多学习内容, 欢迎关注我的个人公众号:不懂开发的程序猿

相关阅读:MyBatis-Plus入门案例

三、基本CRUD

1、BaseMapper

MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用

2、插入

    //测试插入
    @Test
    public void testInsert() {
        User user = new User();
        // INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
        user.setName("张三");
        user.setAge(23);
        user.setEmail("zhangsan@qq.com");
        int res = userMapper.insert(user);//打印出来的是受影响的行数

        System.out.println("res: " + res);//res: 1
        System.out.println("id: " + user.getId());//id: 1623636806420439041
    }

最终执行的结果,所获取的id为1623636806420439041

这是因为MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id

3、删除

a>通过id删除记录

    //通过id删除用户信息
    @Test
    public void testDeleteById() {
        //DELETE FROM user WHERE id=?
        int res = userMapper.deleteById(1623636806420439041L);//打印出来的是受影响的行数
        System.out.println("受影响行数:" + res);
    }

b>通过id批量删除记录

    @Test
    public void testDeleteBatchIds(){
        List<Long> idList = Arrays.asList(104L, 105L, 106L);
        //通过多个id批量删除
        //DELETE FROM user WHERE id IN ( ? , ? , ? )
        int i = userMapper.deleteBatchIds(idList);//打印出来的是受影响的行数
        System.out.println("受影响行数:" + i);//受影响行数:3
    }

c>通过map条件删除记录

    //通过map条件删除记录
    @Test
    public void testDeleteByMap(){
        //根据map集合中所设置的条件删除记录
        //DELETE FROM user WHERE name = ? AND age = ?
        Map<String, Object> map = new HashMap<>();
        map.put("age", 18);
        map.put("name", "ls4");
        int i = userMapper.deleteByMap(map);//打印出来的是受影响的行数
        System.out.println("受影响行数:" + i);//受影响行数:1
    }

4、通过id修改一条记录

    @Test
    public void testUpdateById(){
        User user = new User();
        user.setId(6L);
        user.setName("z3");
        user.setAge(23);
        user.setEmail("z3@qq.com");
        //UPDATE user SET name=?, age=? WHERE id=?
        int i = userMapper.updateById(user);//打印出来的是受影响的行数
        System.out.println("受影响行数:" + i);//受影响行数:1
    }

5、查询

a>根据id查询用户信息

    //根据id查询用户信息
    @Test
    public void testSelectById(){
        // SELECT id,name,age,email FROM user WHERE id=?
        User user = userMapper.selectById(4L);
        System.out.println(user);
    }

b>根据多个id查询多个用户信息

    @Test
    public void testSelectBatchIds(){

        List<Long> idList = Arrays.asList(1L, 2L, 3L);
        //SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
        for (User user : userMapper.selectBatchIds(idList)) {
            System.out.println(user);
        }
    }

c>通过map条件查询用户信息

    @Test
    public void testSelectByMap(){
        Map<String,Object> map = new HashMap<>();
        map.put("name", "jerry");
        map.put("age", 21);
        List<User> users = userMapper.selectByMap(map);
        users.forEach(System.out::println);
    }

d>查询所有数据

    @Test
    public void testSelectList(){
        //查询所有用户信息
        //SELECT id,name,age,email FROM user
        List<User> users = userMapper.selectList(null);

        users.forEach(System.out::println);
    }

通过观察BaseMapper中的方法,大多方法中都有Wrapper类型的形参,此为条件构造器,可针 对于SQL语句设置不同的条件,若没有条件,则可以为该形参赋值null,即查询(删除/修改)所有数据

6、通用Service

说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删 除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

  • 泛型 T 为任意实体对象

  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类

  • 官网地址:https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F% A3

a>IService

MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑

详情查看源码IService和ServiceImpl

b>创建Service接口和实现类

/**
 * UserService继承IService模板提供的基础功能
 */
public interface UserService extends IService<User> {
}
/**
 * ServiceImpl实现了IService,提供了IService中基础功能的实现
 * 若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现
 */

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService{
}

c>测试查询记录数

    @Autowired
    UserService userService;

    //测试查询记录数
    @Test
    public void testGetCount() {
        long count = userService.count();
        //SELECT COUNT( * ) FROM user
        System.out.println("总记录数:" + count);
    }

d>测试批量插

    //测试批量插入
    @Test
    public void testSaveBatch() {
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("jerry" + i);
            user.setAge(18 + i);
            users.add(user);
        }
        //INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? )
        userService.saveBatch(users);
    }

四、常用注解

1、@TableName

经过以上的测试,在使用MyBatis-Plus实现基本的CRUD时,我们并没有指定要操作的表,只是在 Mapper接口继承BaseMapper时,设置了泛型User,而操作的表为user表

由此得出结论,MyBatis-Plus在确定操作的表时,由BaseMapper的泛型决定,即实体类型决 定,且默认操作的表名和实体类型的类名一致

a>问题

若实体类类型的类名和要操作的表的表名不一致,会出现什么问题?

我们将表user更名为t_user,测试查询功能 程序抛出异常,Table ‘mybatis_plus.user’ doesn’t exist,因为现在的表名为t_user,而默认操作 的表名和实体类型的类名一致,即user表

b>通过@TableName解决问题

在实体类类型上添加@TableName(“t_user”),标识实体类对应的表,即可成功执行SQL语句

在这里插入图片描述

c>通过全局配置解决问题

在开发的过程中,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tb_

此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就 不需要在每个实体类上通过@TableName标识实体类对应的表

# 配置MyBatis日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
    # 配置MyBatis-Plus操作表的默认前缀
      table-prefix: t_

2、@TableId

经过以上的测试,MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认 基于雪花算法的策略生成id

a>问题

若实体类和表中表示主键的不是id,而是其他字段,例如uid,MyBatis-Plus会自动识别uid为主 键列吗?

我们实体类中的属性id改为uid,将表中的字段id也改为uid,测试添加功能

程序抛出异常,Field ‘uid’ doesn’t have a default value,说明MyBatis-Plus没有将uid作为主键 赋值

b>通过@TableId解决问题

在实体类中uid属性上通过@TableId将其标识为主键,即可成功执行SQL语句

在这里插入图片描述

c>@TableId的value属性

若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解 @TableId,

则抛出异常Unknown column ‘id’ in ‘field list’,即MyBatis-Plus仍然会将id作为表的 主键操作,而表中表示主键的是字段uid

此时需要通过@TableId注解的value属性,指定表中的主键字段,@TableId(“uid”)或 @TableId(value=“uid”)

d>@TableId的type属性

type属性用来定义主键策略

常用的主键策略:

描述
IdType.ASSIGN_ID(默 认)基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
IdType.AUTO使用数据库的自增策略,注意,该类型请确保数据库设置了id自增, 否则无效

配置全局主键策略:

# 配置MyBatis日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
    # 配置MyBatis-Plus操作表的默认前缀
      table-prefix: t_
      # 配置MyBatis-Plus的主键策略
      id-type: auto

3、@TableField

经过以上的测试,我们可以发现,MyBatis-Plus在执行SQL语句时,要保证实体类中的属性名和 表中的字段名一致 如果实体类中的属性名和字段名不一致的情况,会出现什么问题呢?

a>情况1

若实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格

例如实体类属性userName,表中字段user_name

此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格

相当于在MyBatis中配置

b>情况2

若实体类中的属性和表中的字段不满足情况1

例如实体类属性name,表中字段username

此时需要在实体类属性上使用@TableField(“username”)设置属性所对应的字段名

在这里插入图片描述

4、@TableLogic

a>逻辑删除

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除的数据

  • 逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库 中仍旧能看到此条数据记录

  • 使用场景:可以进行数据恢复

b>实现逻辑删除

step1:数据库中创建逻辑删除状态列,设置默认值为0

在这里插入图片描述

step2:实体类中添加逻辑删除属性

在这里插入图片描述

step3:测试

    @Test
    public void test(){
        //UPDATE user SET is_deleted=1 WHERE id=? AND is_deleted=0
        int i = userMapper.deleteById(1623660102079778820L);
        System.out.println("受影响行数:" + i);//受影响行数:1
    }

五、条件构造器和常用接口

1、wapper介绍

2、QueryWrapper

a>例1:组装查询条件

查询用户名包含j,年龄在20到30之间,并且邮箱不为null的用户信息

    //查询用户名包含j,年龄在20到30之间,并且邮箱不为null的用户信息
    @Test
    public void test01(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("name", "j")
                .between("age", 20, 30)
                .isNotNull("email");
        //SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

b>例2:组装排序条件

按年龄降序查询用户,如果年龄相同则按id升序排列

    //按年龄降序查询用户,如果年龄相同则按id升序排列
    @Test
    public void test02(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("id");
        //SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 ORDER BY age DESC,id ASC
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

c>例3:组装删除条件

删除email为空的用户

    @Test
    public void test03(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        //UPDATE user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)
        //条件构造器也可以构建删除语句的条件         
        queryWrapper.isNull("email");
        int delete = userMapper.delete(queryWrapper);
        System.out.println(delete);
    }

d>例4:条件的优先级

//将(年龄大于20并且用户名中包含有a)或邮箱为null的用户信息修改

    @Test
    public void test04(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.gt("age", 20)
                .like("name", "a")
                .or()
                .isNull("email");
        User user = new User();
        user.setAge(20);
        user.setName("Tom1");
        user.setEmail("user@qq.com");
        //UPDATE user SET name=?, age=?, email=? WHERE is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL)
        int i = userMapper.update(user, queryWrapper);
        System.out.println("受影响行数:" + i);//受影响行数:1
    }

e>例5:组装select子句

//查询用户信息的username和age字段

    @Test
    public void test05(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.select("name","age");

        //SELECT name,age FROM user WHERE is_deleted=0
        //selectMaps()返回Map集合列表,通常配合select()使用,避免User对象中没有被查询到的列值为null
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);

        maps.forEach(System.out::println);
    }

f>例6:实现子查询

//查询id小于等于3的用户信息

    //查询id小于等于3的用户信息
    @Test
    public void test06(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (id IN (select id from user where id <= 3))
        queryWrapper.inSql("id", "select id from user where id <= 3");
        List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);
    }

3、UpdateWrapper

​ //将(年龄大于20或邮箱为null)并且用户名中包含有a的用户信息修改

    @Test
    public void test07(){
        UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();

        //UPDATE user SET age=?,email=? WHERE is_deleted=0 AND (name LIKE ? AND (age > ?) OR email IS NULL)
        updateWrapper.set("age", 18)
                .set("email", "admin@qq.com")
                .like("name", "a")
                .and(i->i.gt("age", 18)).or().isNull("email");
        int i = userMapper.update(null, updateWrapper);
        System.out.println("受影响行数:" + i);//受影响行数:1
    }

4、condition

在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因 此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若 没有选择则一定不能组装,以免影响SQL执行的结果

不使用condition的代码

    @Test
    public void test08(){
        //定义查询条件,有可能为null(用户未输入或未选择)
        String name = null;
        Integer ageBegin = 10;
        Integer ageEnd = 24;

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        //StringUtils.isNotBlank()判断某字符串是否不为空且长度不为0且不由空白符(whitespace)构成
        if (StringUtils.isNotBlank(name)){
            queryWrapper.like("name", "a");
        }
        if(ageBegin != null){
            queryWrapper.ge("age", ageBegin);
        }
        if(ageEnd != null){
            queryWrapper.le("age", ageEnd);
        }

        //SELECT id,name,age,email,is_deleted FROM user WHERE is_deleted=0 AND (age >= ? AND age <= ?)
        List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);
    }

使用condition

    @Test
    public void test08Condition() {
        //定义查询条件,有可能为null(用户未输入或未选择)
        String name = null;
        Integer ageBegin = 10;
        Integer ageEnd = 24;

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        queryWrapper.like(StringUtils.isNotBlank(name), "name", "a")
                .gt(ageBegin != null, "age", ageBegin)
                .lt(ageEnd != null, "age", ageEnd);

        List<User> users = userMapper.selectList(queryWrapper);

        users.forEach(System.out::println);
    }

–end–

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

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

相关文章

微软ATP智汇十二道场 · 探索AI 驱动转型(北京专场)

为了推动微软与苏州人工智能产业创新中心共同构建企业级AI创新生态圈&#xff0c;微软ATP定于2023年3月3日在微软亚太研发集团总部&#xff08;北京&#xff09;举办“微软ATP智汇十二道场 探索AI 驱动转型”线下活动。 ▍微软探索AI商用&#xff0c;避免“创新陷阱”ChatGPT …

Lesson 6.6 多分类评估指标的 macro 和 weighted 过程 Lesson 6.7 GridSearchCV 的进阶使用方法

文章目录一、多分类评估指标的 macro 和 weighted 过程1. 多分类 F1-Score 评估指标2. 多分类 ROC-AUC 评估指标二、借助机器学习流构建全域参数搜索空间三、优化评估指标选取1. 高级评估指标的选用方法2. 同时输入多组评估指标四、优化后建模流程在正式讨论关于网格搜索的进阶…

Element UI框架学习篇(六)

Element UI框架学习篇(六) 1 删除数据 1.1 前台核心函数 1.1.1 elementUI中的消息提示框语法 //①其中type类型和el-button中的type类型是一致的,有info灰色,success绿色,danger红色,warning黄色,primary蓝色 //②message是你所要填写的提示信息 //③建议都用,因为比双引号…

字符串装换整数(atoi)-力扣8-java

一、题目描述请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。函数 myAtoi(string s) 的算法如下&#xff1a;读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还未…

合宙ESP32S3-CORE开发板|保姆级|Arduino IDE|windows11|esp32S3支持库|helloword例程:Arduino 环境搭建

Arduino主页网址&#xff1a; Software | Arduino 以windows11版本为例&#xff1a; Arduino IDE最新版本为2.0.3 左边的按钮是直接下载&#xff08;免捐赠&#xff09;&#xff1a; 下载安装完成后&#xff0c;更改软件默认语言&#xff1a; 默认的库是不支持ESP32的&#…

Allegro如何更改铜皮显示密度操作指导

Allegro如何更改铜皮显示密度操作指导 用Allegro做PCB设计的时候,铜皮正常显示模式如下图 铜皮的密度是基本填充满的,Allegro支持更改铜皮的显示密度 如下图 如何更改密度,具体操作如下 点击setup

Element UI框架学习篇(七)

Element UI框架学习篇(七) 1 新增员工 1.1 前台部分 1.1.1 在vue实例的data里面准备好需要的对象以及属性 addStatus:false,//判断是否弹出新增用户弹窗dailog,为true就显示depts:[],//部门信息mgrs:[],//上级领导信息jobs:[],//工作岗位信息//新增用户所需要的对象newEmp:…

Top-1错误率、Top-5错误率等常见的模型算法评估指标解析

Top-1 错误率&#xff1a;指预测输出的概率最高的类别与人工标注的类别相符的准确率&#xff0c;就是你预测的label取最后概率向量里面最大的那一个作为预测结果&#xff0c;如过你的预测结果中概率最大的那个分类正确&#xff0c;则预测正确&#xff0c;否则预测错误。比如预测…

Zabbix 构建监控告警平台(五)

Zabbix 自动发现Zabbix 自动注册1.Zabbix 自动发现 1.1前言 为了满足监控企业成千上万台服务器&#xff0c;因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。 1.2zabbix-server &#xff08;一&#xff09;1、创建自动发现规则 在“配置”->“自动发现”->“…

Spring Boot 快速入门(绝对经典)

目录 1、理论概述 1.1、什么是Spring Boot? 1.2、Spring Boot的特点 1.3、开发环境 2、实战——创建和配置项目 2.1、Spring Boot项目创建的两种方式 2.1.1、方法一&#xff1a;通过网站构建项目 2.1.2、使用Spring Initializr创建&#xff08;推荐&#xff09; 2.2、…

10个SEO 写作的必读小技巧!包你读完写更好创作

我们都知道写作是需要技巧的&#xff0c;目的是为了让读者有兴趣阅读&#xff0c;所以标题跟内容架构都需要清晰的思路。同样的&#xff0c;撰写SEO部落格文章也需要技巧&#xff0c;但拥有的不仅是传统写文章的技巧而已&#xff0c;而需要将Google的排名因素考虑进去。换句话说…

使用VueBarcode结合vueEasyPrint打印条形码标签

目标&#xff1a; 生成标签并实现打印功能 学习步骤&#xff1a; 1、了解 VueBarcode 2、了解 VueEasyPrint 3、VueBarcode 实践 4、VueEasyPrint 实践 5、VueBarcode VueEasyPrint 合体 一、了解 VueBarcode 点击传送至官网 原文介绍&#xff1a; JsBarcode是一个用JavaScr…

电子学会2020年6月青少年软件编程(图形化)等级考试试卷(四级)答案解析

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级A卷&#xff09; 分数&#xff1a;100.00 题数&#xff1a;30 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 1. 执行下图程序后&#xff0c;“花名…

Paper——Diffusion Model前向过程和反向过程详解

文章目录Diffusion过程解析前向过程公式详解每一步增加噪声的求解从起始状态到最终状态的公式反向过程损失函数总结公式Diffusion过程解析 前向和后向相互独立&#xff0c;前向过程使用马尔科夫链实现&#xff0c;反向过程采用神经网络进行预测。 前向过程 输入一个原始图片&…

二叉树的四种遍历方式(二)

接上文《二叉树的四种遍历方式&#xff08;一&#xff09;》&#xff08;https://blog.csdn.net/helloworldchina/article/details/128895188&#xff09;&#xff0c;在本文讲述一下第四种遍历方式&#xff0c;即按层次遍历二叉树。 一 讲解 1 先序遍历二叉树&#xff0c; 见…

【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于知名金融公…

nodejs+vue地铁站自动售票系统-火车票售票系统vscode

地铁站自动售票系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。它使用的是前端技术&#xff1a;nodejsvueelementui 前后端通讯一般都是采取标准的JSON格式来交互。前端技术&#xff1a;nodejsvueelementui,视图层其实质就是…

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…

pip离线安装windows版torch

文章目录前言conda创建虚拟环境安装torchtorch官网在线安装离线手动安装测试是否安装成功后记前言 学习的时候遇到几个机器学习相关的项目&#xff0c;由于不同的项目之间用到的依赖库不太一样&#xff0c;于是想利用conda为不同的项目创建不同的环境方便管理和运行&#xff0…

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数&#xff0c;离散化转换&#xff0c;体重两种情况&#xff1a;标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert, …