标签:for 问题解决 取数 就是 字段 load 不可 bat 提交
类级别查询
@Test
public void func7() {
//------------------------------------------------------------------------
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
//关联级别查询 调用时 才加载 注意:使用懒加载时要确保,调用属性加载数据时,session还是打开的.不然会抛出异常
Customer c = session.load(Customer.class, 2l);
//无任何策略
Customer a = session.get(Customer.class, 2l);
System.out.print(c);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
get方法:没有任何策略. 调用即立即查询数据库加载数据.
load方法: 应用类级别的加载策略 使用才会加载
<!-- lazy 属性 决定是否延迟加载 true:延迟加载 默认 false 不延迟加载 extra 及其懒惰 fetch属性:决定加载策略 使用什么类型的sql语句加载集合数据 select 默认 join 多表查询加载集合 subselect 使用子查询加载集合 --> <!-- batch-size="3" 一次抓取几个客户的联系人 批量抓取 --> <set name="linkMans" cascade="save-update" inverse="true" lazy="true" fetch="select"> <key column="lkm_cust_id"></key> <one-to-many class="LinkMan"/> </set>
lazy属性默认是true 查询类是返回代理对象
当lazy:false. load方法会与get方法没有任何区别.调用时即加载数据.
//lazy 和 fetch 属性
//fetch select
@Test
public void func9() {
//关联级别 延迟加载
//lazy:true 使用时才加载集合数据
//fetch:select
//
//------------------------------------------------------------------------
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
Customer c = session.load(Customer.class, 2l);
Set<LinkMan> linkMans = c.getLinkMans();//关联级别
System.out.print(linkMans);
//!---------------------------------------------------------------------
tx.commit();
session.close();
//lazy:false 立即加载集合数据
//fetch:select
//lazy:extra 与true 懒加载差不多 只获得集合的size 只查询集合的size
//fetch:select
//fetch join 多表查询
//lazy:true|false|extra 失效 没有意义 都是立即加载
}
//fetch:subselect
public void func10() {
//子查询
//lazy:true 懒加载 使用才加载
//fetch:subselect 子查询
//
//------------------------------------------------------------------------
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "from Customer";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
//!---------------------------------------------------------------------
tx.commit();
session.close();
//lazy:false 立即加载
//fetch:subselect 子查询 立即加载以及子查询
//lazy:extra 懒加载效果一样
//fetch:subselect 子查询 立即加载以及子查询
}
public void function1() {
//子查询
//fatch 决定加载的sql语句
//反查询
//select 单表查询 默认
//join 多表查询
//lazy 决定加载时机
/*false 立即加载
* proxy 代理决定 默认 由一方决定 就是一放的lazy
*
*
* proxy select 使用时加载
*
* false select 全加载
*
* false join 多表查询 lazy失效
*
* proxy join 多表查询 lazy失效
* */
//------------------------------------------------------------------------
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
LinkMan lmLinkMan = session.get(LinkMan.class, 1l);
Customer customer = lmLinkMan.getCustomer();
System.out.print(customer);
//!---------------------------------------------------------------------
tx.commit();
session.close();
/*
* no-session问题解决 扩大session的作用范围
* 利用filter
*
* 创建session
*
* chain.dofilter(req,res);
*
* 销毁session
*
*
* */
}
结论 用默认的就好
HQL查询 hibernate Query Language
public void hql() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
/*取数据list customer 所有的*/
String hql = "from Customer";
Query query = session2.createQuery(hql);
//不止一个值使用list()方法 即可返回一个list
List<Customer> customers = query.list();
System.out.println(customers);
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
添加where条件 使用 :变量名 来让hibernate知道这是个需要替换的变量
public void hql_rule_include_symbol() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
/*找数据*/
/*HQL语句中 不可能出现数据库名 */
String hql2 = "from Customer where cust_id = :abc";
Query query = session2.createQuery(hql2);
//替换变量
query.setParameter("abc", 1l);
//得到唯一值 使用uniqueResult方法
Customer c = (Customer)query.uniqueResult();
System.out.println(c);
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
分页
@Test
public void hql_page() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
/*取数据*/
String hql = "from Customer";
Query query = session2.createQuery(hql);
//设置第几个开始
query.setFirstResult(0);
//数多少个
query.setMaxResults(100);
//query.setParameter("abc", 1l);
List<Customer> customers = query.list();
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
跨表
public void hql_page2() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
/*取数据 customer为1的所有linkman*/
String hql = "from Customer c,LinkMan l where l.customer = c.cust_id and c.cust_id = :id";
Query query = session2.createQuery(hql);
//设置第几个开始
query.setParameter("id", 1l);
List<Object[]> objects = query.list();
System.out.println(objects);
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
排序
public void func2() {
//排序
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = " from Customer order by cust_id desc";
//查询object子类的对象 所有注册的对象
Query query = session.createQuery(hql);
List<Customer> list = query.list();
System.out.println(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
count
public void func5() {
//查条数
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "select count(*) from Customer";
Query query = session.createQuery(hql);
//query.setParameter("id","id");
Number count = (Number) query.uniqueResult();
System.out.println(count);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
查询所需要的值
public void func7() {
//查询所需字段的值
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "select cust_name,cust_id from Customer";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
System.out.println(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
封装对象
public void func8() {
//封装对象
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "select new Customer(cust_name,cust_id) from Customer";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
System.out.println(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
内链接
@Test
public void func9() {
// 内连接
//隐式连接
/*
* select * from a,b where b.aid = a.id
* 显示内连接
*
*
* 左外
* select * from A left [outer] join b on b.aid = a.id
* select * from A right [outer] join b on b.aid = a.id
* */
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//----------------------------------------------------
String hql = " from Customer c inner join c.linkMans ";
Query query = session.createQuery(hql);
List<Object[]> list = query.list();
for(Object[] arr : list){
System.out.println(Arrays.toString(arr));
}
//----------------------------------------------------
tx.commit();
session.close();
}
迫切内连接
public void func10() {
//HQL 迫切内连接 => 帮我们进行封装.返回值就是一个对象
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "from Customer c inner join fetch c.linkMans";
Query query = session.createQuery(hql);
List<Customer> list = query.list();
System.out.println(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
左外以及右外
@Test
public void func11() {
/*
* 左外
* select * from A left [outer] join b on b.aid = a.id
* select * from A right [outer] join b on b.aid = a.id
* */
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
String hql = "from Customer c left join c.linkMans";
String hqlString = "from Customer c right join c.linkMans";
//查询object子类的对象 所有注册的对象
Query query = session.createQuery(hqlString);
//query.setParameter("id","id");
List<Object[]> list = query.list();
for(Object[] arr : list){
System.out.println(Arrays.toString(arr));
}
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
Criteria查询 可用于单表条件查询 Hibernate自创的无语句面向对象查询
查列表
@Test
public void func1() {
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
System.out.print(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
条件
public void None_Sql() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
/*存数据*/
/*HQL语句中 不可能出现数据库名*/
Criteria criteria = session2.createCriteria(Customer.class);
/*条件查询*/
// > gt
/* >= ge
* < lt
* <= le
* == eq
* != ne
* in in
* between and between
* like like
* is not null isnotnull
* is null isNull
* or or
* and and
*
*
*
* */
//添加条件 使用Restrictions
criteria.add(Restrictions.eq("cust_id", 1l));
Customer customer =(Customer) criteria.uniqueResult();
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
分页
@Test
public void func3() {
//分页
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(0);
criteria.setMaxResults(10);
List<Customer> list = criteria.list();
System.out.print(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
排序
@Test
public void func4() {
//排序
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
//排序条件
criteria.addOrder(Order.asc("cust_id"));
List<Customer> list = criteria.list();
System.out.print(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
设置查询目标
@Test
public void func5() {
//设置查询目标
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
Criteria criteria = session.createCriteria(Customer.class);
criteria.setProjection(Projections.rowCount());
List<Customer> list = criteria.list();
System.out.print(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
离线criteria
@Test
public void func6() {
//离线criteria
DetachedCriteria dCriteria = DetachedCriteria.forClass(Customer.class);
dCriteria.add(Restrictions.idEq(6l));
//------------------------------------------------------------------------
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction();
//!---------------------------------------------------------------------
//为离线传入session
Criteria criteria = dCriteria.getExecutableCriteria(session);
List<Customer> list = criteria.list();
System.out.print(list);
//!---------------------------------------------------------------------
tx.commit();
session.close();
}
原生sql
public void origin_sql() {
Configuration configuration = new Configuration().configure(new File("src/hibernate.cfg.xml"));
SessionFactory sessionfactory = configuration.buildSessionFactory();
Session session2 = sessionfactory.openSession();
Transaction txTransaction = session2.beginTransaction();
String sql = "select * from cst_customer";
SQLQuery query = session2.createSQLQuery(sql);
//制定结果集
query.addEntity(Customer.class);
//多个
List<Customer> list = query.list();
//一个
query.uniqueResult();
//条件
String sql2 = "select * from cst_customer where cust_id = ?";
SQLQuery query2 = session2.createSQLQuery(sql);
//制定结果集
query2.setParameter(0, 1);
//多个
//一个
Customer customer = (Customer) query.uniqueResult();
//分页
String sql3 = "select * from cst_customer limit ?,?";
SQLQuery query3 = session2.createSQLQuery(sql);
//制定结果集
query3.setParameter(0, 0);
query3.setParameter(1, 10);
//多个
List<Customer> list2 = query.list();
//一个
query.uniqueResult();
/*提交*/
txTransaction.commit();
session2.close();
sessionfactory.close();
}
标签:for 问题解决 取数 就是 字段 load 不可 bat 提交
原文地址:https://www.cnblogs.com/hywhyme/p/11629082.html