Hibernate的增删改查
- 增加
增加有多种方式,save、persist、savaOrUpdate、merge。
使用方法如下。
这里的代码是续前节的
package test;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;
import entity.User;
public class UserTest {
@Test
public void testSave() {
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
User user = new User();
user.setName("张三");
user.setBirthDay(new Date(System.currentTimeMillis()));
session.save(user);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
@Test
public void testMerge(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
User user = new User();
user.setName("张三");
user.setBirthDay(new Date(System.currentTimeMillis()));
session.merge(user);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
@Test
public void testPersist(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
User user = new User();
user.setName("张三");
user.setBirthDay(new Date(System.currentTimeMillis()));
session.persist(user);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
}
2.删除
删除一条记录使用delete
该代码段是在如上的类中增加的,所谓需要把这个段代码写入以上
@Test
public void testDelete(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
User user = new User();
user.setId(2);
//这样删除只能通过id来删除
//user.setName("张三2");//该语句不能删除
session.delete(user);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
3.修改
修改使用Update,SaveOrUpdate,merge方法
这里就不做代码的解析了,基本上都是Entity和session对象的使用。
4查询
查询的方式有多种
1)本地SQL查询
重点
String sql = “select * from t_user2 where id<:value”;
Query query = session.createSQLQuery(sql).addEntity(User.class);//这里如果不addEntity后面将无法使用
query.setInteger(“value”,4);
这里控制台打印的SQL语句为:
Hibernate: select * from t_user2 where id
@Test
public void testSQLQuery(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
String sql = "select * from t_user2 where id<:value";
Query query = session.createSQLQuery(sql).addEntity(User.class);
query.setInteger("value", 4);
List<User> list = query.list();
for(User s:list){
System.out.println(s);
}
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
2)HQL查询
形式上和SQL很类似
@Test
public void testHQLQuery(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
String hql = "from User where id<:value";
Query query = session.createQuery(hql);
query.setInteger("value", 4);
List<User> list = query.list();
for(User s:list){
System.out.println(s);
}
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
分页和唯一值
分页的时候使用
query.setFirstResult(offset);
query.setMaxResults(length);
当确定我们查询查询值是唯一 的时候,query.uniqueResult()就可以返回唯一对象。
3)QBC查询
不多说,直接上代码,放在之前的类里使用JUnit执行就好了。
@Test
public void testQBC(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
Criteria criteria = session.createCriteria(User.class);
List<User> list = criteria.list();
for(User s:list){
System.out.println(s);
}
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
@Test
public void testQBC2(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
SessionFactory sessionFactory=configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
Criteria criteria = session.createCriteria(User.class);
Criterion criterion = Restrictions.lt("id",4);
criteria.addOrder(Order.desc("id"));
criteria.add(criterion);
List<User> list = criteria.list();
for(User s:list){
System.out.println(s);
}
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
sessionFactory.close(); // 关闭session工厂
}
更多查询细节请见详情