需要注意的地方:
删除和修改操作都要指定对象的id,即主键,经过我的测试,如果不指定对象的主键,
删除和修改操作都是不成功的。
-------------------------------------------------------------------------------------------------------------------------------
注:我测试的环境为MyEclipse10+hibernate 3.6.4+mysql5.6
-------------------------------------------------------------------------------------------------------------------------------
先看下我测试时用的表tbAdmin结构和数据截图:
表tbAdmin数据如下:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我工程的结构截图如下(注意映射文件Admin.cfg.xml的位置为bean\Admin.cfg.xml):
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
持久化类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); //增操作,即往表中增加数据
效果截图:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
删操作代码如下:
//在这里进行增、删、改、查...
Admin admin=new Admin();
admin.setId(4); //设置对象的主键,即在表中的主键
session.delete(admin); //删操作,即从表中删除数据
效果截图如下(刚才添加的数据不见了哈):
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
改操作如下:
//在这里进行增、删、改、查...
Admin admin=new Admin();
admin.setId(2); //设置对象的主键,即在表中的主键
admin.setName("qq");
admin.setPass("123456");
session.update(admin); //更新操作,即更改表中的数据
效果截图如下(qq密码变了哈):
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后说下查询操作,这个比较麻烦,因为hibernate支持的查询方式有几种,如HQL查询,QBC查询,原生态SQL查询,
这里我使用的是HQL查询。
使用HQL查询,有一个地方需要注意,那就是from后面跟的不是表名,二是持久化类的完整类名。
什么是持久化类?就是我们上面在映射文件Admin.cfg.xml中配置的类了。
什么是完整类名?就是带包的类了,如java.lang.String
关于持久化类,截图如下(下图中的bean.Admin就是持久化类了。):
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
就废话这么多了,查询代码如下:
//在这里进行增、删、改、查...
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());
}
效果截图如下:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
您的十分满意是我追求的宗旨。
您的一点建议是我后续的动力。