nutz 中 配置nutz datasourcee 通过XML配置文件,下面参数中User,Dao是什么类在哪配置

博主使用nutz动态表名,查询分表中数据。参考nutzDoc动态表名一节&
使用TableName.set的方式可以很容易解决。
List&EventCacheInfo& list = new ArrayList&EventCacheInfo&();
TableName.set(&5minutely&);
list = dao.query(EventCacheInfo.class, cnd);
} finally {
TableName.clear();
但是用内部类的方式,总也获取不到返回值。错误代码如下:
final Condition cnd1 =
final List&EventCacheInfo& list = new ArrayList&EventCacheInfo&();
TableName.run(&5minutely&, new Runnable(){&/span&
public void run(){
list = dao.query(EventCacheInfo.class, cnd1); //错误行
错误信息:The final local variable list cannot be assigned, since it is defined in an enclosing type
本人基础不好,不明白list为什么不能被赋值,后面再研究。
最终方式,使用Molecule类:
final Condition cnd1 =
Molecule&List&EventCacheInfo&& mole = new Molecule&List&EventCacheInfo&&(){
public void run(){
setObj(dao.query(EventCacheInfo.class, cnd1));
TableName.run(&5minutely&, mole);
return mole.getObj(); //返回list
参考地址:
在Nutz中,存在大量需要使用匿名内部类的情况,很多童鞋都对传值很困惑,所以我这里说明一下&
//匿名内部类,只能访问final的本地变量及方法参数&
public void addUser(final String name, String passwd, final String userType) {&
&&& User user =&
&&& if (&admin&.equal(userType))&
&&&&&&& user = new AdminUser(name, passwd); //仅作演示.&
&&&&&&& user = new User(name, passwd);&
&&& final User _user = //因为user变量不能设置为final,所以需要新加一个变量来中转&
&&& Trans.run(new Atom(){&
&&&&&&& public void run() {&
&&&&&&&&&&& dao.insert(_user);&
&&&&&&&&&&& if (log.isDebugEnable())&
&&&&&&&&&&&&&&& log.debugf(&Add user id=%d, name=%s , type=%s&, _user.getId(), name, userType);&
&&&&&&& }&
传出(获取方法返回值等等):&
方法1 – 对象数组法 通过一个final的Object对象数组,存放需要的值&
public long countUser(final String userType) {&
&&& final Object[] objs = new Object[1];&
&&& Trans.run(new Atom(){&
&&&&&&& public void run() {&
&&&&&&&&&&& objs[0] = dao.count(User.class, Cnd.where('userType', '=', userType));&
&&&&&&& }&
&&& return ((Number)objs[0]).longValue();&
方法2 – ThreadLocal法 通过一个ThreadLocal来存放结果,这个ThreadLocal可以是静态的,供全app使用的&
private static final ThreadLocal re = new ThreadLocal(); //自行补上泛型Object&
public long countUser(final String userType) {&
&&& Trans.run(new Atom(){&
&&&&&&& public void run() {&
&&&&&&&&&&& re.set(dao.count(User.class, Cnd.where('userType', '=', userType)));&
&&&&&&& }&
&&& return ((Number)re.get()).longValue(); //严谨一点的话,应该将ThreadLocal置空&
方法3 – Molecule法 Molecule类是Nutz内置的抽象类类,实现Runnable和Atom接口,添加了两个获取/设置值的方法.&
public long countUser(final String userType) {&
&&& Molecule mole = new Molecule() { //需要自行补齐泛型&
&&&&&&& public void run() {&
&&&&&&&&&&& setObj(dao.count(User.class, Cnd.where('userType', '=', userType)));&
&&&&&&& }&
&&& Trans.run(mole);&
&&& return ((Number)mole.getObj()).longValue();&
http://wendal.net/404.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:122317次
积分:1245
积分:1245
排名:千里之外
原创:36篇
转载:28篇
评论:15条
(1)(2)(5)(2)(3)(2)(7)(3)(4)(3)(3)(1)(4)(6)(7)(7)(1)(1)(2)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Nutz是一个免费的JavaEE开源框架,它几乎具备SSH框架所有的功能,它最大的特点是轻量级,所以它将会是SSH框架的一个可尝试的替代品。
Nutz的特点?
· 体积小,轻量级;最新版本的jar文件只有712kb;
· 对JDBC的封装支持; 针对JDBC进行了薄封装;
· 灵活;各个部分独立使用;
· 完整,不零散;它的所有功能均不依赖于第三方jar文件;
· 功能全面;它具有SSH框架拥有的大部分功能。&
怎样使用Nutz?
首先,必须下载Nutz的jar文件;Nutz的体积小巧,只有一个jar文件;
然后,创建一个WebProject工程;我们把Nutz.Dao(也就是Nutz的数据持久化)作为Nutz的入门实例;
第一步,创建一个名为NutzDemo的Web Project,将下载的Nutz jar文件添加到Web/lib目录中;
第二步,在src目录下创建一个POJO,利用Nutz的注解为POJO对象的类、字段进行注解,将对象与数据库的表进行映射;
代码如下:
import java.io.S
import org.nutz.dao.entity.annotation.C
import org.nutz.dao.entity.annotation.Id;
import org.nutz.dao.entity.annotation.T
@Table(&tbl_user&)
public class User implements Serializable {
& & @Column
& & @Column
& & private S
& & @Column
& & public int getUid() {
& & public void setUid(int uid) {
& & & &this.uid =
& & public String getUname(){
& & public void setUname(Stringuname) {
& & & &this.uname =
& & public int getUage() {
& & public void setUage(int uage) {
& & & &this.uage =
& & 其中@Table注解用于指定与POJO所对应的数据库表;@Column注解用于指定字段与数据库表所对应的列;@Id指定数据表的数字主键,那么字符主键应该用@Name,复合主键应该用@PK。
第三步,配置数据源,因为要使用JNDI来创建数据源对象,并且要在Tomcat服务器下运行该程序,所以我们要对Tomcat安装目录下的conf/context.xml文件配置数据源信息。配置信息如下:
& & & &&Context&
& & & &……
& &&!-- MySql 数据库--&
& &&Resource name=&jdbc/NutzDemo& auth=&Container&
& & & & & & & & & & &type=&javax.sql.DataSource&maxActive=&100& maxIdle=&30&
& & & & & & & & & & &maxWait=&10000&username=&root& password=&root&
& & & & & & & & & & &driverClassName=&com.mysql.jdbc.Driver&
& & & & & & & & & & &url=&jdbc:mysql://localhost:3306/cheng&/&
& & & &……
&/Context&
第四步,创建NutDao对象,将POJO对象持久化到数据库中;在这里我们创建一个Servlet,我们通过访问Servlet来初始化DataSource并且对对象进行持久化操作;
代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)&throws ServletException,IOException {
& & &try {
& & & & &// 初始化JNDI上下文,创建DataSource对象
& & & & &Context initContext = new InitialContext();
& & & & &Context context = (Context)initContext.lookup(&java:comp/env&);
& & & & &DataSourcedataSource = &(DataSource)context.lookup(&jdbc/NutzDemo&);&
& & & & &// 创建NutDao对象
& & & & &Dao dao = newNutDao(dataSource);& &
& & & & &// 创建一个User对象
& & & & &User user =new User();
& & & & &user.setUname(&cheng&);
& & & & &user.setUage(20);
& & & & &// 持久化一条数据到数据库中
& & & & &user =dao.insert(user);
& & & & &System.out.println(&添加到数据库中的数据为:& &#43; user.getUname());
& & &} catch (NamingException) {
& & & & &e.printStackTrace();
此时就利用Nutz进行了持久化操作。之后,我们进行删除操作,其代码如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
& & & & &throws ServletException,IOException {
& & &// 创建User对象
& & &User user = new User();
& & &user.setUid(5);
& & &this.deleteUser(user);
& public void deleteUser (Useruser) &{
& & &try {
& & & & &// 创建JNDI数据源
& & & & &Context initContext = new InitialContext();
& & & & &Context context = (Context)initContext.lookup(&java:comp/env&);
& & & & &DataSource dataSource = &(DataSource)context.lookup(&jdbc/NutzDemo&);& &&
& & & & &// 创建NutDao对象
& & & & &Dao dao = newNutDao(dataSource);
& & & & &// 删除
& & & & &dao.delete(user);
& & &} catch (NamingExceptione) {
& & & & &e.printStackTrace();
之后,进行修改操作,代码如下:
public void do Post(HttpServletRequestrequest, HttpServletResponse response)& throws ServletException,IOException {
& & &// 创建User对象
& & &User user = this.getUserById(6);
& & &user.setUname(&ya&);
& & &user.setUage(23);
& & &System.out.println(&User:& &#43; user.getUname());
& & &this.updateUser(user);
& public User getUserById (int uid)& {
& & &// 创建User对象
& & &User user = new User();
& & &try {
& & & & &// 创建JNDI数据源
& & & & &ContextinitContext = new InitialContext();
& & & & &Contextcontext = (Context)initContext.lookup(&java:comp/env&);
& & & & &DataSourcedataSource = &(DataSource)context.lookup(&jdbc/NutzDemo&);& &&
& & & & &// 创建NutDao
& & & & &Dao dao = newNutDao(dataSource);
& & & & &// 根据Id查询
& & & & &user =dao.fetch(User.class,uid);& &&
& & & & &System.out.println(&UserName:& &#43;user.getUname());
& & &} catch (NamingException) {
& & & & &e.printStackTrace();
& public void updateUser(Useruser)& {
& & &try {
& & & & &// 创建JNDI数据源
& & & & &ContextinitContext = new InitialContext();
& & & & &Contextcontext = (Context)initContext.lookup(&java:comp/env&);
& & & & &DataSourcedataSource = &(DataSource)context.lookup(&jdbc/NutzDemo&);& &
& & & & &// 创建NutDao对象
& & & & &Dao dao = newNutDao(dataSource);
& & & & &// 更改
& & & & &dao.update(user);&
& & &} catch (NamingExceptione) {
& & & & &e.printStackTrace();
再之后,进行查询操作,代码如下:
protected voiddoPost(HttpServletRequest req, HttpServletResponse resp)
& & & & &throws ServletException,IOException {
& & &this.getUserById(2);
& public User getUserById (int uid)
& & &// 创建User对象
& & &User user = new User();
& & &try {
& & & & &// 创建JNDI的DataSource对象
& & & & &ContextinitContext = new InitialContext();
& & & & &Contextcontext = (Context)initContext.lookup(&java:comp/env&);
& & & & &DataSourcedataSource = &(DataSource)context.lookup(&jdbc/NutzDemo&);
& & & & &// 创建NutDao
& & & & &Dao dao = newNutDao(dataSource);
& & & & &// 查询
& & & & &user =dao.fetch(User.class,uid);
& & & & &System.out.println(&UserName:& &#43;user.getUname());
& & &} catch (NamingExceptione) {
& & & & &e.printStackTrace();
最后,查询所有数据,代码如下:
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
& & & & & &throws ServletException,IOException {
& & & &List&User&userList = this.getAllUser();
& & & &for (int i=0;i&userList.size(); i&#43;&#43;)
& & & & & &User user= userList.get(i);
& & & & & &System.out.println(&用户为:& &#43;user.getUname());
& & public List&User&getAllUser ()
& & & &BasicDataSourceds = new BasicDataSource();
& & & &ds.setDriverClassName(&com.mysql.jdbc.Driver&);
& & & &ds.setUrl(&jdbc:mysql://localhost:3306/cheng&);
& & & &ds.setUsername(&root&);
& & & &ds.setPassword(&root&);
& & & &ds.setInitialSize(50);
& & & &ds.setMaxActive(100);
& & & &ds.setMaxIdle(30);
& & & &ds.setMaxWait(10000);
& & & &// 创建NutzDao对象
& & & &Dao dao = new NutDao(ds);
& & & &// 创建Sql对象
& & & &Sql sql =Sqls.create(&select * fromtbl_user&);
& & & &// 返回多个
& & & &sql.setCallback(Sqls.callback.entities());
& & & &Entity&User&entity = dao.getEntity(User.class);
& & & &sql.setEntity(entity);
& & & &dao.execute(sql);
& & & &return sql.getList(User.class);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:229245次
积分:1910
积分:1910
排名:第15445名
原创:82篇
转载:117篇
评论:11条
(3)(1)(1)(2)(2)(5)(7)(8)(2)(1)(4)(1)(3)(1)(2)(6)(4)(22)(4)(9)(12)(4)(28)(2)(15)(48)(7)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&您所在的位置: &
dao.xml配置文件实例说明
dao.xml配置文件实例说明
电子工业出版社
《iBATIS框架源码剖析》第4章iBATIS DAO体系结构和实现,本章重点介绍iBATIS DAO引擎的实现,包括DAO业务实现的序列图和说明,iBATIS DAO组件管理,iBATIS DAO事务管理实现。本节为大家介绍dao.xml配置文件实例说明。
4.3.4& dao.xml配置文件实例说明
1.dao.xml内容
dao.xml配置文件如下:&version="1.0"&encoding="UTF-8"&&!DOCTYPE&daoConfig&&PUBLIC&"-//ibatis.apache.org//DTD&DAO&Configuration&2.0//EN" &&&&&"http://ibatis.apache.org/dtd/dao-2.dtd"&&&&&&&&&&&type="SQLMAP"&&&&&&&&name="SqlMapConfigResource"&&&&&&&&&value="com/ibatis/jpetstore/persistence/sqlmapdao/sql/sql-map-config.xml"&&&&&&&&&&&interface="com.ibatis.jpetstore.persistence.iface.ItemDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.ItemSqlMapDao"&&&&&&interface="com.ibatis.jpetstore.persistence.iface.SequenceDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.&SequenceSqlMapDao"&&&&&&interface="com.ibatis.jpetstore.persistence.iface.AccountDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.&AccountSqlMapDao"&&&&&&interface="com.ibatis.jpetstore.persistence.iface.CategoryDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.&CategorySqlMapDao"&&&&&&interface="com.ibatis.jpetstore.persistence.iface.ProductDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.&ProductSqlMapDao"&&&&&&interface="com.ibatis.jpetstore.persistence.iface.OrderDao"&&&&&&&implementation="com.ibatis.jpetstore.persistence.sqlmapdao.&OrderSqlMapDao"&&&&&
在这个dao.xml中有一个daoConfig节点,在daoConfig根节点下有一个context节点。在context节点下有一个transactionManager和6个dao节点。
在这个配置文件下,在服务器端形成对应的内存对象结构。
1.总体说明
解析生成1个StandardDaoManager实例化对象,1个DaoContext实例化对象,1个DaoTransactionManager实例化对象,6个DaoImpl实例化对象和6个DaoProxy实例化对象。
2.StandardDaoManager实例化对象说明
1个StandardDaoManager实例化对象的内部私有变量有两个HashMap:typeContextMap和daoImplMap,其初始化程序代码如下。public&void&addContext(DaoContext&context)&{ &&&&&//&Add&context&ID&mapping,在本例中没有执行 &&&&&if&(context.getId()&!=&null&&&&context.getId().length()&&0)&{ &&&&&&&if&(idContextMap.containsKey(context.getId()))&{ &&&&&&&&&throw&new&DaoException("There&is&already&a&DAO&Context&with&the&ID&'"&+&context.getId()&+&"'."); &&&&&&&}& &&&&&&&idContextMap.put(context.getId(),&context); &&&&&} &&&&&//增加类型context映射 &&&&&Iterator&i&=&context.getDaoImpls(); &&&&&while&(i.hasNext())&{ &&&&&&&DaoImpl&daoImpl&=&(DaoImpl)&i.next(); &&&&&&&//&Don't&associate&a&default&DAO&when&multiple&DAO&impls&are&registered. &&&&&&&if&(typeContextMap.containsKey(daoImpl.getDaoInterface()))&{ &&&&&&&&&typeContextMap.put(daoImpl.getDaoInterface(),&null); &&&&&&&}&else&{ &&&&&&&&&typeContextMap.put(daoImpl.getDaoInterface(),&context); &&&&&&&} &&&&&&&daoImplMap.put(daoImpl.getProxy(),&daoImpl); &&&&&&&daoImplMap.put(daoImpl.getDaoInstance(),&daoImpl); &&&&&} &&&} &
变量typeContextMap存储了6个数据,分别是配置文件dao节点的interface内容形成的接口和当前的DaoContext实例化对象。daoImplMap存储了12个数据,其中6个是配置文件dao节点的interface属性内容形成的实现dao接口的DaoProxy动态代理对象和对应的DaoImpl实例化对象,另外6个是配置文件dao节点的implementation属性内容形成的实现dao接口的实例化对象和对应的DaoImpl实例化对象。
3.DaoContext实例化对象说明
DaoContext实例化对象的内部私有变量有1个StandardDaoManager变量daoManager、1个DaoTransactionManager变量transactionManager和1个HashMap变量typeDaoImplMap。
StandardDaoManager变量就是上述的StandardDaoManager实例化对象。transactionManager变量就是dao.xml配置文件中transactionManager节点形成的SqlMapDaoTransactionManager实例化对象。变量typeDaoImplMap存储了6个数据,分别是配置文件dao节点的interface内容形成的接口和对应的DaoImpl实例化对象。
4.DaoTransactionManager实例化对象
DaoTransactionManager实例化对象就是dao.xml配置文件中transactionManager节点形成的SqlMapDaoTransactionManager实例化对象。其私有变量只有1个SqlMapClient变量client。这个SqlMapClient变量非常重要,是dao结合SqlMap的接口(其内容在下面会有详细的介绍)。
5.DaoImpl实例化对象
DaoImpl实例化对象就是在dao.xml配置文件中每个dao节点都形成一个针对本节点的DaoImpl实例化对象。每个DaoImpl实例化对象有1个StandardDaoManager变量daoManager、1个DaoContext变量daoContext、1个Class变量daoInterface、1个Class变量daoImplementation、1个Dao变量daoInstance和1个Dao变量proxy。
StandardDaoManager变量就是上述的StandardDaoManager实例化对象,DaoContext变量就是上述的DaoContext实例化对象。Class类型daoInterface变量是配置文件dao节点的interface内容形成的接口。Class类型daoImplementation变量是配置文件dao节点的implementation内容形成的类。基于Dao接口的实例化变量daoInstance是配置文件dao节点的implementation内容形成的实例化对象。基于Dao接口的实例化变量proxy是基于配置文件dao节点的interface属性内容形成的接口并通过DaoProxy动态代理类实现的实例化对象。
6.DaoProxy实例化对象
DaoProxy实例化对象就是基于配置文件dao节点的interface属性内容形成的接口并通过DaoProxy动态代理类实现的实例化对象。在每个DaoProxy实例化对象有1个DaoImpl变量daoImpl。
【责任编辑: TEL:(010)】&&&&&&
关于&&&&的更多文章
本书采用故事模式讲述一门编程语言,以一个无知的菜鸟成长过程为
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
AngularJS是一款来自Google的前端JS框架,它的核心特
《学会VBA,菜鸟也高飞!》的目的是让读者能够在相对
本书揭示了Oracle 数据库内部的核心信息,这些信息恰
有些网站看起来很清爽;
有些网站看起来很杂乱;
有些网站能让你轻松地找到资料;
有些网站让你犹如置身迷宫
51CTO旗下网站}

我要回帖

更多关于 nutz dao 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信