Tres métodos de consulta de hibernación
1.1. Descripción general de SQL
HQL es la abreviatura de Hibernate Query Language, que proporciona capacidades de consulta más ricas, más flexibles y más poderosas. HQL está cerca de la sintaxis de consulta de declaraciones de SQL.
El formulario de declaración HQL completo es el siguiente:
seleccionar actualizar | de... donde... agrupar por... tener... ordenar por... asc|desc
donde Actualizar y eliminar son funciones recién agregadas en Hibernate3. Se puede ver que la consulta HQL es muy similar a la consulta SQL estándar. La consulta HQL ocupa una posición central en todo el sistema operativo de la entidad Hibernate.
String hql = "declaración HQL";
Consulta consulta = session.createQuery(hql);
Lista lista = query.list(); Consultar y obtener múltiples colecciones de objetos de entidad
Object result = query.uniqueResult(); //Consultar y obtener un objeto de entidad
int x = query.executeUpdate(); actualizar o eliminar declaración para devolver el número de filas afectadas en la tabla de datos
1.2 Consulta de entidad
Durante el proceso de consulta, el nombre de la tabla utiliza el nombre de la clase y el nombre de la columna. utiliza el nombre del atributo. Los nombres de las clases y los nombres de los atributos se distinguen por el tamaño. Escribir
String hql="from Users";//from el nombre del tipo de clase de entidad
Consulta consulta = sesión. createQuery(hql);
Lista
for (Usuarios usuario: lista) {
System.out. println(usuario);
} p>
1.3. Consulta con donde
Consulta consulta = session.createQuery("de Usuarios donde uid=3");
Usuarios usuario = (Usuarios) consulta.uniqueResult();//uniqueResult objeto único
System.out.println(usuario);
Consulta consulta = sesión .createQuery("from Usuarios donde uid>5");
Lista
for (Usuarios usuario: lista) {
System.out.println(user);
}
1.3 Consulta de atributos
Consulta algunos atributos
Cadena. hql="select u.uid,u.uname,u. upwd from Usuarios u donde u.uname='Zhang San'";
Consulta consulta = session.createQuery(hql);
Lista
for (Objeto[] objetos: lista) {
System.out.println(Arrays.toString (objetos));
}
String hql="seleccione nuevos usuarios (u.uname,u.upwd) de Usuarios u donde u.uname='Zhang San'";
Consulta consulta = session.createQuery( hql);
Lista
para (Usuarios usuario: lista) {
System.out.println(usuario);
}
Actualización y eliminación de entidades
.p>
Solo compatible con la versión hibernate 3
//Actualización
String hql="actualización Los usuarios establecen uname='王五',upwd='321' donde uid = 3";
int res = session.createQuery(hql).executeUpdate();
//Eliminar
Cadena hql="eliminar de Usuarios donde uid =3";
int res = session.createQuery(hql).executeUpdate();
/*
Valor de retorno resultado:
Entero positivo: datos de las filas afectadas de la tabla
0: la declaración se ejecuta normalmente, pero ninguna fila se ve afectada
Entero negativo: generalmente -1, la ejecución de la declaración HQL es una declaraciones de consulta
*/
Las declaraciones HQL no se pueden agregar
1.5. p> El método de procesamiento es el mismo que el de clasificación en la declaración SQL
String hql="from Users order by uid";
Query query = session.createQuery(hql);
Lista
for (Usuarios usuario: lista) {
System.out.println(usuario);
}
El orden por declaración solo puede aparecer en la última posición de la declaración
Agrupación
El método de procesamiento es el mismo como consulta de agrupación en la declaración SQL
La declaración de agrupación debe procesar el filtrado y solo se puede usar la declaración de tener, no la declaración de dónde.
String hql = "seleccione e.dept.deptno, cuenta(e) del grupo Emp e por dept.deptno";
String hql = "seleccione e.dept.deptno, count(e) del grupo Emp e por dept.deptno con count(e)>=5";
1.6. Vinculación de parámetros
Uso de parámetros de marcador de posición
String hql="de Usuarios donde uid=? o uname=?";
Consulta consulta = session.createQuery(hql);
//El índice comienza desde 0 p>
query.setInteger(0, 3);//query.setParameter(0, 3);
query.setString(1, "Zhang San");//query.setParameter( 1, "Zhang San");
Lista
for (Usuarios usuario: lista) {
Sistema .out .println(usuario);
}
Usar nombre de parámetro
Cadena hql = "de Usuarios donde uid=:no1 o uid=:no2" ;
Consulta consulta = session.createQuery(hql);
query.setInteger("no1", 1);
query.setInteger("no2", 3 );
//....
Puede utilizar una combinación de parámetros de punto y parámetros de nombre
Cadena hql = "from Usuario donde uid= ? o uid=:no2";
Consulta consulta = session.createQuery(hql);
query.setInteger(0, 7788);
consulta. setInteger ("no2", 7566);
//....
//Utilice parámetros de punto y parámetros de nombre de forma mixta. Todos los parámetros de punto deben colocarse delante de un nombre. aparece el parámetro, los parámetros del marcador de posición no pueden volver a aparecer
1.7 Consulta de conexión
--Instrucción SQL: consulta nombre del empleado, salario, nombre del departamento
SELECT ENAME,SAL ,DNAME
FROM EMP e ÚNETE AL DEPARTAMENTO d ON e.DEPTNO=d.DEPTNO
SELECCIONE ENAME,SAL,DNAME FROM EMP,DEPT WHERE DEPTNO=DEPT.DEPTNO
No existe una declaración on
Lo que se puede conectar a la consulta debe ser un subatributo del objeto de consulta principal
String hql="SELECT e .ename , e.sal, e.dept.dname FROM Emp e";
//consulta de conexión HQL
String hql="SELECT e.ename, e.sal, d .dname FROM Emp e JOIN e.dept d";
String hql = "SELE
CT e FROM Emp e JOIN e.dept"; //JOIN no tendrá significado
String hql = "FROM Emp e JOIN e.dept";
Consulta query = sesión. createQuery (hql);
List
//Se almacenarán dos elementos en la matriz de la colección List: p>
//0: Datos maestros (Emp)
//1: Datos detallados (Depto)
//Consulta la información del empleado numerada 7788, y al mismo tiempo agregue el departamento correspondiente La información y la información del administrador se consultan y guardan en los subatributos correspondientes
String hql = "FROM Emp e JOIN FETCH e.dept d JOIN FETCH e.manager m WHERE e.empno= 7788";
Consulta consulta = session.createQuery(hql);
Emp emp = (Emp) query.uniqueResult();
System.out. println(emp);
System.out.println(emp.getManager());
System.out.println(emp.getDept());
1.8. Paginación
Cadena hql = "de los usuarios";
Consulta consulta = session.createQuery(hql);
query.setFirstResult(0) ;
query.setMaxResults(2);
2. Consulta QBC
La consulta QBC (Consulta por criterios) consiste en consultar objetos utilizando la consulta por criterios. API proporcionada por Hibernate. Esta API encapsula el ensamblaje dinámico de declaraciones SQL y proporciona una interfaz funcional más orientada a objetos para consultas.
Las tres categorías más importantes de consultas QBC:
Restricciones restricciones condicionales
Configuración de la columna Proyecciones
Clasificación de orden
2.1. Implementación de consultas
Criterios de criterios = session.createCriteria(Users.class);
//session.createCriteria("entity.Users");
//session.createCriteria(Users.class, "alias");
List
//Consulta resultados de una sola fila ( Si el resultado tiene dos filas o más, se reportará un error)
Objeto UniqueResult = criterios.uniqueResult();
2.2 Proyección de la columna de proyecciones
Sintaxis:
//Consulta propiedades de uname
Criterios de criterio = session.createCriteria(Users.class);
Propiedad PropertyProjection = Projections.property("nombre" );
criterios.setProjection(propiedad);
Lista
//Consulta uname, propiedades arriba
Criterios de criterios = session.createCriteria(Users.class);
//1 Crear una lista de proyección
ProjectionList outlookList = Projections.projectionList();<. /p>
//2. Agregar proyecciones de columnas a la lista de proyecciones
PropertyProjection property1 = Projections.property("uname");
PropertyProjection property2 = Projections.property( "upwd") ;
projectList.add(property1).add(property2);
//3. Establece la lista de proyección según los criterios
criterios. .setProjection(projectionList );
Lista
Valor de retorno tipo nombre del método descripción
PropertyProjection Projections.property especifica una propiedad
p>AggregateProjection Projections.avg calcula el valor promedio
CountProjection Projections.count cuenta el número de un determinado atributo
CountProjection Projections.countDistinct cuenta el número de valores diferentes de un determinado atributo
PropertyProjection Projections.groupProperty especifica una propiedad como propiedad de grupo
Agg
regateProjection Projections.max Encuentra el valor máximo
AggregateProjection Projections.min Encuentra el valor mínimo
ProjectionList Projections.projectionList Crea un objeto ProjectionList
Projection Projections.rowCount Consulta conjunto de resultados Número de registros
AggregateProjection Projections.sum Encuentra el total de un determinado atributo
2.3 Restricciones Restricciones condicionales
Sintaxis:
Criterio notNull = Restrictions.isNotNull("comm");
criterios.add(notNull); condición (si se agregan varias condiciones y se utilizan para conectar las condiciones predeterminadas)
Lista
Descripción del nombre del método del tipo de valor de retorno
SimpleExpression Restrictions.eq es igual a (igual)
Criterion Restrictions.allEq usa Map, Key/Valu para realizar múltiples comparaciones iguales
SimpleExpression Restrictions.gt es mayor que (mayor que )
SimpleExpression Restrictions.ge mayor que o igual
SimpleExpression Restrictions.lt menor que (menor que)
SimpleExpression Restrictions.le menos que o igual (menor que o igual)
Criterion Restrictions.between corresponde a SQL's entre
SimpleExpression Restrictions.like corresponde a SQL's like
Criterion Restrictions.in corresponde a SQL en
Restricciones de expresión lógica.y relación
Restricciones de expresión lógica.o relación
Restricciones de criterio.isNull está vacío
Restricciones de criterios.sqlRestricción Consulta restringida de SQL
Restricciones de criterios.no negación
2.3 Orden de clasificación
Sintaxis:
Criterios de criterios = sesión. .createCriteria( Depto.clase);
criterios.addOrder(Order.asc("nombre"))
.addOrder(Order.desc("loc")); p>
//SELECCIONAR * DESDE DEPARTAMENTO ORDENAR POR nombre ASC,
loc DESC
Tipo de valor de retorno nombre del método descripción
Orden Order.asc(String propertyName) orden ascendente
Order Order.desc(String propertyName) orden descendente
2.4. Consulta de paginación
Criterios de criterio = session.createCriteria(Dept.class);
int pageNum = 2, pageSize = 5;
criterios.setFirstResult((pageNum-1)*pageSize); //Consulta el subíndice de la fila inicial
criterio.setMaxResults(pageSize); //El número máximo de filas para consultar
List list = criterios.list();
//El método setFirstResult y el método setMaxResults también se pueden utilizar en tipos SQLQuery y Query
3. Consulta SQL nativa
1. Consulta
String sql = "select uid,uname,upwd from _users";
Lista lista = session.createSQLQuery(sql).list();
for(Objeto obj: lista){
System.out.println(obj);
}
2. addEntity()
String sql = "select uid,uname,upwd from _users";
// addEntity() puede decirle a Hibernate el tipo de objeto que desea encapsular y luego encapsularlo automáticamente para ti
consulta SQLQuery = session.createSQLQuery(sql).addEntity(Users.class);
Lista
for(Usuarios usuario: lista){
System.out.println(user.getUname());
}
3. resultado único p>
String sql = "seleccione uid,uname,upwd de _users donde uid = 2";
Consulta SQLQuery = session.createSQLQuery(sql).addEntity(Users.class);
Usuarios user = (Usuarios) query.uniqueResult();//Devolver un solo objeto
System.out.println(user.getUname());
USB Micrófono
Construcción del sitio web de Shenzhen www.sz886.com