Hibernate下载地址
第一步 导入包
hibernate源代码路径 比较深 \hibernate-distribution-3.5.6-Final\project\core
新建domain模型
import java.io.Serializable;
//最后实现serializable接口 可以在网络上传输
public class Person implements Serializable{
private Long pid;//标识属性
private String pname;
public Person(){}
public Person(Long pid,String pname){
this.pid = pid;
this.pname = pname;
}
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
public String getPname() {
return pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public String getPsex() {
return psex;
}
public void setPsex(String psex) {
this.psex = psex;
}
private String psex;
}
新建持久化类映射配置文件
Person.hbm.xml
<?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属性 类的全名
table 该类对应的表名 可以不写,如果不写默认值就是类名
catalog 数据库的名字 一般不用写
-->
<class name="cn.itcast.hibernate0909.domain.Person" table="person" >
<!--
主键
name描述的是属性的名称
column 数据库的字段的名称
type 类型
length 长度
-->
<id name="pid" type="java.lang.Long" length="5">
<column name="pid"></column>
<!--
主键的产生器
increment 由hibernate产生
-->
<generator class="increment"></generator>
</id>
<!--
property是用来描述一般属性
-->
<property name="pname" type="java.lang.String" length="20">
<!--
column可以不写,如果不写,默认属性的名称
-->
<column name="pname"></column>
</property>
<property name="psex" type="java.lang.String" length="5"></property>
</class>
</hibernate-mapping>
新建Hibernate配置文件
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="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--
url
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate0909
</property>
<!--
username
-->
<property name="connection.username">root</property>
<!--
password
-->
<property name="connection.password"></property>
<!--
hibernate针对建表的操作
update 如果有表,检查表的结构,如果没有则创建
create-drop 启动hibernate创建表,结束hibernate删除表
create 每次启动都重新创建表
validate 每次启动都检查表的结构
-->
<property name="hbm2ddl.auto">update</property>
<mapping resource="cn/itcast/hibernate0909/domain/Person.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
新建测试类
public class PersonTest {
private static SessionFactory sessionFactory;
static{
Configuration configuration = new Configuration();
//加载配置文件
configuration.configure();
//采用了工厂模式创建sessionFactory
sessionFactory = configuration.buildSessionFactory();
}
/**
*
*/
@Test
public void testSavePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = new Person();
//由于在映射文件中已经说明主键的产生方式是hibernate内部产生,所以在程序中不用设置主键
person.setPname("王二麻子");
person.setPsex("纯爷们");
session.save(person);
transaction.commit();
session.close();
}
/**
* 1、必须从数据库中提取出数据再进行修改
* 2、session.get方法创建的对象利用的是默认的构造函数
*/
@Test
public void testUpdatePerson(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
/**
* 1、先把修改的那行提取出来
* 说明:
* Serializable是String和包装类的共同的父类
* 1L是主键的值 而且类型必须与Person中pid的属性类型一样
*/
Person person = (Person)session.get(Person.class,1L);
person.setPsex("不详");
session.update(person);
/**
* 新创建一个person对象
* 把pid为1的值设置进去
* 修改对象
* 这种修改方式不推荐
*/
// Person person2 = new Person();
// person2.setPid(1L);
// person2.setPsex("女");
//session.update(person2);
transaction.commit();
session.close();
}
@Test
public void testQuery(){
Session session = sessionFactory.openSession();
List<Person> personList = session.createQuery("from Person").list();
System.out.println(personList.size());
}
/**
* 有两种方案
*/
@Test
public void testDelete(){
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Person person = (Person)session.get(Person.class, 1L);
//Person person = new Person();
//person.setPid(1L);
session.delete(person);
transaction.commit();
session.close();
}
}
注意 这里没有建表 让hibernate自动创建的表
hibernate配置文件的加载方式
常见错误 和解决办法