使用框架三部曲:类库,api,和配置文件
首先hibernate基本环境需要的jar包:
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist-3.9.0.GA.jar
jta-1.1.jar
log4j.jar
mysql-connector-java-5.1.34_1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12.jar
1 定义pojo ,Customer
package com.msyd.hibernate.domain;
public class Customer {
private Integer id;
private String name;
private Integer age;
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2 定义pojo的映射文件 ,用来映射 库表和pojo 的。和pojo在一个路径下,文件名称为Customer.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.msyd.hibernate.domain.Customer" table="customers">
<id name="id" column="id" type="integer">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string"/>
<property name="age" column="age" type="integer"/>
</class>
</hibernate-mapping>
3 连接数据库的属性文件,放在src下面即可,oracle我电脑会卡掉,所以连得mysql。文件名为 hibernate.properties
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://127.0.0.1:3306/zkbc
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
4 进行curd测试,其他读写操作可追加编码测试。
package com.msyd.hibernate.test;
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.Before;
import org.junit.Test;
import com.msyd.hibernate.domain.Customer;
public class testCURD {
public static SessionFactory sf;
@Before
public void beforeIniDeal() {
Configuration cfg = new Configuration();//加载hibernate.properties
cfg.addClass(Customer.class);//加载Customer.hbm.xml
sf = cfg.buildSessionFactory();
}
@Test
public void testAdd() {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Customer c = new Customer();
c.setAge(17);
c.setName("Ketty");
s.save(c);
afterDeal(tx, s);
}
@Test
public void testdelete() {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Customer c = new Customer();
c.setId(1);
s.delete(c);
afterDeal(tx, s);
}
@Test
public void testUpdate() {//ok
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Customer c = new Customer();
c.setName("Jetty");
c.setAge(15);
c.setId(1);
s.update(c);
afterDeal(tx, s);
}
/**先获取,再更改值,然后提交,这样也可以进行更新数据
*
* */
@Test
public void testUpdate2() {//ok
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Customer c = (Customer) s.get(Customer.class, 5);
c.setName("Jetty");
afterDeal(tx, s);
}
/**批量更新多条记录
* s.createQuery 可以按照各种条件进行更新 use by hql语句
* */
@Test
public void testBatchUpdate() {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Query q = s.createQuery("update Customer a set a.age=18 ");
q.executeUpdate();
afterDeal(tx, s);
}
/**查询一条记录
* s.get / s.load 均是按照id查询,是固定的
* */
@Test
public void testQueryOne() {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
Customer c = (Customer) s.get(Customer.class, 1);
Customer c1 = (Customer) s.load(Customer.class, 1);
System.out.println(c + ":" + c1);//当对象已经在堆内存中时,不会再去数据库中查询 了
//结果:com.msyd.hibernate.domain.Customer@3e92efc3:com.msyd.hibernate.domain.Customer@3e92efc3
afterDeal(tx, s);
}
/**查询多条记录
* s.createQuery 可以按照各种条件查询
*
* */
@Test
public void testQueryAll() {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
//sql结构化查询语言,现在用的是hql语言,oop ,所以from后面跟的是对象名称,而非表名
Query q = s.createQuery("from Customer c where c.id>0 ");//可以按照条件查询
List<Customer> clist = q.list();
for (int i = 0; i < clist.size(); i++) {
System.out.println(i + ":" + clist.get(i).getId() + ":" + clist.get(i).getName());
}
afterDeal(tx, s);
}
public void afterDeal(Transaction tx, Session s) {
tx.commit();
s.close();
}
}
5 这里仅提供add测试效果,其他结果不一一给出:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select max(id) from customers
Hibernate: insert into customers (name, age, id) values (?, ?, ?)
查询数据库:
附注:如果你的运行结果没成功,即控制台没打印sql语句,则可能是mysql服务没有开启,需要进行如下操作:
进入windows 的命令提示符,进入c盘的 cd /windows/system32 路径下,输入net start mysql,服务启动,才能运行以下测试。