一、hibernate3.3.1至少要集成的包
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.4.GA.jar
jta-1.1.jar
slf4j-api-1.5.10.jar
slf4j-simple-1.5.10.jar
二、hibernate开发的三种方式
1、由Domain object -> mapping -> db。(官方推荐)
2、由DB开始,用工具生成mapping和Domain object。(使用较多)
3、由映射文件开始
三、建表语句
drop table if exists employee; create table employee( id int primary key, name varchar(64) not null, email varchar(64) not null, hiredate date not null )engine = myisam ;
四、开发domain对象
package com.yb.domain; public class Employee { private Integer id; private String name; private String email; private java.util.Date hiredate; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public java.util.Date getHiredate() { return hiredate; } public void setHiredate(java.util.Date hiredate) { this.hiredate = hiredate; } }
五、对象关系映射文件
作用是用于指定domain对象和表的映射关系
该文件的取名有规范domain对象.hbm.xml
一般我们放在和domain对象同一个文件夹下(包下)
<?xml version="1.0" encoding="utf-8"?> <!-- 映射文件需要一个dtd来指定格式 --> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hsp.domain"> <class name="Employee" table="employee"> <!-- id元素用于指定主键属性 --> <id name="id" column="id" type="java.lang.Integer"> <!-- 该元素用于指定主键值生成策略hilo native increment sequence uuid --> <generator class="increment"> <param name="increment">emp_inc</param> </generator> </id> <!-- 对其它属性还要配置 --> <property name="name" type="java.lang.String"> <column name="name" not-null="false"></column> </property> <property name="email" type="java.lang.String"> <column name="email" not-null="false"></column> </property> <property name="hiredate" type="java.util.Date"> <column name="hiredate" not-null="false"></column> </property> </class> </hibernate-mapping>
六、手动配置我们的hibernate.cfg.xml文件
该文件用于配置连接的数据库的类型,driver、用户名、密码、url......,同时管理对象关系映射文件,该文件的名称一般不修改
<?xml version="1.0" encoding="utf-8"?> <!-- 映射文件需要一个dtd来指定格式 --> <!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="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 显示出执行sql --> <property name="show_sql">true</property> <mapping resource="com/yb/domain/Employee.hbm.xml"/> </session-factory> </hibernate-configuration>
七、测试文件TestMain.java
package com.yb.view; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.yb.domain.Employee; import com.yb.util.*; public class TestMain { public static void main(String[] args) { //查询[load]->hql语句(hibernate query language) } private static void deleteEmployee() { //删除 //获取一个session Session session = MySessionFactory.getSessionFactory().openSession(); Transaction ts = session.beginTransaction(); //删除 1、先获取该雇员,然后删除 Employee emp = (Employee) session.load(Employee.class, 3); session.delete(emp); ts.commit(); session.close(); } private static void updateEmployee() { //修改用户 //获取一个会话 Session session = MySessionFactory.getSessionFactory().openSession(); Transaction ts = session.beginTransaction(); //修改用户 1、获取要修改的用户,2、修改 //load是通过主键属性,获取该对象实例 Employee emp = (Employee) session.load(Employee.class,3); //select * from employee where id=3 emp.setName("韩顺平"); //update employee set name='韩顺平' where id=3 emp.setEmail("abc@sohu.com"); ts.commit(); session.close(); } public static void addEmployee() { //我们使用hibernate完成crud操作【这里我们只见对象,不见表】 //现在我们不是用service,直接测试 //1、创建configuration,该对象用于读取hibernate.cfg.xml,完成初始化 Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); //2、创建SessionFactory【这是一个会话工厂,是一个重量级的对象】 SessionFactory sessionFactory = configuration.buildSessionFactory(); //3、创建Session相当于jdbc Connection【servlet HttpSession,也不是jsp session】 Session session = sessionFactory.openSession(); //4、对hibernate而言,要求在进行增加、删除、修改的时候必须使用事务提交 Transaction transaction = session.beginTransaction(); //添加一个雇员 Employee employee = new Employee(); employee.setName("shunping"); employee.setEmail("shunping@sohu.com"); employee.setHiredate(new Date()); //insert ... ... //保存 session.save(employee);//==>insert into ... [被hibernate封装] transaction.commit(); session.close(); } }