Nutz框架的简单使用

article/2025/8/18 2:53:41

Q:什么是Nutz。

A:类似于SSH的一个框架。官网http://www.nutzam.com/

Q:Nutz怎么读。

A:读作 “纳特Z(Z发重音)”。Nutz 的 Nut 是因为霍金的《果壳中的宇宙》是 zozoh 最喜欢的一本书之一。 Z 是 zozoh 小时,动画片《佐罗》给他很深的印象,尤其是每次转场的中间动画都是 佐罗的剑在黑色的空中 唰唰唰 三下划出锋利的 Z 字,好像三道闪电,酷的要命。 同时 zozoh 本人姓张,所以他很高兴在 Nut 后面 唰唰唰 的来一个 Z。

Q:Nutz可以做什么

A:Dao --针对 JDBC 的薄封装,事务模板,无缓存

    Ioc -- JSON 风格的配置文件,声明时切片支持

    Mvc -- 注解风格的配置,内置多文件上传功能

    Json -- 解析和渲染

    Castors -- Java 对象类型转换

    Lang -- 更简洁的 Java 函数以及更丰富的反射支持

    Aop -- 轻便快速的切面编程支持

    Plugin -- 轻便的插件机制

    Resource -- 资源扫描

它所有的功能均不依赖第三方 jar 包

这就意味着:

  • 如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了

  • 当然你要使用连接池,数据库驱动等功能,还需要自行添置 jar 包。



最近的两三个小项目,别人搭了Nutz框架开发,阶段整理下。

首先正如上面所说Nutz真的很轻。一个nutz.jar 搞定。当然为了整个系统我引入了另外两个jar。和一些程序自带的jar。

104001_sdkE_1790925.jpg

druid-1.0.7.jar 是 阿里巴巴推出的国产数据库连接池;

h2-1.3.178.jar 是 h2内存数据库

这个demo例子 是 简单的swt开发的。官网的例子是MVCweb项目。最后总结区别。


104320_TLMb_1790925.jpg

项目代码结构图。

贴代码:

package demo.biz;
import org.nutz.dao.entity.annotation.Column;
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.Name;
import org.nutz.dao.entity.annotation.Table;
@Table("t_person")
public class Person {
@Id
private int id;
@Name
private String name;
@Column
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package demo.dao;
import org.nutz.dao.Dao;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import demo.biz.Person;
@IocBean(name = "personDao")
public class PersonDao {
@Inject
private Dao dao;
public void newPerson(Person person){
dao.insert(person);
}
}
package demo.service;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import demo.biz.Person;
import demo.dao.PersonDao;
@IocBean(name = "personService")
public class PersonService {
@Inject
PersonDao personDao;
public void newPerson(Person person){
personDao.newPerson(person);
}
}
package demo;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.NutIoc;
import org.nutz.ioc.loader.combo.ComboIocLoader;
import org.nutz.log.Log;
import org.nutz.log.Logs;
/*** As you see...**/
public class IocMaster {
private static final Log log = Logs.get();
private static Ioc ioc = null;
public static Ioc getInstance() {
if (null != ioc) {
return ioc;
}try {ioc = new NutIoc((new ComboIocLoader("*org.nutz.ioc.loader.json.JsonLoader", "beans.js","*org.nutz.ioc.loader.annotation.AnnotationIocLoader","demo")));} catch (ClassNotFoundException e) {String msg = "create ioc failed...";log.error(msg);log.error(e.getMessage());throw new RuntimeException(e);}return ioc;
}
}

下面这个是主页面。我是通过SWT开发的简单页面。

package demo;
import org.eclipse.swt.SWT;
@IocBean
public class Main {
protected Shell shell;
private Text txtName1;
private Text txtAge1;
private Text txtName2;
private Text txtAge2;
private Table table;
static PersonService personService;
static PersonDao personDao;
/** * Launch the application.* @param args*/
public static void main(String[] args) {
Ioc ioc = IocMaster.getInstance();
personService = ioc.get(PersonService.class);
//personDao = ioc.get(PersonDao.class);
try {
Main window = new Main();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/*** Open the window.*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/*** Create contents of the window.*/
protected void createContents() {
shell = new Shell();
shell.setSize(856, 624);
shell.setText("SWT Application");
Group group = new Group(shell, SWT.NONE);
group.setText("\u65B0\u589E");
group.setBounds(10, 0, 820, 121);
Label label = new Label(group, SWT.NONE);
label.setBounds(20, 51, 61, 17);
label.setText("\u540D\u79F0");
txtName1 = new Text(group, SWT.BORDER);
txtName1.setBounds(99, 45, 111, 23);
Label label_1 = new Label(group, SWT.NONE);
label_1.setText("\u5E74\u9F84");
label_1.setBounds(255, 51, 61, 17);
txtAge1 = new Text(group, SWT.BORDER);
txtAge1.setBounds(334, 45, 111, 23);
Button btnNew = new Button(group, SWT.NONE);
btnNew.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
String name = txtName1.getText();
String age = txtAge1.getText();
Person person = new Person();
person.setAge(age);
person.setName(name);
personService.newPerson(person);
}
});
btnNew.setBounds(594, 45, 80, 27);
btnNew.setText("\u65B0\u589E");
Group group_1 = new Group(shell, SWT.NONE);
group_1.setText("\u67E5\u8BE2");
group_1.setBounds(10, 127, 820, 449);
Label label_2 = new Label(group_1, SWT.NONE);
label_2.setText("\u540D\u79F0");
label_2.setBounds(20, 30, 61, 17);
txtName2 = new Text(group_1, SWT.BORDER);
txtName2.setBounds(99, 24, 111, 23);
Label label_3 = new Label(group_1, SWT.NONE);
label_3.setText("\u5E74\u9F84");
label_3.setBounds(255, 30, 61, 17);
txtAge2 = new Text(group_1, SWT.BORDER);
txtAge2.setBounds(334, 24, 111, 23);
Button btnQuery = new Button(group_1, SWT.NONE);
btnQuery.setText("\u67E5\u8BE2");
btnQuery.setBounds(596, 20, 80, 27);
table = new Table(group_1, SWT.BORDER | SWT.FULL_SELECTION);
table.setBounds(10, 87, 800, 352);
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableColumn tableColumn = new TableColumn(table, SWT.NONE);
tableColumn.setWidth(354);
tableColumn.setText("\u540D\u79F0");
TableColumn tableColumn_1 = new TableColumn(table, SWT.NONE);
tableColumn_1.setWidth(334);
tableColumn_1.setText("\u5E74\u9F84");
}
}

