在封装前,要实现crud的功能,查询不需要开启事务。创建一个实体类User
package com;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity//表示这是一个实体类的注解
public class User {
@Id//设置id为主键
@GeneratedValue//表示id主键是递增的
private Long id;
@Column(name="user_name")//表示这个属性在数据库表中是user_name,不写这个注解的话就默认username
private String userName;
private String pwd;
private String sex;
private Integer age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", pwd=" + pwd + ", sex=" + sex + ", age=" + age + "]";
}
}
在hibernate.cfg.xml进行配置
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- hibernate_anno表示自己创建的数据库名称 -->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_anno?characterEncoding=utf-8</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect,根据什么数据库进行相关的配置,
在D:\Java相关程序\hibernate-release-4.3.11.Final\documentation\devguide\en-US\html_single中的index.html中可以找到,这里用mysql -->
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout ,true表示能看到自动生成的sql语句是什么样子的-->
<property name="show_sql">true</property>
<!-- true表示将自动生成出来的sql语句自动分行,在sql语句多的时候用处很大,容易看 -->
<property name="format_sql">true</property>
<!-- Drop and re-create the database schema on startup,update表示在每次启动web项目时如果表结构有变化则自动更新数据库,
没变化则保持现状,create则是将所有的表重新建立,之前的表结构会删除掉 -->
<property name="hbm2ddl.auto">update</property>
<!-- 在用注解的时候用这种 -->
<mapping class="com.User"></mapping>
</session-factory>
</hibernate-configuration>
在这里我们是对hibernate_anno数据库中的User实体类所对应的表进行的增删改查。
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
/**
* 增加数据
* @author 26326
*
*/
public class TestSave {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
//创建一个注册类
StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
//创建sessionFactory
SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
//创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
Session session=sessionFactory.openSession();
//开启事务
session.beginTransaction();
//保存数据到数据库中
User u=new User();
u.setAge(20);
u.setPwd("342");
u.setUserName("张飒");
session.save(u);//将数据保存到数据库,这里hibernate会自动创建sql语句。
//结束事务
session.getTransaction().commit();
//关闭事务
session.close();
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
/**
* 查询数据
* @author 26326
*
*/
public class TestQuery {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
//创建一个注册类
StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
//创建sessionFactory
SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
//创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
Session session=sessionFactory.openSession();
//读取数据,这里load一个User类进来,获取的是User类对应的数据库表中id为2的数据并放到User的实体类中。
User u=(User) session.load(User.class, 2L);//因为返回的是object类型,所以强制转换成User类型。User中的id是Long,所以这里写成2L,否则报错
System.out.println(u.toString());
//关闭事务
session.close();
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
/**
* 修改数据
* @author 26326
*
*/
public class TestUpdate {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
//创建一个注册类
StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
//创建sessionFactory
SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
//创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
Session session=sessionFactory.openSession();
//开启事务
session.beginTransaction();
//进行更新,先取出要更新的数据
User u=(User)session.load(User.class, 1L);
//更新
u.setUserName("zhangsa");
//更新到数据库中
session.update(u);
//结束事务
session.getTransaction().commit();
//关闭事务
session.close();
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
/**
* 删除
* @author 26326
*
*/
public class TestDelete {
public static void main(String[] args) {
//读取配置文件hibernate.cfg.xml,hibernate.cfg.xml会读取User.hbm.xml文件
Configuration cfg=new Configuration().configure();
//创建一个注册类
StandardServiceRegistry srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
//创建sessionFactory
SessionFactory sessionFactory=cfg.buildSessionFactory(srb);
//创建session,因为session封装的方法是用来操作对象的,这里将对象保存到数据库中,所以也是操作数据库的
Session session=sessionFactory.openSession();
//开启事务
session.beginTransaction();
//将想要删除的对象加载出来
User u = (User)session.load(User.class, 1L);
//删除
session.delete(u);
//结束事务
session.getTransaction().commit();
//关闭事务
session.close();
}
}
为了方便,我们抽象出一个HibernateUtil工具类。
package util;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static Configuration cfg;
private static StandardServiceRegistry srb;
private static SessionFactory sessionFactory;
static {
//读取配置文件
cfg=new Configuration().configure();
srb=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties())
.build();
sessionFactory=cfg.buildSessionFactory(srb);
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() {
return sessionFactory.openSession();
}
/**
* 增加
*/
public static Object save(Object obj) {
//开启事务
Session session=getSession();
session.beginTransaction();
session.save(obj);
//结束事务
session.getTransaction().commit();
session.close();
return obj;
}
/**
* 删除
*/
public static void delete(Object obj) {
//开启事务
Session session=getSession();
session.beginTransaction();
session.delete(obj);
//结束事务
session.getTransaction().commit();
session.close();
}
/**
* 修改
*/
public static void update(Object obj) {
//开启事务
Session session=getSession();
session.beginTransaction();
session.update(obj);
//结束事务
session.getTransaction().commit();
session.close();
}
/**
* 查询,它不用开启事务
*/
public static Object load(Class clazz,Serializable id) {
return getSession().load(class, id);
}
}
所以此时进行增删改查的语句可以这样写:
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
import util.HibernateUtil;
/**
* 增加数据
* @author 26326
*
*/
public class TestSave {
public static void main(String[] args) {
//保存数据到数据库中
User u=new User();
u.setAge(20);
u.setPwd("342");
u.setUserName("张飒");
HibernateUtil.save(u);//将数据保存到数据库,这里hibernate会自动创建sql语句。
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
import util.HibernateUtil;
/**
* 删除
* @author 26326
*
*/
public class TestDelete {
public static void main(String[] args) {
//将想要删除的对象加载出来
User u = (User)HibernateUtil.load(User.class, 1L);
//删除
HibernateUtil.delete(u);
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
import util.HibernateUtil;
/**
* 修改数据
* @author 26326
*
*/
public class TestUpdate {
public static void main(String[] args) {
//找出要更新的数据用get查询,在执行到这个语句的时候就会立刻查询数据库并将数据给u。
User u=(User)HibernateUtil.get(User.class, 1L);
//修改
u.setUserName("zhangsa");
//修改并放进数据库
HibernateUtil.update(u);
}
}
package test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import com.User;
import util.HibernateUtil;
/**
* 查询数据
* @author 26326
*
*/
public class TestQuery {
public static void main(String[] args) {
User u=(User)HibernateUtil.load(User.class, 2L);
System.out.println(u.toString());
}
}
如上,方便多了