项目的目录结构:
第一步:创建MySQL数据库表
create database if not exists `test`;
USE `test`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(4) NOT NULL auto_increment primary key,
`name` varchar(20) default NULL,
`age` int(4) default NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<font size="3"><font size="+0"></font></font>
第二步:
利用MyEclipse创建一个web项目,再添加Hibernate包。如下:
直接点击Finish进入到hibernate.cfg.xml文件配置:
得到的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">
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">HibernateOne</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--配置JDBC内置连接池 -->
<property name="hibernate.connection.pool_size">1</property>
<!--输出运行时生成的SQL语句 -->
<property name="show_sql">true</property>
<!--数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--数据库表-Java对象映射文件表 -->
<mapping resource="cn/com/hibernate/Model/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
关于Hibernate 的配置已经完成。
第三步:
建立一个实体对象,与MySQL中User表一样的字段。
package cn.com.hibernate.Model;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;// 用户id
private String name;// 用户名
private Integer age;// 用户年龄
public User() {
}
//提供字段的Get和Set方法
…………
编写user.hbm.xml文件(此文件是用来绑定数据库user表和实体对象的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--指定类和对象的表 -->
<class name="cn.com.hibernate.Model.User" table="user" catalog="test">
<!--指定主键 -->
<id name="id" type="java.lang.Integer">
<!--对应的表字段 -->
<column name="id" />
<!--定义主键生成方式由Hibernate自行决定 -->
<generator class="native" />
</id>
<!--定义name属性 -->
<property name="name" type="java.lang.String">
<column name="name" length="30" />
</property>
<!--定义age属性 -->
<property name="age" type="java.lang.Integer">
<column name="age" length="4" />
</property>
</class>
</hibernate-mapping>
以上已经建立连接和绑定了,接下来就是实现效果。
第四步:
通过User对象给数据库表中增加一个记录。
package cn.com.hibernate.Test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.com.hibernate.Model.User;
public class TestHibernate {
public static void main(String[] args) {
// Configuration 管理Hibernate 配置
Configuration config = new Configuration().configure();
// 根据config 建立SessionFactory. SessionFactory用来建立Session
SessionFactory sessionFactory = config.buildSessionFactory();
// 建立Session,相当于建立JDBC的Connection
Session session = sessionFactory.openSession();
// Hibernate3取消find()方法,必须通过Query或Criteria来进行数据查询
List list = session.createQuery("from User").list();
for (int i = 0; i < list.size(); i++) {
User user2 = (User) list.get(i);
System.out.println("id:" + user2.getId() + " Name:"
+ user2.getName() + " age:" + user2.getAge());
}
session.close();
// 建立持久化对象
User user = new User();
user.setName("测试二");
user.setAge(new Integer(10));
session = sessionFactory.openSession();
// Transaction表示一组数据库事物处理
Transaction transaction = session.beginTransaction();
Integer userid = (Integer) session.save(user);// 返回一个主键
transaction.commit();
session.close();
System.out.println("id为" + userid + "的记录已经添加");
session = sessionFactory.openSession();
transaction = session.beginTransaction();
user = (User) session.load(User.class, userid);
System.out.println("id:" + userid + " 数据修前:id:" + user.getId()
+ " 名称:" + user.getName() + " 年龄:" + user.getAge());
user.setName("测试二");
user.setAge(100);
session.update(user);// 更新数据
transaction.commit();
user = (User) session.load(User.class, userid);// 查询对象,查询不到抛出ObjectNotFoundException
System.out.println("id:" + userid + " 数据修后:id:" + user.getId()
+ " 名称:" + user.getName() + " 年龄:" + user.getAge());
session.close();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
user = (User) session.load(User.class, userid);
session.delete(user);
transaction.commit();
System.out.println("id为" + userid + "的记录已经删除!");
user = (User) session.get(User.class, userid);// 查询不到返回null
if (user == null) {
System.out.println("找不到对应的记录:" + userid);
}
session.close();
sessionFactory.close();
}
}
查看你的数据库,“测试一”的记录已经存在。