一、首先要搞定配置文档:
1、hibernate.cfg.xml;2.struts.xml;3.web.xml;4.XXX.hbm.xml
最主要的是配置hibernate.cfg.xml,位置必须与src同一路径,并且是src下的第一子菜单中,也就是打开src就能看到他,和src下的包名并列,这个要很注意,一般人都会在这里出错!
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect</property> <!-- 数据库方言 -->
<property name="connection.url">
jdbc:mysql://192.168.4.139:3306/test</property><!-- 数据库连接URL -->
<property name="connection.username">leo</property> <!-- 数据库用户名 -->
<property name="connection.password">cicdata</property> <!-- 数据库用户密码 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库驱动类 -->
<property name="show_sql">true</property>
<mapping resource="com/sterning/books/model/books.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
二、增添数据:
首先你要创建要创建表的属性值,并配置其.hbm.xml文档。
Books.java
package com.sterning.books.model;
public class Books {
// Fields
private int bookId;// 编号
private String bookName;// 书名
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
}
books.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.sterning.books.model.Books" table="LEARN_FRAME" >
<id name="bookId" type="java.lang.Integer">
<column name="ID" length="5" />
<generator class="assigned" />
</id>
<property name="bookName" type="java.lang.String">
<column name="NAME" length="100" />
</property>
</class>
</hibernate-mapping>
三、更新和删除数据
如果您是在同一个Session中取出数据并想要马上进行更新,则只要先查询并取出对象,透过setXXX()方法设定好新的值,然后呼叫session.flush()即可在同一个Session中更新指定的数据,例如:
package com.sterning.bean.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sterning.books.model.Books;
public class TestUpdate {
private static Object updated;
public static void main(String[] args) {
// TODO Auto-generated method stub
SessionFactory sFactory=new Configuration().configure().buildSessionFactory();
org.hibernate.classic.Session session=sFactory.openSession();
java.util.List books=session.find("from Books");
for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
Books book = (Books) iterator.next();
if(updated == null)
updated = book;
System.out.println(
"\n\tID: " + book.getBookId()+
"\n\tNAME: " + book.getBookName());
}
((Books) updated).setBookName("Jesse");
session.flush();
books = session.find("from Books");
session.close();
sFactory.close();
for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
Books book = (Books) iterator.next();
System.out.println(book.getBookName() +
"\n\tID: " + book.getBookId()+
"\n\tNAME: " + book.getBookName());
}
}
}
这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下:
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
ID: 2
NAME: 哈哈
ID: 4
NAME: 哈哈
ID: 5
NAME: 254534
ID: 6
NAME: 2534
Hibernate: update LEARN_FRAME set NAME=? where ID=?
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
INFO - closing
INFO - cleaning up connection pool: jdbc:mysql://192.168.4.139:3306/test
Jesse
ID: 2
NAME: Jesse
哈哈
ID: 4
NAME: 哈哈
254534
ID: 5
NAME: 254534
2534
ID: 6
NAME: 2534
如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下:
HibernateTest.java
|
这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL:
|
Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新:
User.hbm.xml
unsaved-value
可以设定的值包括:
◆any - 总是储存
◆none - 总是更新
◆null - id为null时储存(预设)
◆valid - id为null或是指定值时储存
这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。
如果要删除数据,只要使用delete()方法即可,直接看个例子。
package com.sterning.bean.hibernate;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.sterning.books.model.Books;
public class TestDel {
private static Object updated;
public static void main(String[] args) {
// TODO Auto-generated method stub
SessionFactory sFactory=new Configuration().configure().buildSessionFactory();
org.hibernate.classic.Session session=sFactory.openSession();
java.util.List books=session.find("from Books");
for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
Books book = (Books) iterator.next();
if(updated == null)
updated = book;
System.out.println(
"\n\tID: " + book.getBookId()+
"\n\tNAME: " + book.getBookName());
}
session.delete(updated);
books = session.find("from Books");
session.close();
sFactory.close();
for (java.util.ListIterator iterator = books.listIterator(); iterator.hasNext(); ) {
Books book = (Books) iterator.next();
System.out.println(book.getBookName() +
"\n\tID: " + book.getBookId()+
"\n\tNAME: " + book.getBookName());
}
}
}
一个执行的结果范例如下:
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
ID: 2
NAME: Jesse
ID: 4
NAME: 哈哈
ID: 5
NAME: 254534
ID: 6
NAME: 2534
Hibernate: delete from LEARN_FRAME where ID=?
Hibernate: select books0_.ID as ID0_, books0_.NAME as NAME0_ from LEARN_FRAME books0_
INFO - closing
INFO - cleaning up connection pool: jdbc:mysql://192.168.4.139:3306/test
哈哈
ID: 4
NAME: 哈哈
254534
ID: 5
NAME: 254534
2534
ID: 6
NAME: 2534
Hibernate对于数据的更新、删除等动作,是依赖id值来判定,如果您已知id值,则可以使用load()方法来加载资料。
部分参考 51CTO.com