- 浏览: 40882 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lIO01:
年轻人,需要你理解的东西还很多
在Nutz中使用Ioc-Annotation的入门教程 -
wuyuetiank:
在Nutz中使用Ioc-Annotation的入门教程 -
cl1_1_1:
找到,在manifest.xml中,哈哈!请问用自己的图片为背 ...
[转载]Android开发—系统自带样式Android:theme -
cl1_1_1:
请问,您的安卓中有theme么?我的android:后面就没这 ...
[转载]Android开发—系统自带样式Android:theme -
jacking124:
不错的,但是添加修改以后怎么就乱码了。
使用Nutz[1.b.38]对数据库表的CRUD操作
今天看了下Nutz最新的版本库,发现“灰太狼”居然把我上一篇文章《在Nutz中使用Ioc-Annotation的入门教程》收录在Nutz的发行包中,为了表达“灰太狼”的厚爱,决定写多三篇文章以表心意!!!
------------------------------------------------------------------------------------------------------
第一篇:使用Nutz[1.b.38]对数据库表的CRUD操作
第二篇:使用Nutz[1.b.38]对关联数据表的一对一/一对多操作 ----已完成,点击查看
第三篇:在Nutz[1.b.38]中使用视图对关联数据表的操作 ----已完成,点击查看
-------------------------------------------------------------------------------------------------------
为了表达对Nutz的支持,这三篇文章最后都会提供完整的源代码,顺便作为Nutz的demo例子。
好的,直奔主题,今天先完成第一篇,接下来在此基础上完成第二篇、第三篇。
环境与版本:
数据库:MySQL
Nutz:1.b.38
IDE:Eclipse
涉及的知识点:
1、Nutz对数据库的CURD操作
2、除了数据源和dao对象使用dao.js配置外,其余全部使用Ioc-Annotation注解
3、在@Ok注解中使用NutzEL表达式,不必为跳转到Fail视图而故意抛出异常了
一、数据库表
-- ----------------------------
-- Table structure for `departmentinfo`
-- ----------------------------
DROP TABLE IF EXISTS `departmentinfo`;
CREATE TABLE `departmentinfo` (
`departmentInfoId` int(11) NOT NULL AUTO_INCREMENT,
`departmentName` varchar(50) DEFAULT NULL,
PRIMARY KEY (`departmentInfoId`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of departmentinfo
-- ----------------------------
INSERT INTO `departmentinfo` VALUES ('1', 'IT部');
INSERT INTO `departmentinfo` VALUES ('2', '人力资源');
INSERT INTO `departmentinfo` VALUES ('3', '财务部');
INSERT INTO `departmentinfo` VALUES ('4', '市场部');
二、例子使用的Jar包
三、结构图
四、代码
1、首先配置Web.xml,配置Nutz的主模块。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>UserManageSystem</display-name> <filter> <filter-name>nutz</filter-name> <filter-class>org.nutz.mvc.NutFilter</filter-class> <init-param> <param-name>modules</param-name> <param-value>demo.nutz.setup.MainModule</param-value> </init-param> </filter> <filter-mapping> <filter-name>nutz</filter-name> <url-pattern>*.shtml</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2、创建主模块类MainModule.java
package demo.nutz.setup; 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; import demo.nutz.action.DepartmentInfoAction; /** * 主模块 * * @author gevin(gevinhjy@foxmail.com) * */ @Modules(value = DepartmentInfoAction.class, scanPackage = true) @IocBy(type = ComboIocProvider.class, args = { "*org.nutz.ioc.loader.json.JsonLoader", "ioc/dao.js", "*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "demo.nutz"}) @SetupBy(NutzSetup.class) public class MainModule { }
由于使用了两种注入的配置方式,因此此处使用了Ioc复合加载器ComboIocProvider。
1)使用"*org.nutz.ioc.loader.json.JsonLoader", "ioc/dao.js"加载JS文件,dao.js中配置了数据源对象和dao对象的注入,貌似听“Wendal-兽”说无法用注解来配置,只能用配置文件。
2)使用"*org.nutz.ioc.loader.annotation.AnnotationIocLoader", "demo.nutz"来自动加载包demo.nutz或其子包中被@IocBean注解过的类。
3)@Modules(value = ArticleInfoAction.class, scanPackage = true) 用来告诉Nutz自动去扫描ArticleInfoAction.class所在包的所有类,如果有类包括了一个以上的入口函数将被认为是模块类。
3、“ioc/dao.js”文件
/* * 本配置文件声明了整个应用的数据库连接部分。 */ var ioc = { /* * 数据库连接池 */ dataSource : { type : "com.mchange.v2.c3p0.ComboPooledDataSource", fields : { driverClass : "com.mysql.jdbc.Driver", jdbcUrl : "jdbc:mysql://127.0.0.1/nutzdemo", user : "root", password : "123456" } }, /* * 这个配置很好理解, args 表示这个对象构造函数的参数。显然,下面的注入方式将调用 new NutDao(dataSource) */ dao : { type : "org.nutz.dao.impl.NutDao", args : [ { refer : "dataSource" } ] } };
4、Model类DepartmentInfo.java
package demo.nutz.model; import org.nutz.dao.entity.annotation.Id; import org.nutz.dao.entity.annotation.Table; @Table("DepartmentInfo") public class DepartmentInfo { @Id //指明主键是整型且默认为自增1 private Integer departmentInfoId; private String departmentName; /*此处省略Getter和Setter*/ }
5、Service层DepartmentInfoService.java
package demo.nutz.service; import org.nutz.dao.Dao; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.service.IdEntityService; import demo.nutz.model.DepartmentInfo; /** * 部门信息-业务层 * * @author gevin(gevinhjy@foxmail.com) * */ @IocBean(args = { "refer:dao" }) // 使用@IocBean注解,无需通过配置文件配置,此处必须带上构造函数的参数所引用的对象 public class DepartmentInfoService extends IdEntityService<DepartmentInfo> { public DepartmentInfoService() { super(); } public DepartmentInfoService(Dao dao, Class<DepartmentInfo> entityType) { super(dao, entityType); } public DepartmentInfoService(Dao dao) { super(dao); } }
6、为了方便以后扩展或进行一些全局的操作,自己定义了一个BaseAction.java,在此类中可定义各种公用变量或函数
package demo.nutz.base; import java.util.Map; /** * Action基类,在此类中可定义各种公用变量或函数 * * @author gevin(gevinhjy@foxmail.com) * */ public class BaseAction { // 定义操作结果字符串 protected static String ADD_SUCCESS = "addSuccess"; protected static String ADD_FAILURE = "addFailure"; protected static String EDIT_SUCCESS = "editSuccess"; protected static String EDIT_FAILURE = "editFailure"; protected static String DEL_SUCCESS = "delSuccess"; protected static String DEL_FAILURE = "delFailure"; protected static String GET_SUCCESS = "getSuccess"; protected static String GET_FAILURE = "getFailure"; protected static String OP_SUCCESS = "opSuccess"; protected static String OP_FAILURE = "opFailure"; /** * 返回错误结果 * * @param errorMsg * @param map * @return */ public Map<String, Object> failure(String errorMsg, Map<String, Object> map) { map.put("msg", errorMsg); return map; } /** * 返回成功结果 * * @param successMsg * @param map * @return */ public Map<String, Object> success(String successMsg, Map<String, Object> map) { map.put("msg", successMsg); return map; } /** * 返回成功结果 * * @param successMsg * @param map * @return */ public Map<String, Object> success(Map<String, Object> map) { map.put("msg", null); return map; } }
7、控制CRUD操作的Action类DepartmentInfoAction.java
package demo.nutz.action; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.nutz.dao.Cnd; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import demo.nutz.base.BaseAction; import demo.nutz.model.DepartmentInfo; import demo.nutz.service.DepartmentInfoService; /** * 部门信息模块 * * @author gevin(gevinhjy@foxmail.com) * */ @IocBean @At("/departmentinfo") public class DepartmentInfoAction extends BaseAction { @Inject // 通过注解@Inject注入对象 private DepartmentInfoService departmentInfoService; /** * 跳转到添加页面 * * @return */ @At("/addDepartmentInfo") @Ok("jsp:${obj.msg == null ? '/departmentinfo/addDepartmentInfo' : '/departmentinfo/showMessage'}") // 在@Ok中使用NutzEL表达式 public Map<String, Object> addDepartmentInfo() { Map<String, Object> map = new HashMap<String, Object>(); try { return success(map); } catch (Exception e) { e.printStackTrace(); return failure(GET_FAILURE, map); } } /** * 添加成功 * * @param di * @return */ @At("/addDepartmentInfoOk") @Ok("jsp:/departmentinfo/showMessage") public Map<String, Object> addDepartmentInfoOk(@Param("..") DepartmentInfo di) { Map<String, Object> map = new HashMap<String, Object>(); try { if (di == null) return failure(GET_FAILURE, map); // 添加成功 if (this.departmentInfoService.dao().insert(di) == null) return failure(ADD_FAILURE, map); return success(ADD_SUCCESS, map); } catch (Exception e) { e.printStackTrace(); map.put("msg", "getFailure"); return map; } } /** * 跳转到修改页面 * * @param departmentInfoId * @return */ @At("/editDepartmentInfo") @Ok("jsp:${obj.msg == null ? '/departmentinfo/editDepartmentInfo' : '/departmentinfo/showMessage'}") public Map<String, Object> editDepartmentInfo(@Param("departmentInfoId") Integer departmentInfoId) { Map<String, Object> map = new HashMap<String, Object>(); try { if (departmentInfoId == null) return failure(GET_FAILURE, map); // 获取对象 DepartmentInfo di = this.departmentInfoService.fetch(departmentInfoId); if (di == null) return failure(GET_FAILURE, map); map.put("departmentInfo", di); return success(map); } catch (Exception e) { e.printStackTrace(); return failure(GET_FAILURE, map); } } /** * 修改成功 * * @param di * @return */ @At("/editDepartmentInfoOk") @Ok("jsp:/departmentinfo/showMessage") public Map<String, Object> editDepartmentInfoOk(@Param("..") DepartmentInfo di) { Map<String, Object> map = new HashMap<String, Object>(); try { if (di == null) return failure(GET_FAILURE, map); // 修改对象 if (this.departmentInfoService.dao().update(di) == 0) return failure(EDIT_FAILURE, map); return success(EDIT_SUCCESS, map); } catch (Exception e) { e.printStackTrace(); return failure(GET_FAILURE, map); } } /** * 删除成功 * * @param di * @param request * @return */ @At("/delDepartmentInfoOk") @Ok("jsp:/departmentinfo/showMessage") public Map<String, Object> delDepartmentInfoOk(@Param("..") DepartmentInfo di, HttpServletRequest request) { Map<String, Object> map = new HashMap<String, Object>(); try { if (di == null) return failure(GET_FAILURE, map); // 删除对象 if (this.departmentInfoService.dao().delete(di) == 0) return failure(DEL_FAILURE, map); return success(DEL_SUCCESS, map); } catch (Exception e) { e.printStackTrace(); return failure(GET_FAILURE, map); } } /** * 显示列表 * * @return */ @At("/showDepartmentInfoList") @Ok("jsp:/departmentinfo/showDepartmentInfoList") public Map<String, Object> showDepartmentInfoList() { Map<String, Object> map = new HashMap<String, Object>(); try { List<DepartmentInfo> diList = this.departmentInfoService.query(Cnd.orderBy().asc("departmentName"), null); map.put("departmentInfoList", diList); return success(map); } catch (Exception e) { e.printStackTrace(); return failure(GET_FAILURE, map); } } }
8、JSP视图文件
showArticleInfoList.shtml
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <%@ include file="../include/taglibs.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>部门信息列表</title> <link href="../css/web.css" rel="stylesheet" type="text/css" /> </head> <body> <br /> <table width="500" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td height="35"><label> <input type="button" name="add" id="add" value="添加部门信息" onclick="window.location='addDepartmentInfo.shtml'" /> </label></td> </tr> </table> <table width="500" border="0" align="center" cellpadding="1" cellspacing="1" class="TableOut"> <tr> <td height="30" colspan="3" align="center" class="TableTop">部门信息列表</td> </tr> <tr class="TableInWhite"> <td width="104" height="30" align="center">序号</td> <td width="272" align="center">部门名称</td> <td width="124" align="center">操作</td> </tr> <c:forEach var = "di" items = "${obj.departmentInfoList}" varStatus="status"> <tr class="TableInWhite"> <td height="30" align="center">${status.count}</td> <td align="center">${di.departmentName}</td> <td align="center">[<a href="editDepartmentInfo.shtml?departmentInfoId=${di.departmentInfoId}">修改</a>] [<a href="delDepartmentInfoOk.shtml?departmentInfoId=${di.departmentInfoId}" onclick="return confirm('是否真的要删除此部门?')">删除</a>]</td> </tr> </c:forEach> </table> </body> </html>
addDepartmentInfo.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>添加部门信息</title> <link href="../css/web.css" rel="stylesheet" type="text/css" /> </head> <body> <br /> <br /> <form id="form1" name="form1" method="post" action="addDepartmentInfoOk.shtml"> <table width="400" border="0" align="center" cellpadding="1" cellspacing="1" class="TableOut"> <tr> <td height="30" colspan="2" align="center" class="TableTop">添加部门信息</td> </tr> <tr class="TableInWhite"> <td width="91" height="30" align="center">部门名称:</td> <td width="302"><label> <input type="text" name="departmentName" id="departmentName" /> </label></td> </tr> <tr class="TableInWhite"> <td height="30" colspan="2" align="center"><label> <input type="submit" name="add" id="add" value=" 提 交 " /> <input type="reset" name="reset" id="reset" value=" 重 置 " /> </label></td> </tr> </table> </form> </body> </html>
editDepartmentInfo.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <%@ include file="../include/taglibs.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>修改部门信息</title> <link href="../css/web.css" rel="stylesheet" type="text/css" /> </head> <body> <br /> <br /> <c:set var="di" value="${obj.departmentInfo}" /> <form id="form1" name="form1" method="post" action="editDepartmentInfoOk.shtml"> <input type="hidden" id="departmentInfoId" name="departmentInfoId" value="${di.departmentInfoId}" /> <table width="400" border="0" align="center" cellpadding="1" cellspacing="1" class="TableOut"> <tr> <td height="30" colspan="2" align="center" class="TableTop">修改部门信息</td> </tr> <tr class="TableInWhite"> <td width="91" height="30" align="center">部门名称:</td> <td width="302"><label> <input type="text" name="departmentName" id="departmentName" value="${di.departmentName}" /> </label></td> </tr> <tr class="TableInWhite"> <td height="30" colspan="2" align="center"><label> <input type="submit" name="add" id="add" value=" 提 交 " /> <input type="reset" name="reset" id="reset" value=" 返 回" onclick="history.back()" /> </label></td> </tr> </table> </form> </body> </html>
信息提示文件:showMessage.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <%@ include file="../include/taglibs.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>信息提示</title> <script type="text/javascript" src="../js/common.js"></script> </head> <body> <c:set var="msg" value="${obj.msg}" /> <c:choose> <c:when test="${msg=='addSuccess'}"> <script type="text/javascript">alertMsg("添加成功.","showDepartmentInfoList.shtml");</script> </c:when> <c:when test="${msg=='editSuccess'}"> <script type="text/javascript">alertMsg("修改成功.","showDepartmentInfoList.shtml");</script> </c:when> <c:when test="${msg=='delSuccess'}"> <script type="text/javascript">alertMsg("删除成功.","showDepartmentInfoList.shtml");</script> </c:when> <c:when test="${msg=='addFailure'}"> <script type="text/javascript">alertMsg("添加失败,请返回重新操作.","back");</script> </c:when> <c:when test="${msg=='editFailure'}"> <script type="text/javascript">alertMsg("修改失败,请返回重新操作.","back");</script> </c:when> <c:when test="${msg=='delFailure'}"> <script type="text/javascript">alertMsg("删除失败,请返回重新操作.","back");</script> </c:when> <c:when test="${msg=='getFailure'}"> <script type="text/javascript">alertMsg("获取失败,请返回重新操作.","back");</script> </c:when> <c:when test="${msg=='opFailure'}"> <script type="text/javascript">alertMsg("操作失败,请返回重新操作.","back");</script> </c:when> </c:choose> </body> </html>
9、OK了,所有文件都配置好了,我们重启Tomcat,访问以下测试地址。
http://127.0.0.1:204/UserManageSystem/departmentinfo/showDepartmentInfoList.shtml
效果图:
---------------------------------------------------------------------------------------------------------------------
第二次写学习心得,还是觉得太花时间了,哈哈!!啥时候才能养成写BLOG的习惯呢。。。。 时间啊!!
最后,当然是本例子的完整代码了。。。希望对Nutz的初学者有用!让更多人使用Nutz,哈哈!!
- UserManageSystem.rar (2.6 MB)
- 下载次数: 120
相关推荐
在Nutz 1.b.38 版本中,视图是处理关联数据表操作的一种高效方式。Nutz 是一个轻量级的Java框架,它提供了丰富的功能来支持数据库操作,包括视图的使用。视图在数据库设计中扮演着重要角色,允许开发者以简化的方式...
2. **数据库支持**:Nutz内建了强大的ORM(Object-Relational Mapping)机制,简化了数据库操作,支持SQL语句的动态生成与执行。 3. **Web开发**:Nutz对HTTP请求处理、响应生成、URL映射等提供了全面的支持,同时...
Nutz, 它是一组轻便小型的框架的集合。...如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计 如果你以前根本没接触过 SSH ,只使用 JDBC 编程, 整个 Nutz 专门为你设计
nutz-1.r.60.jar
同传统的 SSH 相比,它具备如下特点:轻 -- ...这就意味着:如果一个 Web 应用,你在 WEB-INF/lib 下只 需要放置一个 nutz.jar 就够了当然你要使用其它的连接池,数据库驱动,打印PDF支持等功能,还需要自行添置 jar 包
1. "nutz-1.r.61.r2-javadoc.jar"是Nutz框架的API文档,包含该版本的所有类、方法和其他编程元素的详细说明,这对于开发者理解和使用Nutz的API非常有帮助。 2. "nutz-1.r.61.r2-sources.jar"包含了Nutz框架源代码,...
nutz-1.b.43-jdk5.jar 资源包
Nutz框架可以在WEB-INF/lib下仅使用一个nutz.jar来运行一个Web应用,前提是开发者自行添加必要的jar包,如连接池和数据库驱动等。对于那些希望尝试新东西、愿意成为NutzCommitters的开发者,Nutz提供了相应的指南和...
nutz-1.b.43-jdk5.jar 资源包
这个文件包含了Nutz 1.r.61版本的Java API文档,通过它可以查看框架中各个类和方法的详细说明,帮助开发者了解如何使用Nutz的API进行编程。Javadoc是Java的标准文档生成工具,它将源代码中的注释转换成结构化的HTML...
将此jar包添加到项目的类路径中,开发者就能在项目中使用Nutz框架的各种功能,如控制反转(IoC)、注解驱动开发、数据库操作、Web开发等。 3. `nutz-1.r.58-sources.jar`:这个文件提供了Nutz框架的源代码,对于想...
Nutz是对于Java程序员来说,除SSH之外的另一个选择。当然,它是开源的,并且是完全免费的。同时也是商业友好的(Licensed under the Apache License, Version 2.0)。
- 如果开发中使用Hibernate觉得过于繁琐,或使用iBatis编写SQL感到不便,Nutz.Dao能提供专门设计的解决方案。 - 对于不习惯使用Spring或不愿意直接写XML配置的用户,Nutz.Ioc提供了简化配置的方案。 - 针对编写...
nutz-1.r.62.jar 的jar包 可以解决中文乱码,设置字符编码等等
2. **Nutz ORM**:Nutz ORM(对象关系映射)模块提供了对数据库操作的便捷支持,可以自动处理SQL语句的生成和执行,支持JDBC、MyBatis等多种数据访问层方案,让数据库操作变得更加简单。 3. **Nutz DAO**:DAO...
nutzboot1.65版jar包...............................................................................................希望对你有用
4. **数据库操作**:Nutz提供了简单易用的ORM(Object-Relational Mapping)层,可以方便地进行数据库操作,支持SQL的动态生成,支持多种数据库引擎。 5. **Web开发支持**:Nutz提供了一套MVC(Model-View-...