仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 971|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA编程:使用Java Reflection(反射)道理,在hib...

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:50:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:静态|视图|组合查询
Reflection是Java程序开辟言语的特性之一,它同意运转中的程序对本身举行会见,并能间接操纵程序的外部属性。



Hibernate是一个面向Java情况的对象/干系数据库映照工具,基础上,每一个表大概视图在hibernate内里都能够对应一个类,在此处,我们经由过程充实的使用这个类,来完成静态组合查询。



起首我们一同来看看这个函数的源代码:



/***组合查询*@paramobject包括查询前提的对象*@paramfirstResult第一个前往的地位(从0入手下手)*@parammaxResults最年夜前往数*@paramorderField排序的字段*@paramisAbs是不是正序分列*@return*@throwsHibernateException*/publicListqueryList(Objectobject,intfirstResult,intmaxResults,StringorderField,booleanisAsc)throwsHibernateException,IllegalArgumentException,IllegalAccessException,InvocationTargetException{Listlist=null;Classc=object.getClass();Methodmethod[]=c.getMethods();try{Sessionsession=currentSession();Criteriacriteria=session.createCriteria(object.getClass());for(inti=0;i<method.length;i++){Stringname=method[i].getName();if(name.indexOf("getMin")==0){//年夜于StringfieldName=name.substring(6,7).toLowerCase()+name.substring(7);ObjectretObj=method[i].invoke(object,null);if(retObj!=null&&!retObj.equals(""))criteria.add(Expression.ge(fieldName,retObj));continue;}if(name.indexOf("getMax")==0){//小于StringfieldName=name.substring(6,7).toLowerCase()+name.substring(7);ObjectretObj=method[i].invoke(object,null);if(retObj!=null&&!retObj.equals(""))criteria.add(Expression.le(fieldName,retObj));continue;}if(name.indexOf("get")!=0||name.indexOf("getClass")==0)//假如不是必要的办法,跳出continue;StringfieldName=name.substring(3,4).toLowerCase()+name.substring(4);StringreturnType=method[i].getReturnType().toString();ObjectretObj=method[i].invoke(object,null);if(retObj!=null){//假如为null,没有赋值,跳出if(returnType.indexOf("String")!=-1){if(retObj.equals(""))//假如为""的String字段,跳出continue;criteria.add(Expression.like(fieldName,"%"+retObj+"%"));//对String的字段,利用like含混查询}elsecriteria.add(Expression.like(fieldName,retObj));}}if(isAsc)criteria.addOrder(Order.asc(orderField));//升序elsecriteria.addOrder(Order.desc(orderField));//降序criteria.setFirstResult(firstResult);criteria.setMaxResults(maxResults);list=criteria.list();}finally{closeSession();}



returnlist;}



假定干系数据库内里有一个物理表,其布局以下:



STAFF(员工表)



列名



范例



Null



申明



Id(pk)



VARCHAR2(20)



NOTNULL



员工工号



name



VARCHAR2(20)



NOTNULL



员工姓名



Dept



INTEGER



NULL



员工所属部门(p3)



Password



VARCHAR2(20)



NOTNULL



暗码



Post



INTEGER



NULL



员工所属职位(p14)



Priv



VARCHAR2(40)



NOTNULL



权限字



Birthday



VARCHAR2(20)



NULL



诞辰



Active



VARCHAR2(1)



NOTNULL



Y:激活N:未激活



使用工具,天生其相干的hibernate类Staff,其外部包含以下字段:



privatejava.lang.Stringid;privatejava.lang.Stringname;privatejava.lang.Longdept;privatejava.lang.Stringpassword;privatejava.lang.Longpost;privatejava.lang.Stringpriv;privatejava.lang.Stringbirthday;privatejava.lang.Stringactive;







上面,我们就能够使用下面的queryList来举行查询了



例子1:



前台必要一个包括一切职员的List,



那末相干代码以下:



Staffstaff=newStaff();



Listlist=queryList(staff,0,1000,id,true);







例子2:



查询一切姓名内里包括“丁”的职员



那末相干代码以下:



Staffstaff=newStaff();



staff.setName=”丁”;



Listlist=queryList(staff,0,1000,id,true);







例子3:



查询一切姓名包括“丁”,而且处于激活形态的职员



那末相干代码以下:



Staffstaff=newStaff();



staff.setName=”丁”;



staff.setActive=”Y”;



Listlist=queryList(staff,0,1000,id,true);





例子4:

查询一切姓名包括“丁”,而且处于激活形态的职员,同时请求前往的list依照诞辰举行排序



那末相干代码以下:



Staffstaff=newStaff();



staff.setName=”丁”;



staff.setActive=”Y”;



Listlist=queryList(staff,0,1000,birthday,true,);







对Staff举行一下加工,就能够完成年夜于,小于的功效,好比我们想完成查询生于1981-09-16今后的人,那末能够在Staff类内里增添以下代码:

privatejava.lang.StringminBirthday;



privatejava.lang.StringmaxBirthday;



publicjava.lang.StringgetMinBirthday(){

returnminBirthday;

}

publicvoidsetMinBirthday(java.lang.StringminBirthday){

this.minBirthday=minBirthday;

}

publicjava.lang.StringgetMaxBirthday(){

returnmaxBirthday;

}

publicvoidsetMaxBirthday(java.lang.StringmaxBirthday){

this.maxBirthday=maxBirthday;

}





例子5:

查询诞辰在1978年以后,1981年之前的激活形态职员,请求姓名包括“丁”,依照诞辰降序分列

Staffstaff=newStaff();



staff.setName=”丁”;



staff.setActive=”Y”;



staff.setMinBirthday(“1978”);



staff.setMaxBirthday(“1981”);



Listlist=queryList(staff,0,1000,birthday,false);

至此,应当说先容的差未几了,也许有人要问,”单表查询,能够云云,那末联表查询怎样办?“实在很复杂,在数据库内里创建一个视图就能够了。但愿这点履历对人人有效。

微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包......
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-1-20 15:04:43 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
只想知道 该用户已被删除
板凳
发表于 2015-1-29 11:56:35 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
不帅 该用户已被删除
地板
发表于 2015-2-6 00:39:33 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-6 15:10:00 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
再见西城 该用户已被删除
6#
发表于 2015-2-9 18:41:09 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
简单生活 该用户已被删除
7#
发表于 2015-2-9 21:19:49 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
海妖 该用户已被删除
8#
发表于 2015-2-28 04:30:31 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
透明 该用户已被删除
9#
发表于 2015-3-7 12:03:31 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
小魔女 该用户已被删除
10#
发表于 2015-3-11 03:51:16 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小女巫 该用户已被删除
11#
发表于 2015-3-15 21:23:13 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
变相怪杰 该用户已被删除
12#
发表于 2015-3-17 02:33:49 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
活着的死人 该用户已被删除
13#
发表于 2015-3-23 16:50:42 | 只看该作者
是一种突破用户端机器环境和CPU
因胸联盟 该用户已被删除
14#
发表于 2015-3-27 18:08:38 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-4 01:52:18 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
再现理想 该用户已被删除
16#
发表于 2015-4-7 12:29:47 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
第二个灵魂 该用户已被删除
17#
发表于 2015-4-7 23:50:13 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
深爱那片海 该用户已被删除
18#
发表于 2015-4-16 21:10:42 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
飘灵儿 该用户已被删除
19#
发表于 2015-4-23 16:54:08 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-29 07:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表