- 浏览: 364559 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自圣思园 Hibernate25.自定义内存排序器详解及符合主键映射详解
上一节讲到了如何通过设置映射文件属性来实现内存排序,http://alleni123.iteye.com/admin/blogs/1979812
natural->自然排序,升序
unsorted->不排序
此外,我们可以自定义排序规则。方法是定义一个类,让其实现Comparator接口,并且实现该接口中的compare方法,在该方法中实现排序规则即可。
然后将该自定义排序规则的类名作为sort的属性值即可。
配置文件和前几节一样, Student.java, Team.java, Student.hbm.xml,Team.hbm.xml。
首先要创建一个继承Comparator接口的类
这里的排序是首先对两个学生的卡号进行对比,如果卡号不同,则返回对比结果。
但是如果卡号一样,那么就对比名字,返回名字的对比结果。
要使用该Comparator,必须在映射配置文件里配置一下。
查询代码:
这里数据库里面有三行数据,分别是
id_card name
333 alleni
111 eline
222 222
最后的输出结果就是:
eline,222,alleni
也就是会通过对比id_card来进行排序。
============================
异常:
这里插入数据时会报错。
Exception in thread "main" java.lang.ClassCastException: set_compare.Student cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542)
at java.util.TreeSet.add(TreeSet.java:238)
at set_compare.Hibernate_1Insert.main(Hibernate_1Insert.java:38)
貌似要让Student.java类实现Comparable接口才行。 具体以后再研究。
上一节讲到了如何通过设置映射文件属性来实现内存排序,http://alleni123.iteye.com/admin/blogs/1979812
natural->自然排序,升序
unsorted->不排序
此外,我们可以自定义排序规则。方法是定义一个类,让其实现Comparator接口,并且实现该接口中的compare方法,在该方法中实现排序规则即可。
然后将该自定义排序规则的类名作为sort的属性值即可。
配置文件和前几节一样, Student.java, Team.java, Student.hbm.xml,Team.hbm.xml。
首先要创建一个继承Comparator接口的类
public class MyComparator implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { if(o1==o2){ return 0; } int result=o1.getCardId().compareTo(o2.getCardId()); if(result!=0){ return result; } return o1.getName().compareTo(o2.getName()); } }
这里的排序是首先对两个学生的卡号进行对比,如果卡号不同,则返回对比结果。
但是如果卡号一样,那么就对比名字,返回名字的对比结果。
要使用该Comparator,必须在映射配置文件里配置一下。
<hibernate-mapping package="set_compare"> <class name="Team" table="test_team"> <id name="id" column="id" type="string"> <generator class="uuid"> </generator> </id> <property name="name" column="name" type="string" /> <set name="students" table="test_student" sort="set_compare.MyComparator"> <!--这里不能只写MyComparator,否则Hibernate会报错。--> <key column="team_id"></key> <one-to-many class="Student"/> </set> </class> </hibernate-mapping>
查询代码:
Session session=HibernateUtil.openSession(); Team t=(Team) session.get(Team.class, "4028bd81428f34c201428f34c4e90000"); Set s=t.getStudents(); System.out.println(s.size()); System.out.println(t.getName()); Iterator it=s.iterator(); while(it.hasNext()){ System.out.println(((Student)it.next()).getName()); }
这里数据库里面有三行数据,分别是
id_card name
333 alleni
111 eline
222 222
最后的输出结果就是:
eline,222,alleni
也就是会通过对比id_card来进行排序。
============================
异常:
这里插入数据时会报错。
Session session=HibernateUtil.openSession(); Transaction tx=session.beginTransaction(); Team team=new Team(); team.setName("english"); team.setStudents(new TreeSet()); Set set=team.getStudents(); Student s1=new Student(null,"111","alleni",23,team); Student s2=new Student(null,"222","eline",23,team); Student s3=new Student(null,"333","3333",23,team); set.add(s1); set.add(s2); set.add(s3); session.save(team); tx.commit();
Exception in thread "main" java.lang.ClassCastException: set_compare.Student cannot be cast to java.lang.Comparable
at java.util.TreeMap.put(TreeMap.java:542)
at java.util.TreeSet.add(TreeSet.java:238)
at set_compare.Hibernate_1Insert.main(Hibernate_1Insert.java:38)
貌似要让Student.java类实现Comparable接口才行。 具体以后再研究。
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3648<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1616Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1420org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 829今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 995摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1251三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 611继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 982摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1404摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2409这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate配置Set和List
2013-11-25 10:44 1839========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1257摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 841场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 557摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 997摘自圣思园 19.Hibernate的对象检索策略深度解析.a ... -
Hibernate的对象检索策略 (一) SQL左外连接检索策略
2013-11-20 15:32 1093首先是测试表的结构: 先通过hibernate将数据放入 ...
相关推荐
主要介绍了JAVA使用Comparator接口实现自定义排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
comparator接口与Comparable接口的区别
程序实现时间排序Comparator
Java中Comparator接口的用法 对集合排序的例子 Comparator
Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...
java排序Comparator和Comparable
List对象集合的排序:比较器Comparator
他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个personList,里面包含了person1, person2, ...
NULL 博文链接:https://singhoo.iteye.com/blog/1704428
主要介绍了Java中实现Comparator接口和用法实例(简明易懂),本文给出实现Comparator接口的实例和使用这个接口的代码实例,需要的朋友可以参考下
493.491.JAVA基础教程_常用类-使用Comparator实现定制排序(493).rar
计算机后端-Java-Java核心基础-第22章 常用类 23. 使用Comparator实现定制排序.avi
hbase 自带的Comparator只能进行字符串的比较,不能进行数值比较,通过自定义代码实现该功能。 具体使用请参考 http://blog.csdn.net/mtj66/article/details/52574739
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
NULL 博文链接:https://elvin-chu.iteye.com/blog/1979500
定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口实现类对象与该TreeSet集合关联, 由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements...
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