在封装前,要实现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进行配置
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/hibernate_anno?characterEncoding=utf-8
root
root
1
org.hibernate.dialect.MySQL5InnoDBDialect
thread
org.hibernate.cache.internal.NoCacheProvider
true
true
update
在这里我们是对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());
}
}
如上,方便多了