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(); }
相关文章推荐
- Android Native 绘图方法
- Angularjs 跨域请求
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- 杰奇登录后的东西都是在session里面的
- ASP中SESSION无法保存问题的解决办法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- Oracle中的Connect/session和process的区别及关系介绍
- Node.js编程中客户端Session的使用详解
- 完美解决ajax访问遇到Session失效的问题
- 浅谈COOKIE和SESSION区别
- 解析PHP的session过期设置
- php中Session的生成机制、回收机制和存储机制探究
- PHP中session跨子域的三种实现方法
- php中将一个对象保存到Session中的方法
- 深入解析Session是否必须依赖Cookie
- 对比分析php中Cookie与Session的异同
- PHP Session机制简介及用法