hibernate是一个ORM框架,通过对象与数据库表之间的映射可以让我们以面向对象的方式CRUD,而不用自己写sql。
第一个hibernate项目搭建与运行。
下载hibernate所需要的jar包,当然如果是maven项目就只需要引入依赖。
下载mysql驱动包,同上。
数据表userbean
Table: userbean
Columns:
id bigint(20) PK AI
email varchar(255)
loginName varchar(255)
password varchar(255)
Userbean
package bean;
import java.io.Serializable;
public class Userbean implements Serializable{
private static final long serialVersionUID = -93795156034628433L;
private long id;
private String email;
private String loginName;
private String password;
public Userbean(){
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
/**
*
*@Title main
*@Description <p>TODO(这里用一句话描述这个方法的作用)</p>
*@param args
*@author luzhen
*@dateTime 2015-2-6 下午1:49:59
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
使用Middlegen-Hibernate-r5根据javabean与表结构生成Userbean.hbm.xml。这个配置文件是用来描述类与表映射关系的。
配置文件hibernate.cfg.xml。这个配置文件主要配置数据库连接,事务控制,以及指定*.hbm.xml文件等。
经过这些配置后,就可以编写代码了。
package test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import bean.Userbean;
public class Test {
public static void main(String[] args) {
Configuration config=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();
transaction.begin();
Userbean user=new Userbean();
user.setEmail("123");
user.setLoginName("321");
user.setPassword("333");
session.save(user);
transaction.commit();
Criteria criteria=session.createCriteria(Userbean.class);
//criteria.add(org.hibernate.criterion.Expression.eq("id",2L));
List<Userbean> list=criteria.list();
for (Userbean userbean : list) {
System.out.println(userbean.getLoginName());
}
session.flush();
session.close();
}
}
SessionFactory是线程安全的,但session不是,所以应避免多个线程使用同一个session。
这个Test类主要完成插入以及查询操作,第一次写发现session.save方法必须显式使用事务才可以将数据持久化到数据库中,有待以后考证。
更新:session.save方法必须显式使用事务将数据持久化是因为,session.openSession()方法隐式将autocommit设置为false,因此必须使用commit方法进行显式提交。