Nutz框架的簡單使用

Q:什麼是Nutz。java

A:相似於SSH的一個框架。官網http://www.nutzam.com/web

Q:Nutz怎麼讀。shell

A:讀做 「納特Z(Z發重音)」。Nutz 的 Nut 是由於霍金的《果殼中的宇宙》是 zozoh 最喜歡的一本書之一。 Z 是 zozoh 小時,動畫片《佐羅》給他很深的印象,尤爲是每次轉場的中間動畫都是 佐羅的劍在黑色的空中 唰唰唰 三下劃出鋒利的 Z 字,好像三道閃電,酷的要命。 同時 zozoh 本人姓張,因此他很高興在 Nut 後面 唰唰唰 的來一個 Z。數據庫

Q:Nutz能夠作什麼編程

A:Dao --針對 JDBC 的薄封裝,事務模板,無緩存json

    Ioc -- JSON 風格的配置文件,聲明時切片支持緩存

    Mvc -- 註解風格的配置,內置多文件上傳功能mvc

    Json -- 解析和渲染app

    Castors -- Java 對象類型轉換框架

    Lang -- 更簡潔的 Java 函數以及更豐富的反射支持

    Aop -- 輕便快速的切面編程支持

    Plugin -- 輕便的插件機制

    Resource -- 資源掃描

它全部的功能均不依賴第三方 jar 包

這就意味着:

  • 若是一個 Web 應用,你在 WEB-INF/lib 下只 須要放置一個 nutz.jar 就夠了

  • 固然你要使用鏈接池,數據庫驅動等功能,還須要自行添置 jar 包。



最近的兩三個小項目,別人搭了Nutz框架開發,階段整理下。

首先正如上面所說Nutz真的很輕。一個nutz.jar 搞定。固然爲了整個系統我引入了另外兩個jar。和一些程序自帶的jar。

druid-1.0.7.jar 是 阿里巴巴推出的國產數據庫鏈接池;

h2-1.3.178.jar 是 h2內存數據庫

這個demo例子 是 簡單的swt開發的。官網的例子是MVCweb項目。最後總結區別。


項目代碼結構圖。

貼代碼:

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");
}
}

效果圖(很醜- - 就是爲了跑通親測可用):


下面這個是建立數據庫的運行一次便可.

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對象來使用。


我的留存

相關文章
相關標籤/搜索