# Magic **Repository Path**: bondgit/Magic ## Basic Information - **Project Name**: Magic - **Description**: Magic是Magician旗下的一个工具包 - **Primary Language**: Java - **License**: MIT - **Default Branch**: main - **Homepage**: https://magician-io.com - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-07-22 - **Last Updated**: 2025-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Magic ·

Magic是Magician旗下的一个工具包,支持并发处理、生产者与消费者模型、数据库操作等 ## 运行环境 JDK17 ## 文档 [https://github.com/JMagician/Magic/blob/dev/Document.md](https://github.com/JMagician/Magic/blob/dev/Document.md) ## 示例 ### 01 导入依赖 ```xml com.github.yuyenews Magic 1.0.3 ``` ### 02 数据库操作 #### 首先需要创建一个Spring的JdbcTemplate对象 ```java @Resource private JdbcTemplate jdbcTemplate; ``` #### 单表查询 ```java // 创建查询条件 ConditionBuilder conditionBuilder = ConditionBuilder.createCondition() .add("age = ?", "300") .add(" order by age desc", Condition.NOT_WHERE); // 执行查询操作 List demoPOS = MagicDBUtils.get(jdbcTemplate) .select("m_user_info", conditionBuilder, DemoPO.class); ``` #### 单表插入 ```java // 创建要插入的对象和值 DemoPO demoPO = DemoPO.builder() .id(UUID.randomUUID().toString()) .age(18) .content("哈哈哈") .amount(new BigDecimal("10000")) .length(new BigInteger("10000000000")) .createTime(new Date()) .updateTime(new Date()) .build(); // 执行插入操作 MagicDBUtils.get(jdbcTemplate).insert("m_user_info", demoPO); ``` #### 单表更新 ```java // 创建修改条件 ConditionBuilder = conditionBuilder = ConditionBuilder.createCondition() .add("id = ? and age = ?", "00df4362-d7ad-48d2-8bcb-05cf859b7e64", 500); // 需要修改的字段和对应的值 DemoPO demoPO = DemoPO.builder() .age(122) .content("嘿嘿嘿") .amount(new BigDecimal("100002.33")) .length(new BigInteger("100000000002")) .createTime(new Date()) .updateTime(new Date()) .build(); // 执行修改操作 MagicDBUtils.get(jdbcTemplate).update("m_user_info", demoPO, conditionBuilder); ``` #### 单表删除 ```java // 创建删除条件 ConditionBuilder = conditionBuilder = ConditionBuilder.createCondition() .add("id = ?", "00df4362-d7ad-48d2-8bcb-05cf859b7e64"); // 执行删除操作 MagicDBUtils.get(jdbcTemplate).delete("m_user_info", conditionBuilder); ``` #### 自定义SQL查询 ```java DemoPO demoPO = DemoPO.builder() .age(122) .build(); MagicDBUtils.get(jdbcTemplate).selectList("select * from m_user_info where age > {age}", demoPO, DemoPO.class); ``` #### 自定义SQL分页 ```java // 查询参数 PageParamModel pageParamModel = PageParamModel .getPageParamModel(1, 10) .setParam( DemoPO.builder() .age(10) .build() ); // 执行查询操作 PageModel pageModel = MagicDBUtils.get(jdbcTemplate).selectPage("select * from m_user_info where age > {age}", pageParamModel, DemoPO.class); ``` ### 03 并发处理任务 ```java MagicDataProcessing.getConcurrentTaskSync() .setTimeout(1000) // 超时时间 .setTimeUnit(TimeUnit.MILLISECONDS) // 超时时间的单位 .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时e里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时e是空的 } }) .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时e里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时e是空的 } }) .start(); ``` ### 04 并发处理List,Set等所有Collection类集合里的元素 ```java // 假如有一个List需要并发处理里面的元素 List dataList = new ArrayList<>(); // 只需要将他传入syncRunner方法即可,每个参数的具体含义可以参考文档 MagicDataProcessing.getConcurrentCollectionSync() .syncRunner(dataList, data -> { // 这里可以拿到List里的元素,进行处理 System.out.println(data); }, 10, 1, TimeUnit.MINUTES); // 也可以用syncGroupRunner方法,每个参数的具体含义可以参考文档 MagicDataProcessing.getConcurrentCollectionSync() .syncGroupRunner(dataList, data -> { // 这里是每一组List for(String item : data){ // 这里可以拿到List里的元素,进行处理 System.out.println(data); } }, 10, 1, TimeUnit.MINUTES); ``` ### 05 生产者与消费者 ```java // 创建一组生产者与消费者,支持多对多 MagicDataProcessing.getProducerAndConsumerManager() .addProducer(new MagicianProducer() { // 添加一个生产者(可以添加多个) @Override public void producer() { // 查询这张表里符合条件的数据 List dataList = selectList(); // 然后将他推送给消费者 this.publish(dataList); } }).addConsumer(new MagicianConsumer() { // 添加一个消费者(可以添加多个) @Override public void doRunner(Object data) { // 处理生产者发来的数据 System.out.println(data); } }).start(); ```