Customer.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><br/>
<!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:表示对应数据库表的名称
-->
<class name="cn.aypak.a_primer.Customer" table="a_customer">
<!--
id:主键(OID)
* name:持久化类中属性
* type:表示hibernate的数据类型,表示java的数据类型在连接sql的数据类型的一个桥梁
* column:数据库对应的字段列
* name:数据库表中字段名称
* generator:主键的生成策略
* class:指定主键按照哪种生成策略执行(本例:increment表示自增长)
-->
<id name="id" type="integer">
<column name="id"></column>
<generator class="increment"></generator>
</id>
<!--
property:持久化对象中的属性与表中的字段进行关联
* name:持久化类中属性
* type:表示hibernate的数据类型,表示java的数据类型在连接sql的数据类型的一个桥梁
* column:数据库对应的字段列
* name:数据库表中字段名称
-->
<property name="name" type="string">
<column name="name"></column>
</property>
<property name="age" type="integer">
<column name="age"></column>
</property>
<property name="des" type="string">
<column name="des"></column>
</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://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 操作连接mysql的数据信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.137.244:3306/aypak?useUnicode=true&characterEncoding=utf8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 配置hibernate的方言,通知hibernate要连接哪种数据库(mysql),将该数据库类型识别成hibernate能够识别的类型 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 是否通过配置文件(hbm.xml)的配置生成数据库的表
update:当表不存在的时候,自动创建表,并往表中追加数据
当表存在的时候,不会删除表再创建表,而是直接向表中追加数据
create:每次在操作数据库(CRUD)的时候,都会先删除表,在创建表,项目不能使用,这样历史数据将不被保存
none:不能自动创建表,每次操作数据库的时候,直接将数据保存到数据库,历史数据不丢失
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 是否在开发的过程中显示sql语句,默认是false -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对显示的sql语句进行格式化,默认是false -->
<property name="hibernate.format_sql">false</property>
<!-- 等价于configuration.addClass(Customer.class); -->
<!-- <mapping resource="cn/aypak/a_primer/Customer.hbm.xml"/>-->
</session-factory>
</hibernate-configuration>
实例:CRUD
package cn.aypak.a_primer;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class App {
private static SessionFactory sf = null;
static{
Configuration configuration = new Configuration();
configuration.configure("cn/aypak/a_primer/hibernate.cfg.xml");
configuration.addClass(Customer.class);
sf = configuration.buildSessionFactory();
}
/**新增*/
@Test
public void testInsertCustomer(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
Customer c = new Customer();
c.setName("小三");
c.setAge(18);
c.setDes("专业的");
s.save(c);
tr.commit();
s.close();
}
/**通过id进行修改*/
@Test
public void testUpdateCustomer(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
Customer c = new Customer();
c.setId(3);
c.setName("小四");
s.update(c);
tr.commit();
s.close();
}
/**通过id删除客户信息*/
@Test
public void testDeleteCustomer(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
Customer c = new Customer();
c.setId(2);
s.delete(c);
tr.commit();
s.close();
}
/**通过id查询客户信息*/
@Test
public void testQueryCustomer(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
Customer c = (Customer) s.get(Customer.class, 1);
// Customer c = (Customer) s.load(Customer.class, 1);
System.out.println(c.getName()+" "+c.getAge()+" "+c.getDes());
tr.commit();
s.close();
}
/**查询所有的客户信息*/
@Test
public void testQueryAllCustomer(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();
/**
* s.createQuery("HQL语句"):使用HQL语句查询数据库,返回Query对象
* SQL语句:针对数据库、数据库表、数据库字段
* HQL语句:针对持久化对象、持久化对象的属性
*/
Query query = s.createQuery("from Customer");
List<Customer> list = query.list();
for(Customer c:list){
System.out.println(c.getName()+" "+c.getAge()+" "+c.getDes());
}
tr.commit();
s.close();
}
}