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());
}
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();
System.out.println(classes.size());
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();
System.out.println(classes.size());
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());
}
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" ,1 L);
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();
}