效果图(很丑- - 就是为了跑通亲测可用):

104931_kEsA_1790925.jpg


下面这个是创建数据库的运行一次即可.

package demo;
import org.nutz.dao.Dao;
import org.nutz.ioc.Ioc;
import demo.biz.Person;
public class MainCreareTable {public static void main(String[] args) {Ioc ioc = IocMaster.getInstance();Dao dao = ioc.get(Dao.class);dao.create(Person.class,true);
}
}
bean.js配置文件
var ioc = {config : {type : "org.nutz.ioc.impl.PropertiesProxy",fields : {paths : ["beans.properties"]}},dataSource: {type: "com.alibaba.druid.pool.DruidDataSource",events: {depose: 'close'},fields: {driverClassName:  {java :"$config.get('db-driver')"},url             : {java :"$config.get('db-url')"},username        : {java :"$config.get('db-username')"},password        : {java :"$config.get('db-password')"},initialSize: 1,minIdle: 1,maxActive: 2,maxWait: 60000,timeBetweenEvictionRunsMillis: 60000,minEvictableIdleTimeMillis: 300000,poolPreparedStatements: true,maxPoolPreparedStatementPerConnectionSize: 20,testWhileIdle:true}},dao: {type: "org.nutz.dao.impl.NutDao",args: [{refer: "dataSource"}]}
};
beans.properties配置文件
db-driver=org.h2.Driver
db-url=jdbc:h2:tcp://localhost/D:/gss/db/dbs/dbf    --需要手动启动h2数据库模式
#db-url=jdbc:h2:D:/gss/db/dbs/dbf                    --内嵌数据库随着项目启动自行启动
db-username=gss
db-password=gss

代码解释:

项目使用了 h2内存数据库为了方便测试,以免小伙伴机器上没有这个或者那个数据库啥的。

功能主要是一个新增数据。

bean.js和beans.properties配置文件主要是配置数据库连接池使用

其他类文件不赘述 大家都懂的


错误精读:错了错了错了 错在哪儿 为什么错 怎么错了 nutz框架 启动的入口是哪儿他凭什么神奇的注释哪儿哪儿就能用

在写这个demo 的时候,我之前做的web的项目 ioc容器是自动启动的,而在这个demo中需要手动启动,而我选择的加载文件夹给我造成了误解。我认为我在获得实例的时候我的文件夹下被我注释 @Inject的类都是可以直接使用使用的.类似这种概念:

