hibernate执行数据库操作的三种方式分别是:HQL查询、Criteria、原生SQL。
1.HQL
HQL没有表和字段的概念,只有类、对象和属性的概念
适用:多表查询,不复杂
查询语句中使用对象名,而不是表名
注意:表名大小写不敏感,对象名大小写敏感
public class Test2 extends HibernameCommon{
/*
* 1. 查询单条记录
*/
public void test1() throws Exception {
Session session = getSession();
// from 后跟的是对象的类名称, sql中跟的是表名
String hql = "from User where id = 1";
// query
Query query = session.createQuery(hql);
Object obj = query.uniqueResult();
User user = (User) obj ;
System.out.println(user);
session.close();
}
/*
* 数字作为占位符的情况(注意hibernate的占位符从0开始)
*/
public void test2(Integer user_id) throws Exception {
Session session = getSession();
// from 后跟的是对象的类名称, sql中跟的是表名
String hql = "from User where id = ?0";
// query
Query query = session.createQuery(hql);
// hibernate 中的占位符是从0开始的!
query.setParameter(0, user_id);
Object obj = query.uniqueResult();
User user = (User) obj ;
System.out.println(user);
session.close();
}
/*
* 变量名直接作为占位符的情况(以user_id为例)
*/
public void test3(int user_id) throws Exception {
Session session = getSession();
// from 后跟的是对象的类名称, sql中跟的是表名
String hql = "from User where id = :user_id";
// query
Query query = session.createQuery(hql);
// hibernate 中的占位符是从0开始的!
query.setParameter("user_id", user_id);
Object obj = query.uniqueResult();
User user = (User) obj ;
System.out.println(user);
session.close();
}
/*
* 查询多条记录
*/
public void test4() throws Exception {
Session session = getSession();
String hql = "from User";
Query query = session.createQuery(hql);
List<User> list = query.list();
for(User u : list) {
System.out.println(u);
}
session.close();
}
/*
* 分页操作: 比如查询user1表中前5条记录
*/
public void test5() throws Exception {
Session session = getSession();
String hql = "from User";
Query query = session.createQuery(hql);
query.setFirstResult(0); // 第一条记录,记录的起始位置(>0)
query.setMaxResults(5); // 最大记录数
List<User> list = query.list();
System.out.println(list);
session.close();
}
2.Criteria
/**
* 单表查询 Criteria (不推荐)
*/
public void test6() throws Exception {
Session session = getSession();
Criteria cc = session.createCriteria(User.class);
cc.add(Restrictions.lt("id",5));
List<User> list = cc.list();
System.out.println(list);
session.close();
}
适用于:简单查询
3.原生SQL
适用:复杂查询
违背了hibernate的跨平台特点,不宜维护,不面向对象,不推荐使用。
/*
* 纯SQL语句 : 可以实现复杂查询
*/
public void test7() throws Exception {
Session session = getSession();
String sql = "select * from user1 where id > :userid";
NativeQuery query = session.createSQLQuery(sql);
query.setParameter("userid", 5);
// query将每一条记录封装到了Object[]
// List<Object[]>
List<Object[]> list = query.list();
List<User> userList = new ArrayList<User>();
for(Object[] objs : list) {
User user = new User();
user.setId(Integer.parseInt(objs[0].toString()));
user.setName(objs[1].toString());
userList.add(user);
}
System.out.println(userList);
session.close();
}
hibernate增改删查实例
public class Test1 extends HibernateCommon {
private User load;
private User load2;
/**
* 查询单条数据(session.find())
*/
public void selectOne(int num) {
Session session = getSession();
// find :
// arg0 : 要查询的对象的类的对象
// arg1 : 参数-> 使用主键字段
User user = session.find(User.class, num);
System.out.println("user.id=" + user.getId() + ";user.name =" + user.getName());
close();
}
/**
* 查询多条数据
* session.createQuery("HQL"); 通过hql创建查询对象
* query.getResultList(); 获取结果集,并将结果集转换为List集合对象。
*/
public void findList() {
Session session = getSession();
Query query = session.createQuery("from User");
List<User> resultList = query.getResultList();
for(User u : resultList) {
System.out.println(u);
}
close();
}
/**
* 添加一条数据
*/
public void add(int userId, String userName){
Session session = getSession();
// 对象数据封装
User user = new User();
user.setId(userId);
user.setName(userName);
// 事务操作
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
close();
}
public void update (int userId, String userName) {
Session session = getSession();
/*
* load() 在缓存加载对象
* arg0 : 加载类的类对象
* arg1 : 主键
*/
session.beginTransaction();
User user = session.load(User.class, userId);
user.setName(userName);
session.update(user);
session.getTransaction().commit();
close();
}
public void delete() {
Session session = getSession();
session.beginTransaction();
User user = session.load(User.class, 2);
session.delete(user);
session.getTransaction().commit();
close();
}
public static void main(String[] args) {
Test1 t1 = new Test1();
// t1.selectOne(2); //单行查询
t1.findList(); //多行查询
t1.add(12, "lsz"); //改名
//new Test1().add();
// Factory factory = new Factory ();
// Car car = factory.buildCar();
// Bus bus = factory.buildBus();
}
}