MyBatis-Plus

https://baomidou.com/introduce/


依赖

<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>
<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--代码自动生成-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.0</version>
</dependency>

配置

spring:
  # 配置环境
  profiles:
    active: dev
  # 配置数据库连接
  # mysql 8 兼容 mysql 5
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_plus?useSSL=true&useUnicode=true&charsetEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    # 配置日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
  db-config:
    # 配置逻辑删除
    logic-delete-value: 1
    logic-not-delete-value: 0

实体类

public class User {
    // 数据库主键,mybatis-plus默认使用雪花算法生成
    // IdType指定生成策略
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    private String name;
    private Integer age;
    private String email;
    // 乐观锁注解
    @Version
    private Integer version;
    // 插入时自动填充
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;
    // 插入、修改时自动填充
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;
    //逻辑删除
    @TableLogic
    private Integer deleted;
}

持久层

// 注入持久层
@Repository
public interface UserMapper extends BaseMapper<User> {
}

自定义字段填充策略

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    // 插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        // 字段值,字段名,数据类型
        this.setFieldValByName("gmtCreate", new Date(), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
    // 更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}

配置类

// 扫描mapper接口
@MapperScan("com.example.mapper")
// 开启事务
@EnableTransactionManagement
// 配置类
@Configuration
public class MybatisPlusConfig {
    // 注册乐观锁插件
    // 修改前查询version,将version作为判断条件
    // update user set age = ?,version = version + 1 where id = ? and version = ?
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor(){
        return new OptimisticLockerInterceptor();
    }
    // 注册分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }
    // 逻辑删除组件
    @Bean
    public ISqlInjector iSqlInjector(){
        return new LogicSqlInjector();
    }
    // SQL执行效率插件
    @Bean
    // 只在指定环境下开启,保证效率
    @Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        // SQL执行的最大时间(毫秒),超过时间就不执行,抛出异常
        performanceInterceptor.setMaxTime(100);
        // SQL语句格式化
        performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
}

测试

// SELECT xxx FROM user
List<User> userList = userMapper.selectList(null);
// 批量查询
// SELECT xxx FROM user WHERE id IN ( ? , ? , ? )
List<User> userList = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
// 条件查询
// SELECT xxx FROM user WHERE name = ? AND age = ?
Map<String,Object> map = new HashMap<>();
map.put("name", "Jone");
map.put("age", 18);
List<User> userList = userMapper.selectByMap(map);
// 分页查询,查询之前会先执行 SELECT COUNT(1) FROM user
// SELECT xxx FROM user LIMIT 0,5
Page<User> page = new Page<>(1,5);
IPage<User> userIPage = userMapper.selectPage(page, null);
userIPage.getRecords().forEach(System.out::println);
// 插入
userMapper.insert(user);
// 修改
userMapper.updateById(user);
// 逻辑删除:UPDATE user SET deleted=1 WHERE id=? AND deleted=0
userMapper.deleteById(1L);

// 条件构造器
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNotNull("name")
        .eq("name", "zhangsan")// 等于
        .ge("age", 1)// 大于
        .notLike("name", "a")// name not like '%a%'
        .likeRight("name", "b")// name like 'b%'
        .likeLeft("name", "b")// name like '%b'
        .inSql("id", "select id from user where id > 0")// 子查询
        .orderByDesc("id")
        .between("age", 1, 100);
userMapper.selectList(wrapper);

代码生成器

import com.baomidou.mybatisplus.annotation.*
import com.baomidou.mybatisplus.generator.*
public class MyGenerator {
    
    public static void main(String[] args) {
        // 代码生成器对象
        AutoGenerator generator = new AutoGenerator();
        
        // 全局配置
        GlobalConfig global = new GlobalConfig();
        global.setOutputDir(System.getProperty("user.dir") + "/src/main/java");// 输出目录
        global.setAuthor("作者");
        global.setOpen(false);// 打开输出目录
        global.setFileOverride(false);// 文件覆盖
        global.setServiceName("%sService");
        global.setIdType(IdType.ID_WORKER);// 主键生成策略
        global.setDateType(DateType.ONLY_DATE);// 数据库时间类型使用 java.util.date 代替
        global.setSwagger2(true);
        generator.setGlobalConfig(global);
        
        // 数据源
        DataSourceConfig dataSource = new DataSourceConfig();
        dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useSSL=true&useUnicode=true&charsetEncoding=UTF-8&serverTimezone=UTC");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setDbType(DbType.MYSQL);
        generator.setDataSource(dataSource);
        
        // 生成的包:com.example.generator.pojo
        PackageConfig pack = new PackageConfig();
        pack.setModuleName("generator");
        pack.setParent("com.example");
        pack.setEntity("pojo");
        pack.setMapper("mapper");
        pack.setService("service");
        pack.setController("controller");
        generator.setPackageInfo(pack);
        
        // 策略
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("user","product");// 要映射的表(任意个)
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名下划线转驼峰
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 字段名下划线转驼峰
        strategy.setEntityLombokModel(true);// 生成 lombok
        strategy.setLogicDeleteFieldName("deleted");// 逻辑删除字段名
        strategy.setVersionFieldName("version");// 乐观锁字段名
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true);// localhost:8080/login_id_1
        // 自动填充策略
        List<TableFill> tableFillList = new ArrayList<>();
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified", FieldFill.INSERT_UPDATE);
        tableFillList.add(gmtCreate);
        tableFillList.add(gmtModified);
        strategy.setTableFillList(tableFillList);
        generator.setStrategy(strategy);
        
        // 执行生成
        generator.execute();
    }
}
【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值