天天看点

hibernate增、删、改、查(CRUD)

需要注意的地方:

删除和修改操作都要指定对象的id,即主键,经过我的测试,如果不指定对象的主键,

删除和修改操作都是不成功的。

-------------------------------------------------------------------------------------------------------------------------------

注:我测试的环境为MyEclipse10+hibernate 3.6.4+mysql5.6

-------------------------------------------------------------------------------------------------------------------------------

先看下我测试时用的表tbAdmin结构和数据截图:

hibernate增、删、改、查(CRUD)

表tbAdmin数据如下:

hibernate增、删、改、查(CRUD)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

我工程的结构截图如下(注意映射文件Admin.cfg.xml的位置为bean\Admin.cfg.xml):

hibernate增、删、改、查(CRUD)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

持久化类Admin的代码如下:

package bean; //bean包存放的就是VO类了。
import java.io.Serializable;
public class Admin implements Serializable{ //对应管理员表tbAdmin
	private static final long serialVersionUID = 1L;
	int	id;	//对应表中的主键
	String name;
	String pass;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	
}
           

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

映射文件Admin.cfg.xml的内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="bean.Admin" table="tbAdmin" catalog="dbAddressBook">

<id name="id" type="java.lang.Integer">

<column name="id" /><!--表tbAdmin的主键-->

<generator class="native"></generator><!--主键生成方式-->

</id>

<property name="name" type="java.lang.String" >

<column name="name" />

</property>

<property name="pass" type="java.lang.String" >

<column name="pass" />

</property>

</class>

</hibernate-mapping>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

hibernate.cfg.xml的配置内容如下:

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.-->

<hibernate-configuration>

<session-factory>

<property name="javax.persistence.validation.mode">none</property>

<property name="hibernate.dialect">

org.hibernate.dialect.MySQLDialect

</property>

<property name="hibernate.connection.url">

jdbc:mysql://localhost:3306/dbAddressBook

</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">123456</property>

<property name="hibernate.connection.driver_class">

com.mysql.jdbc.Driver

</property>

<property name="hibernate.format_sql">true</property>

<property name="hibernate.show_sql">true</property>

<mapping resource="bean/Admin.cfg.xml" /><!-- 文件映射 -->

</session-factory>

</hibernate-configuration>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上都是准备工作,现在可以进行CRUD操作了。为了方便说明,我写了个操作模板,文章后面

都是在这个模板下面进行的,该操作模板如下:

package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
import bean.Admin;

public class MyTest {

	@Test
	public void test() {
	
			Configuration cfg=new Configuration();//创建配置对象cfg
			//cfg.configure()会读取hibernate的配置文件hibernate.cfg.xml
			SessionFactory sf=cfg.configure().buildSessionFactory();//创建会话工厂
			Session session=sf.openSession();//打开会话
			org.hibernate.Transaction tx=session.beginTransaction();//开启事务

			//在这里进行增、删、改、查...
			
			tx.commit();//提交事务
			session.close();	//关闭事务
	}
}
           

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

增操作代码如下:

//在这里进行增、删、改、查...
			Admin admin=new Admin();
			admin.setName("test2013");
			admin.setPass("123456");
			session.save(admin); 	//增操作,即往表中增加数据
           

效果截图:

hibernate增、删、改、查(CRUD)

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

删操作代码如下:

//在这里进行增、删、改、查...
			Admin admin=new Admin();
			admin.setId(4);	//设置对象的主键,即在表中的主键
			session.delete(admin); 	//删操作,即从表中删除数据
           

效果截图如下(刚才添加的数据不见了哈):

hibernate增、删、改、查(CRUD)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

改操作如下:

//在这里进行增、删、改、查...
			Admin admin=new Admin();
			admin.setId(2);	//设置对象的主键,即在表中的主键
			admin.setName("qq");
			admin.setPass("123456");
			session.update(admin); 	//更新操作,即更改表中的数据
           

效果截图如下(qq密码变了哈):

hibernate增、删、改、查(CRUD)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

最后说下查询操作,这个比较麻烦,因为hibernate支持的查询方式有几种,如HQL查询,QBC查询,原生态SQL查询,

这里我使用的是HQL查询。

使用HQL查询,有一个地方需要注意,那就是from后面跟的不是表名,二是持久化类的完整类名。

什么是持久化类?就是我们上面在映射文件Admin.cfg.xml中配置的类了。

什么是完整类名?就是带包的类了,如java.lang.String

关于持久化类,截图如下(下图中的bean.Admin就是持久化类了。):

hibernate增、删、改、查(CRUD)

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

就废话这么多了,查询代码如下:

//在这里进行增、删、改、查...
			Admin admin=new Admin();
			java.util.List<Admin> list=session.createQuery("from bean.Admin").list();
			for(int i=0;i<list.size();i++){
				admin=list.get(i);
				System.out.println(admin.getId()+" "+admin.getName()+" "+admin.getPass());
			}
           

效果截图如下:

hibernate增、删、改、查(CRUD)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

hibernate增、删、改、查(CRUD)

您的十分满意是我追求的宗旨。

您的一点建议是我后续的动力。