扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年9月24日
关键字:
在本页阅读全文(共2页)
最后在JB里新建一个类,名字为Hello.java,我会一步步解释,代码如下:
package hibernate;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.LongType;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.ScrollableResults;
import java.util.*;
/**
* @author geezer
* QQ:9986986 MSN:geezer_hot@hotmail.com
*/
public class Hello {
public Hello() {
}
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration().addClass(Hello_Bean.class);//用Hello_Bean.class类初始化
SessionFactory sessions = cfg.buildSessionFactory();//用buildSessionFactory方法得到一个SessionFactory对象
Session session = sessions.openSession();//再用SessionFactory的openSession方法得到一个session
new SchemaExport(cfg).create(true, true);//这句意思是创建表,第一次运行以后,就是创建完表以后再把这行加上注释。如果建表以后不把这一句注释掉的话会删掉以前创建的表再重新建一个。
Hello_Bean my_hibernate = new Hello_Bean();//得到一个Hello_Bean对象
my_hibernate.setName("my_name");//设置Hello_Bean对象的name值为my_name,这里其实就是说把字符串my_name当作数据库字段name的值.数据库字段name与Hello_Bean类里的getName,setName方法是对应的。形成一个映射关系。
my_hibernate.setAddress("my_address");//如上
session.save(my_hibernate);//这句很重要,将my_hibernate对象写进数据库(my_hibernate对象里的name与address我们刚刚已经设置了值了,会直接把name,address的值写进数据库去)
session.flush();
session.close();
//上面是一个简单的插入数据与第一次运行建表的介绍,下面我再介绍删除与修改的方法,下面的代码我都加了注释,自己需要什么方法(删除,修改,循环数据库的值)就把注释去掉就可以了
HSQL比较简单,大家看一下例子就应该明白了,这里就不讲了。
遍历数据库的方法有三种,分别是Query,find,iterate,Query和find返回一个List接口,iterate返回一个Iterator,具体方法可以查看这些类得知。
//删除数据
/*
int a=session.delete("from Hello_Bean where id=1");//如果没有找到id为1的数据那么返回0,如果找到返回1,这里的Hello_Bean是我们的Hello_Bean类,他跟数据库表对应,所以我们在这里是直接用Hello_Bean来代码数据库表的。
System.out.println(a);
session.flush();
session.close();
*/
//Query方法查询数据
/*
Hello_Bean my_hibernate = null;
Query q = session.createQuery("from Hello_Bean");
// Query q = session.createQuery("from Hello_Bean where name=?");//这里的?跟JDBC的PreparedStatement方法的差不多,只不过这里的是以0开始,jdbc的是1开始。
// q.setString(0,"my_name");
// q.setFirstResult(0);//这句话的意思是说查询结果从第几行开始列出数据
// q.setMaxResults(3);//这句话的意思是取多少条数据,就跟SQL SERVER的TOP方法和MYSQL的LIMIT方法一样的意思。
// ScrollableResults sc=q.scroll();//得到一个ScrollableResults,可滚动的,如果你的数据库支持游标自由移动的话可以加上,也就是说可以判断查询结果有没有值,或者移动到下一行记录等等。
// if(!sc.next())
// {
// System.out.println("没有找到你需要的数据");
// }
session.flush();//如果使用了ScrollableResults的话请把这行注释掉
session.close();//如果使用了ScrollableResults的话请把这行注释掉
List l=q.list();//返回一个List接口,用来遍历结果集
for(int i=0;i<l.size();i++){
my_hibernate = (Hello_Bean) l.get(i);//从List中取得一个my_hibernate对象
System.out.println(my_hibernate.getName());//调用my_hibernate对象的getName方法取得数据库name字段的值
}
*/
//find方法查询数据
/*
Hello_Bean my_hibernate = null;
List q = session.find("from Hello_Bean");
session.flush();
session.close();
for(int i=0;i<q.size();i++)
{
my_hibernate = (Hello_Bean) q.get(i);
System.out.println(my_hibernate.getName());
}
*/
//iterate方法查询数据
/*
Hello_Bean my_hibernate = null;
Iterator q = session.iterate("from Hello_Bean");
while(q.hasNext())
{
my_hibernate = (Hello_Bean) q.next();
System.out.println(my_hibernate.getName());
}
*/
//修改数据
/*
Query qq=session.createQuery("from Hello_Bean");
Hello_Bean my_hibernate=(Hello_Bean)session.load(Hello_Bean.class,new Integer(2));
//这里的new Integer(2)意思是修改表中id为2的那一行数据,必须是一个包装类的对象,如果使用int的话会出错。
my_hibernate.setName("geezer");//把id为2的那一行数据的name字段值改为"geezer"
session.flush();
session.close();
*/
}
}
最后运行就可以了。
如果大家有什么不清楚的,可以下载这篇文章的例子看看,运行一下。
下载完以后用JB打开hibernate.jpx就可以了。用之前把hibernate和MYSQL的驱动加进去,方法如果不知道再看看本章开头部分。
常见错误:
Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.
如果出现这行错误说明你的xml配置文件有不规范的字符,检查下。
net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml
如果出现这行错误说明你的hibernate的XML配置文件有错
net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found
如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate\classes\hibernate\目录下,也就是跟Hello_Bean.class类文件一起。
net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean
如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。
net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver
如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者