@Inject
private PersonService personService;在下面的方法中...
....public void demo(){personService.setXXX();     //事实证明这处的personService是空的
}

其实不然。

在web项目中 你会在 web.xml里面配置一个filter来指向你的mainmodule类。而mainmodule的注解是这样的

import org.nutz.mvc.annotation.Encoding;
import org.nutz.mvc.annotation.IocBy;
import org.nutz.mvc.annotation.Modules;
import org.nutz.mvc.annotation.SetupBy;
import org.nutz.mvc.ioc.provider.ComboIocProvider;
@Encoding(input = "UTF-8", output = "UTF-8")
@IocBy(type = ComboIocProvider.class, args = {
"*org.nutz.ioc.loader.json.JsonLoader", "nutz/",
"*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "com.sgi.cari" })
@Modules(scanPackage = true)
@SetupBy(value = MainSetup.class)
public class MainModule {
}

然后随着web容器的启动,该类加载进了ioc里面。

但是在java的项目中没有容器的配置,需要自行启动(IocMaster.java)的这个类被实例之后,还是需要

personService= ioc.get(PersonService.class);

来自己添加类进ioc对象来使用。


个人留存

转载于:https://my.oschina.net/u/1790925/blog/472818


http://chatgpt.dhexx.cn/article/lbkgFwio.shtml

相关文章

nutz mysql 关键词_nutz框架简单入门

最近几年随着python语言的崛起,java在web方面被各种脚本语言诟病效率低下,这也是事实,java在运用第三方类库(框架)开发时,效率确实很低下。麻烦的框架整合,复杂的配置文件都是拦路虎,不过今天我要推荐的nut…

给大家推荐一个非常非常非常好用的java轻量级框架-Nutz永远滴神

或许以后再也用不到了,写篇文章纪念一下吧~ 前段时间离职来到了现在的新公司,奔向了光明的未来,唯一让我留恋的就是原本使用的框架—Nutz了,这个框架相对于现在的mybatis(过段时间可能会“mybatis真香”)来…

【Nutz】Nutz起步

一、Nutz 是一组轻便小型的框架集合,可以极大程度上提高开发人员的生产力,更多内容请点击访问Nutz官网。Nutz主要包括以下几个模块: DAO:针对JDBC进行了薄封装,事务模板,无缓存IoC:JSON风格配…

【工具】——远程协助(向日葵)

在烈日炎炎的午后,一片片金黄金黄的田野中,要是能够看到上图这样的风景,那是多么的赏心悦目啊 ,并且身旁有佳人,那是何等的荣幸之至。当然,今天的主体就是向日葵,一个远在千里却近乎咫尺之间的桌…

Windows系统自带远程桌面和远程协助怎么连接?

随着IT技术的发展和远程办公的兴起,在日常工作中,远程桌面和远程协助等功能已经成为很多用户需要掌握的技能之一。而对于使用Windows系统的用户来说,Windows系统自带的远程桌面和远程协助功能,更是令人欣喜的利器。下面我们就来一…

Windows实用小工具–Windows远程协助

在企业里,有的公司办公区域比较大,电脑有问题一般都是通过远程、徒步、电话等方式来解决,对于远程协助解决问题,我们首先想到的会是如何连接对方的电脑,相信大家都已经使用过很多的软件了吧!当然还有Micros…

远程协助软件

向日葵 https://sunlogin.oray.com/ anydesk https://anydesk.com/zhs/downloads/windows?dvwin_exe ToDesk https://www.todesk.com/ 快速助手 中文:https://learn.microsoft.com/zh-cn/windows/client-management/quick-assist 英文:https://l…

常见的远程协助软件简介

1.RayLink远程控制软件 RayLink是一个支持多系统多设备间相互远程控制的软件,是具有远程制作、远程办公、远程游戏、远程协助等需求的IT技术、游戏玩家、网络办公等这些人的最佳选择。通过使用RayLink,可随时随地远程控制其他电脑或手机,远程…

9款免费的Windows远程协助软件

首先,如果网友和你在同一个局域网中你可以使用的就是Windows 的远程桌面功能。如果你不在局域网中,并且只有一个Internet 连接。你可以通过其他的远程协助软件从互联网中得到网友的帮助。这里我们列出九款免费的Windows远程协助软件。 1。 Team Viewer:TeamViewer是一个既简…

windows 域环境应用---VNC远程协助工具的使用

域环境中&#xff0c;少不了远程协助工具&#xff0c;这可以替管理员省掉许多跑腿的事。<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /> 今天我就介绍一下远程协助工具中的一款 real VNC. 此工具有三个软件&#xff0c; vnc se…

远程协助软件的使用

目录&#xff1a; 一、TeamViewer 二、QQ远程协助 三、向日葵 四、Todesk 1、TeamViewer 下载地址&#xff1a;下载 Windows 版 TeamViewer&#xff0c;即可实现远程桌面访问和协作立即下载 TeamViewer&#xff0c;连接远程桌面&#xff0c;为在线会议和视频会议提供远程支…

Teamviewer:支持 Linux 的远程协助工具

Teamviewer&#xff1a;支持 Linux 的远程协助工具 # 作者: riku /本文采用 CC BY-NC-SA 2.5协议授权&#xff0c;转载请注明 本文链接。 在 Linux 上的 GUI 环境下&#xff0c;我们通常都用 VNC 来进行远程摇控及协助操作。Teamviewer 则是一款类似于 VNC 的远程遥控软件&a…

远程协助工具Teamview的无人值守使用

人&#xff0c;天性喜欢懒惰&#xff0c;一旦有机会就依赖上这样的生活习惯。当你体验过&#xff0c;没有鼠标&#xff0c;没有键盘的繁琐工作后&#xff0c;发现如果有鼠标键盘那是一件多么爽快的事情&#xff0c;当你想到不用到外面每天都跑&#xff0c;一个小问题&#xff0…

SCCM 2016 远程协助工具

今天介绍一个 SCCM 的远程协助工具&#xff0c;还是挺好用的。特别是在比较大架构规模&#xff0c;办公位置比较分散的企业&#xff0c;IT运维人员直接通过远程协助的方式就可以进行远程管理。 首先我们在SCCM管理控制台中&#xff0c;在“管理”工具栏中找到“客户端设置”&am…

远程协助控制电脑的三种方式

如何远程控制电脑&#xff1f;远程控制别人计算机的方法通常有两种&#xff0c;一种是开启电脑系统自带的远程桌面功能&#xff1b;另一种就是借助第三方远程协助工具来实现远程控制别人的电脑。今天我们就来说一说这两种如何远程控制电脑的方法。 方法一、使用第三方远程协助工…

FastVNC(远程协助工具) v1.0

简介&#xff1a; FastVNC是个比较适合用于临时远程协助的一个小工具&#xff0c;使用的时候找一台IP固定的服务器&#xff0c;然后运行软件&#xff0c;在在生成器界面填上运行转发服务端机器的IP点击生成&#xff0c;生成的exe&#xff0c;既是控制端&#xff0c;也是被控端…

windows 10 Quick Assist 远程协助工具

今天只分享win10对win10环境下的远程协助&#xff0c;下面开始。 环境&#xff1a;Windows 10 专业版 工具&#xff1a; Quick Assist 前提条件&#xff1a;拥有Microsoft账户 这个内置的小工具可以理解为另一种的teamviewer,这样就比较好明白了。 一、打开 Quick Assist 和TV差…

ttvnc 服务器 自建,FastVNC(可以自架中心服务端的远程协助工具)

简介 FastVNC是一个类似TTVNC的远程协助工具 使用方法: 1.找一台IP固定的服务器 , 运行转发服务端.exe . 如果要装在网吧内网服务器上, 需要在路由器上映射 TCP端口246. 2.运行 控制台_被控端生成器.exe , 在生成器界面, 填上运行转发服务端机器 的IP ,点击生成. 3.生成的exe ,…

Teamviewer 远程协助工具

在 Linux 上的 GUI 环境下&#xff0c;我们通常都用 VNC 来进行远程摇控及协助操作。 Teamviewer 则是一款类似于 VNC 的远程遥控软件&#xff0c;但比起 VNC 来&#xff0c;它更适合于进行远程协助操作&#xff0c;并且更加简单易用。 TeamViewer下载之后便能立即投入使用,非…

Teamviewer:远程协助工具

在 Linux 上的 GUI 环境下&#xff0c;我们通常都用 VNC 来进行远程摇控及协助操作。 Teamviewer 则是一款类似于 VNC 的远程遥控软件&#xff0c;但比起 VNC 来&#xff0c;它更适合于进行远程协助操作&#xff0c;并且更加简单易用。 TeamViewer下载之后便能立即投入使用,非…