在网上找了很多Hibernate的相关教程,大多数都是结合WEB服务器的,自己写一个单独的示例在Eclipse下直接运行,不需要自己写ANT脚本,不需要结合web服务器。但是需要MYSQL数据库-_-
首先要学会如何使用Eclipse,然后要下载Hibernate需要的所有JAR文件,最后安装好MYSQL
准备开始!
第一步,我们要创建一个表 结构如下
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id| int(11) | NO| MUL | NULL| auto_increment |
| title| varchar(400) | YES | | NULL||
| content | text | YES | | NULL||
| time | datetime | YES | | NULL||
+-----------+--------------+------+-----+---------+----------------+
第二步,在Eclipse中创建一个JAVA项目(我在项目中用到的包名是cn.com.nick.hbm)。编写News.java类,这个类对应了数据库中的表
package cn.com.nick.hbm; import java.util.Date; public class News { private int id; private String title; private String content; private Date date; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } |
第三步,配置对应关系 保存为News.hbm.xml文件 与News类在同一目录下(并不是一定要在同一目录下,为了方便暂时先放在这里)
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
|
第四步,配置hibernate.cfg.xml 注意这个名字不能改,并且要放到SRC的跟路径下(这里要注意,如果放错地方示例中的方法是找不到这个文件的)
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
true
com.mysql.jdbc.Driver
thread
jdbc:mysql://localhost:3306/test
root 123
org.hibernate.dialect.MySQLDialect
my
最后创建一个测试类 Test.java 代码如下,里边有注释说明
package cn.com.nick.hbm; import java.util.Date; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; public class Test { private static final SessionFactory sessionFactory; static { try { // 这里创建了SessionFactory 将hibernate.cfg.xml文件放到SRC的跟路径下 // Hibernate会自己找到 sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } public static void main(String[] args) { // 实例化一个新的News对象,并填充内容 News news = new News(); news.setTitle("测试标题"); news.setContent("添加测试内容"); news.setDate(new Date()); Test t = new Test(); // 调用Test类下的存储方法,相当于执行INSERT语句 // t.Save(news); // 调用查询方法,显示数据库的内容 t.select(); // 调用更新方法 // t.update(); // 调用删除 // t.delete(); } /** * 一个简单的添加数据方法 * @param news news对象,这个对象将被添加到库中 */ public void Save(News news) { try { //获取hibernate的session Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //这里只需要调用save方法把news对象传进去就插入成功了! session.save(news); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 查询方法 */ public void select() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //注意!!!这里的 News 不是表名称! 是对象名所以要注意大小写 String sql=" from News"; //带条件的查询 //String sql="from News where id=1"; //用session.createQuery()执行HQL查询语句 List l = session.createQuery(sql).list(); //在控制台循环输出 for (News n : l) { System.out.println(n.getId()); System.out.println(n.getTitle()); System.out.println(n.getContent()); System.out.println(n.getDate()); System.out.println("=============="); } session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 更新方法 */ public void update() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //定义了要装载对象的ID Integer id = 1; //用load方法装载一个对象进来 News n = (News) session.load(News.class, new Integer(id)); //重新设置这个对象的标题 n.setTitle("更新后标题"); //用update方法更新这个对象 session.update(n); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void delete() { try { Session session = Test.getSessionFactory().getCurrentSession(); session.beginTransaction(); //定义了要装载对象的ID Integer id = 6; //用load方法装载一个对象进来 News n = (News) session.load(News.class, new Integer(id)); //用delete方法删除这个对象 session.delete(n); session.getTransaction().commit(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
好啦,直接运行Test类看一下效果吧!