开发喵星球

若依集成 Nutz 框架(244)

需求提出:

集成 Nutz 框架到项目中,使用 Nutz 提供的功能快速开发企业级应用程序。

Nutz 介绍:


Nutz 是一个基于 Java 语言的开源框架,主要用于快速开发企业级应用程序。它提供了一系列简洁易用的工具和组件,能够帮助开发者高效地完成项目开发工作。Nutz 框架具有轻量级、依赖注入和 AOP 支持、强大的 ORM 框架、模块化设计、丰富的工具集以及良好的文档和社区支持等特点。

解决思路:

  1. 在项目的 pom.xml 文件中添加 NutzBeetl 的依赖。
  2. application.yml 文件中添加 Nutz 框架的配置。
  3. 创建 Person 实体类,并编写基于 NutzCRUD 操作。
  4. 编写 PersonController 类提供 RESTful 接口。

所需技术:

15:40:19.283 [restartedMain] ERROR o.s.b.SpringApplication - [reportFailure,870] - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dao' defined in class path resource [org/nutz/plugin/spring/boot/NutzDaoAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.nutz.dao.Dao]: Factory method 'dao' threw exception; nested exception is java.lang.ExceptionInInitializerError
...
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.nutz.dao.Dao]: Factory method 'dao' threw exception; nested exception is java.lang.ExceptionInInitializerError
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653)
    ... 22 common frames omitted
Caused by: java.lang.ExceptionInInitializerError: null
...

项目结构:

com.ruoyi
├── controller
│   └── PersonController.java
├── domain
│   └── Person.java
└── RuoYiApplication.java

完整代码:

第一步: 在 pom.xml 文件中添加 Nutz 和 Beetl 的依赖

<!--Nutz-->
<dependency>
    <groupId>org.nutz</groupId>
    <artifactId>nutz-plugins-spring-boot-starter</artifactId>
    <version>1.r.68.v20201205</version>
</dependency>

<!--beetl-->
<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.10.0.RELEASE</version>
</dependency>

第二步: 在 application.yml 文件中添加 Nutz 框架的配置

nutz:
  json:
    # 是否启用,默认true
    enabled: false
    # json模式,默认compact
    mode: compact
    # 是否启用压缩模式
    compact: true
    # 是否自动将值应用unicode编码
    auto-unicode: false
    # 日期格式化
    date-format: yyyy-MM-dd HH:mm:ss
  dao:
    runtime:
      # 自动创建表
      create: false
      # 根据bean自动更新表结构
      migration: false
      # 是否添加列 默认true
      add-column: false
      # 是否删除列 默认true
      delete-column: false
      # 是否删表重建,注意此功能会删除全部表及数据,一般应用于demo或测试 默认false
      foce-create: false
      # 是否检查索引 默认true
      check-index: false
      # 扫描bean
      basepackage:
        - com.ruoyi.domain
    sql-manager:
      #自定义sql管理模式 file和xml
      mode: file
      # sql文件存放位置
      paths:
        - sqls
    sql-template:
      #是否启用 默认false
      enable: true
      #模板引擎类型,默认beetl
      type: beetl

第三步: 创建 Person 实体类

package com.ruoyi.domain;

import lombok.Data;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Table;

@Data
@Table("t_person")
public class Person {

    @Id
    private Long id;

    @Column
    private String name;

    @Column
    private Integer age;

}

第四步: 创建 PersonController 类

package com.ruoyi.controller;

import com.ruoyi.common.core.domain.Rs
import com.ruoyi.domain.Person;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1/person")
public class PersonController {

    @Autowired
    private Dao dao;

    /**
     * 添加 person
     *
     * @return
     */
    @GetMapping("/add")
    public R<Person> add() {
        Person p = new Person();
        p.setName("ABC");
        p.setAge(20);
        Person insert = dao.insert(p);
        return R.ok(insert);
    }

    /**
     * 获取 person 列表
     *
     * @return
     */
    @GetMapping("/list")
    public R<List<Person>> list() {
        List<Person> query = dao.query(Person.class, Cnd.NEW());
        return R.ok(query);
    }

    /**
     * 修改 person
     *
     * @return
     */
    @GetMapping("/update")
    public R<Object> update(Person person) {
        int update = dao.update(person);
        return R.ok(update);
    }

    /**
     * 删除 person
     *
     * @return
     */
    @GetMapping("/delete")
    public R<Object> delete(Person person) {
        int update = dao.delete(person);
        return R.ok(update);
    }

}

运行结果:

  1. 启动应用程序,控制台输出如下信息:

  2. 访问 http://localhost:8080/api/v1/person/add,返回添加的 Person 对象:

{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "id": 1,
        "name": "ABC",
        "age": 20
    }
}
  1. 访问 http://localhost:8080/api/v1/person/list,返回 Person 列表:
{
    "code": 200,
    "msg": "操作成功",
    "data": [
        {
            "id": 1,
            "name": "ABC",
            "age": 20
        }
    ]
}
  1. 修改 Person 对象,访问 http://localhost:8080/api/v1/person/update?id=1&name=DEF&age=30,返回更新的行数:
{
    "code": 200,
    "msg": "操作成功",
    "data": 1
}
  1. 删除 Person 对象,访问 http://localhost:8080/api/v1/person/delete?id=1,返回删除的行数:
{
    "code": 200,
    "msg": "操作成功",
    "data": 1
}
   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-06-19 16:57:37 阅读量:128
<<   >>


powered by kaifamiao