Hibernate是开源的对象关系映射框架,他对JDBC进行了轻量级封装,使程序员可以使用面向对象思维操作数据库,这是一种ORM,即对象/关系映射。他可以使用在Java客户端或者Web应用中,以取代CMP完成数据持久化任务。
使用Hibernate需要配置两种文件,一是为每一个POJO类配置一个[POJO].hbm.xml,该POJO类对应数据库中得一个表。二是hibernate.cfg.xml文件,该配置文件用来管理数据库连接和*.hbm.xml文件。
使用DatabaseExplorer可以在MyEclipse环境下直接对数据库进行操作,不需要专门打开新的数据库操作窗口,比较方便,这里介绍下Database的配置。本例中使用MS SQLServer2005服务器作为数据库服务器,首先在服务器企业管理器的安全性的登录选项下新建一个合适角色和访问数据库权限的用户testload密码为123。
打开MyEclipse Database Explorer窗口后,新建一个数据库连接:ConnectionName填SQLServer2005 Conn。Driver template选SQLServer2005,ConnectionURL填:jdbc:sqlservr://localhost:1433;databaseName=test;username填申请的数据库名,驱动包加入当前使用的jar包。配置显示多少数据库后输入当前数据库密码,选择要显示的数据库,新建完成。在新建的数据库上需要OpenConnection,之后就可以使用MyEClipse查看了当前数据库信息了。
新建一个普通Java项目,附加Hibernate开发能力,设值配置文件存放路径,选择刚才建立的数据库连接,选择复制jdbc驱动jar包:copy db driver to project and add to buildpath。设置好sessionFactory位置即可。
进入DatabaseExplorer视图下,在新建的连接SQLServer2005 Conn上点开需要的数据库test->dbo->table->testTable右键选择Hibernate Reverse Engineering,选择当前src目录为java源码目录,选中创建配置文件*.hbm.xml和POJO<>DB项,如图所示:
在映射细节中,注意IDGenerator选择Native项。保持默认设值,Finish完成即可。
HQL语言类似SQL语言,相当于面向对象的SQL。例如,
1. From句子:from useras u,student s
2. Where:select u from user u where u.xh=’11111’
3. 聚合:avg,sum,min,max,count,
4. Group
5. Having 聚合函数和having一块使用:selectcount(*)fromresult r having r.score<60 group by r.student_no
6. 注意HQL语句不区分大小写,但涉及到Java的地方区分大小写。Students相当于Student ass。
在com.hibernate.example包中新建类,HelloWorld,在其中代码:
packagewww.hibernate.example; importjava.util.List; importorg.hibernate.Query; importorg.hibernate.Session; importorg.hibernate.Transaction; public classHelloWorld { public static void main(String[] args) { Session session =HibernateSessionFactory.getSession(); //search Query q =session.createQuery("from Test"); doprint(q); //insert Test t = new Test(); t.setName("zhangsan"); Transaction tr =session.beginTransaction(); tr.begin(); session.saveOrUpdate(t); tr.commit(); q = session.createQuery("fromTest"); doprint(q); Test t2 =(Test)session.get(Test.class, new Integer(4)); t2.setName("bfl"); session.saveOrUpdate(t2); q = session.createQuery("fromTest"); doprint(q); Test t3 = (Test)session.get(Test.class,new Integer(4)); tr.begin(); session.delete(t3); tr.commit(); q = session.createQuery("fromTest"); doprint(q); } private static void doprint(Query q) { List list = q.list(); for(Object o:list){ Test mt = (Test)o; System.out.println("id:"+mt.getId()+"name:"+mt.getName()); } System.out.println(); } }
最后部署运行就可以了。效果如图所示。