OID查询:
//使用对象时发送语句查询数据库
Customer customer = session.load(Customer.class, 1);
//马上发送语句查询数据库
Customer customer = session.get(Customer.class, 1);
对象导航查询:
//1 根据id查询联系人
LinkMan linkman = session.get(LinkMan.class, 4);
//2 对象导航查询 查询这个联系人所属客户
//不会发送语句
Customer c = linkman.getCustomer();
//发送语句
System.out.println(c.getCustName());
HQL查询(操作实体类和属性);
query对象 session.createQuery("hql语句")
语句中不能直接出现*
查询所有hql语句:
//查询所有hql语句: from 实体类名称
Query query = session.createQuery("from UserTest");
//调用query对象里面的方法得到结果
List<UserTest> list = query.list();
条件查询
第一种:
//1 创建query对象
String hql = "from Customer c where c.cid=? and c.custName=?";
Query query = session.createQuery(hql);
//2 设置条件值 ?里面值
//* 第一个参数是:?位置,?位置从0开始的
//* 第二个参数是:条件值
query.setParameter(0, 3);
query.setParameter(1, "360");
//3 调用方法得到结果
List<Customer> list = query.list();
第二种:
//1 创建query对象
String hql = "from Customer c where c.cid= :cid and c.custName= :custName";
Query query = session.createQuery(hql);
//* 第一个参数是:等号后的参数名
//* 第二个参数是:条件值
query.setParameter(cid, 3);
query.setParameter(custName, "360");
//3 调用方法得到结果
List<Customer> list = query.list();
模糊查询hql语句写法
from 实体类名称 where 实体类属性名称 like ?
//1 创建query对象
String hql = "from Customer where custName like ?";
Query query = session.createQuery(hql);
//2 设置条件值 ?里面值
query.setParameter(0, "%百%");
//3 调用方法得到结果
List<Customer> list = query.list();
排序语句写法
from 实体类名称 order by 要排序属性名称 asc/desc
//1 创建query对象
String hql = "from Customer order by cid desc";
Query query = session.createQuery(hql);
//2 调用方法得到结果
List<Customer> list = query.list();
分页查询:
//1 创建query对象
Query query = session.createQuery("from Customer");
//2 设置分页信息
//2.1 设置开始位置
query.setFirstResult(0);
//2.2 设置每页记录数
query.setMaxResults(3);
//3 调用方法得到结果
List<Customer> list = query.list();
投影查询hql语句
(1)select 属性名称1,属性名称2 from 实体类名称
(2)hql语句中使用select关键字,但是select后面不能直接添加 *
常用聚集函数count、sum、avg、max、min
演示查询表有多少条记录
hql语句
select count(*) from Customer
HQL多表查询:
from Customer c inner join fetch c.setLinkMan setLinkMan为配置文件中的集合名
使用迫切内连接,返回list集合中,每部分是对象形式
内连接语句:
from Customer c inner join c.setLinkMan 使用内连接查询之后,返回list集合中每部分是数组形式
QBC查询:
Criteria session.createCriteria(.class)
查询所有
//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);
//2 调用方法得到结果
List<Customer> list = criteria.list();
条件查询
criteria.add(Restrictions.方法)
//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);
//2 调用方法设置条件值
//根据custName做模糊查询
criteria.add(Restrictions.like("custName", "%百%"));
//3 调用方法得到结果
List<Customer> list = criteria.list();
排序
criteria.addOrder(Order.方法)
//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);
//2 调用方法设置排序
criteria.addOrder(Order.desc("cid"));
//3 调用方法得到结果
List<Customer> list = criteria.list();
分页查询:
//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);
//2 设置分页数据
criteria.setFirstResult(0);//开始位置
criteria.setMaxResults(3);//每页记录数
//3 调用方法得到结果
List<Customer> list = criteria.list();
统计查询
//1 创建对象
Criteria criteria = session.createCriteria(Customer.class);
//2 调用方法设置统计操作
criteria.setProjection(Projections.rowCount());
//3 得到结果
Object obj = criteria.uniqueResult();
Long lobj = (Long) obj;
int count = lobj.intValue();
离线对象:
DetachedCriteria criteria=DetachedCriteria.forClass(.class);
SQL查询:
SQLQuery session.createSQLQuery(普通sql语句)
sqlQuery.list() list元素是数组,如果要变成实体类,需在这之前加上
sqlQuery.addEntity(.class)或sqlQuery.setResultTransformer(Transformers.aliasTobean(.class))