您的位置:首页 > 产品设计 > UI/UE

Hibrenate hibernate query language(单表操作)

2016-09-24 18:49 369 查看
public class SingleTableTest  extends HibernateUtil{

@Test
public  void  testQueryAllCleass(){
Session session=sessionFactory.openSession();
List<Classes> list=session.createQuery("from  com.sanmao.utils.Classes").list();
session.close();
}
/**
* 查询指定列
* */
@Test
public  void  testQueryClasses_Propertyes(){
Session session=sessionFactory.openSession();
session.createQuery("select  cid,name from  com.sanmao.utils.Classes").list();
//        不用理会报错,编译环境检测器无法识别的问题
session.close();
}
/**
*  根据指定列的构造参数查询
*  带构造参数的查询
* */
@Test
public  void  testQueryClasses_Constructor(){
Session session=sessionFactory.openSession();
List<Classes> classes= session.createQuery("select  new com.sanmao.utils.Classes(cid,name) from  Classes").list();
for (Classes c:classes) {
System.out.println(c.getName()); //返回参数只有cid name 的对象集合
}
session.close();
}
/**
* 带参数的Query查询
* */
@Test
public  void  testQueryClasses_Where_Condition(){
Session session=sessionFactory.openSession();
Query query=session.createQuery("from com.sanmao.utils.Classes where name=?");
query.setParameter(0,"123");
List<Classes> classes=query.list(); //返回name=123 的所有班级
System.out.println(classes.size()); //输出结果为4
session.close();
}
/**
* 带参数的Query查询   HQL特有方式
* */
@Test
public  void  testQueryClasses_Where_Condition2(){
Session session=sessionFactory.openSession();
Query query=session.createQuery("from com.sanmao.utils.Classes where name=:name");
query.setParameter("name","123");
List<Classes> classes=query.list(); //返回name=123 的所有班级
System.out.println(classes.size()); //输出结果为4
session.close();
}
/**
* 利用 Map对参数进行封装
* */
@Test
public  void testQueryClasses_Where_AndCondition_one(){
/**
* Map<String,String>
*     key为持久化对象的属性
*     value为持久化对象属性的 值
* */
Map<String,String> variables=new HashMap<>();
variables.put("name","123");
variables.put("description","123");

Session session=sessionFactory.openSession();
Query query=session.createQuery("from" +
" com.sanmao.utils.Classes where name=:name and " +
"description=:description");
for (Map.Entry<String,String> entry: variables.entrySet()) {
query.setParameter(entry.getKey(),entry.getValue());
}
List<Classes> classes=query.list();
System.out.println(classes.size());
session.close();
}
/**
* 动态拼接HQL查询
* */
@Test
public  void testQueryClasses_Where_AndCondition_two(){
/**
* Map<String,String>
*     key为持久化对象的属性
*     value为持久化对象属性的 值
* */
Map<String,String> variables=new HashMap<>();
variables.put("name","123");
variables.put("description","123");

StringBuffer hql=new StringBuffer();
hql.append("  from Classes ");
hql.append("  where 1=1");
/**
* 动态的拼接查询语句,如果一个属性的值为"",则不往条件中添加
*/
for (Map.Entry<String,String> entry: variables.entrySet()) {
if (!entry.getValue().equals("")){
hql.append("  and  "+entry.getKey()+"=:"+entry.getKey());
}
}
Session session=sessionFactory.openSession();
Query query=session.createQuery(hql.toString());
for (Map.Entry<String,String> entry: variables.entrySet()) {
if (!entry.getValue().equals("")) {
query.setParameter(entry.getKey(), entry.getValue());
}
}
List<Classes> classes=query.list();
System.out.println(classes.size());
session.close();
}

/**
* 元数据
*   数据仓库
*/
@Test
public void testClassMetaData(){
/**
* ClassMetaData可以得到持久化类的信息
*      标示符的名称
*      一般属性的名称
*      。。。。。
*/
Map<String,ClassMetadata> map = sessionFactory.getAllClassMetadata();
for (Map.Entry<String, ClassMetadata> entry : map.entrySet()) {
System.out.println(entry.getKey());
ClassMetadata classMetadata = entry.getValue();
System.out.println("entityName:"+classMetadata.getEntityName());
System.out.println("identityName:"+classMetadata.getIdentifierPropertyName());
String[] propertiesNames = classMetadata.getPropertyNames();
for (String string : propertiesNames) {
System.out.println(string);
}
}
ClassMetadata classMetadata = sessionFactory.getClassMetadata(Classes.class);
System.out.println(classMetadata.getEntityName());
System.out.println(Classes.class.getName());
}

//    @Test    Test 方法不能带有参数,会报错
public void testQueryClasses_Where_AnyCondition_MAO(Class className,Map<String, String> variables){

StringBuffer stringBuffer = new StringBuffer();
/**
* 通过className得到该实体类的字符串形式
*/
stringBuffer.append("from "+sessionFactory.getClassMetadata(className).getEntityName());
stringBuffer.append(" where 1=1");
/**
* 动态的拼接查询语句,如果一个属性的值为"",则不往条件中添加
*/
for (Map.Entry<String, String> entry : variables.entrySet()) {
if(!entry.getValue().equals("")){//如果属性不为""
stringBuffer.append(" and "+entry.getKey()+"=:"+entry.getKey());
}
}
Session session = sessionFactory.openSession();
Query query = session.createQuery(stringBuffer.toString());
/**
* 动态的给条件赋值
*/
for (Map.Entry<String, String> entry : variables.entrySet()) {
if(!entry.getValue().equals("")){
query.setParameter(entry.getKey(), entry.getValue());
}
}
List<Classes> classes = query.list();
System.out.println(classes.size());
session.close();
}
@Test
public void testQueryEntry_Where_AnyCondition(){
/**
* Map<String,String>
*     key为持久化对象的属性
*     value为持久化对象的属性的值
*/
Map<String, String> variables = new HashMap<>();
variables.put("name", "");
variables.put("description", "");
this.testQueryClasses_Where_AnyCondition_MAO(Classes.class,variables);
}

}


/**
* 查询唯一的结果
* */
@Test
public void testUniqueResult() {
Session session=sessionFactory.openSession();

Query query=session.createQuery("from com.sanmao.utils.Classes where cid=:cid");
query.setParameter("cid",1L);
Classes classes=(Classes) query.uniqueResult(); //返回唯一结果
System.out.println(classes.getName());
session.close();
}
/**
* 查询主键最大值
* 由函数查询出来的是Long 类型
* */
@Test
public void testMaxResult() {
Session session=sessionFactory.openSession();

Query query=session.createQuery("select  max(c.cid)  from com.sanmao.utils.Classes c");
System.out.println(query.uniqueResult());
session.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate session class