`

二十五 SQL和命名查询

 
阅读更多
SQL和命名查询
SQL查询
//根据sql语句查询
static List sql(){
  Session s=HibernateUtil.getSession();
  Query q=s.createSQLQuery("select * from department").addEntity(Department.class);
  List<Department> l=q.list();
  return l;
}

一般情况下避免使用sql查询,因为Hibernate具有很好的数据库移植性,如果写死了sql语句的话移植的时候会出现一些问题。

也可以把hql查询条件写在映射配置文件中,然后java去读取语句来进行查询,称为本地命名查询。



本地命名查询
修改映射实体的映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping 
	package="vo.util.bean">

	<class name="Department">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 配置一对多的映射关系  -->
		<set name="ems">
		<!-- 关联关系的外键  -->
		<key column="depaer_id"/>
		   <!-- 关联关系的实体类配置 -->
		  <one-to-many  class="Employee" />
		</set>
		<!-- class节点内配置命名查询条件 -->
		<query name="getname1">
	   <![CDATA[from Department where name=:name]]>
	   </query>
	</class>
	<!-- 配置命名在class节点外查询条件 -->
	<query name="getname2">
	<![CDATA[from Department where name=:name]]>
	</query>
</hibernate-mapping>

查询测试
//映射文件class节点外的配置命名查询
static List namesel(String name){
 Session s=HibernateUtil.getSession();
 Query q=s.getNamedQuery("getname2");
 q.setString("name", name);
 List l=q.list();
 return l;
}
//映射文件class节点内的配置命名查询
static List namese(String name){
 Session s=HibernateUtil.getSession();
  Query q=s.getNamedQuery("vo.util.bean.Department.getname1");
 q.setString("name", name);
 List l=q.list();
 return l;
}

分析比较 发现getNamedQuery的查询条件并不相同,在class节点内 
查询的条件命名必须加上实体包名.实体名.查询命名 在这必须是完整的命名名称
在class节点外 查询的条件命名只需要实体命名即可

完整的测试
package vo.util.test;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import vo.util.HibernateUtil;
import vo.util.bean.Department;
import vo.util.bean.Employee;

public class SQLandNameTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		add();
       //sql();
		namesel("政企事业部");
		namese("政企事业部");
	}
	//根据sql语句查询
	static List sql(){
		Session s=HibernateUtil.getSession();
		Query q=s.createSQLQuery("select * from department").addEntity(Department.class);
		List<Department> l=q.list();
		return l;
	}
	//映射文件class节点外的配置命名查询
	static List namesel(String name){
		Session s=HibernateUtil.getSession();
		Query q=s.getNamedQuery("getname2");
		q.setString("name", name);
		List l=q.list();
		return l;
	}
	//映射文件class节点内的配置命名查询
	static List namese(String name){
		Session s=HibernateUtil.getSession();
		Query q=s.getNamedQuery("vo.util.bean.Department.getname1");
		q.setString("name", name);
		List l=q.list();
		return l;
	}
	 static Department add(){
	    	Session session = null;
	    	Transaction tx = null;
	    	try{
	    		session =HibernateUtil.getSession();
	    		tx = session.beginTransaction();
	    		//…你的代码save,delete,update,get…
	    		Department dpart=new Department();
	    		dpart.setName("政企事业部");
	    		
	    		Employee em1=new Employee();
	    		em1.setName("员工李小仙");
	    		//em1.setDerpartment(dpart);
	    		
	    		Employee em2=new Employee();
	    		em2.setName("员工张小三");
	    		//em2.setDerpartment(dpart);
	    		
	    		Set<Employee> em=new HashSet<Employee>();
	    	    em.add(em1);
	    	    em.add(em2);
	    	    
	    	    dpart.setEms(em);
	    		session.save(dpart);
	    		session.save(em1);
	    		session.save(em2);
	    		
	    		
	    		tx.commit();
	    		return dpart;
	    	}finally{
	    		if(session != null)session.close();
	    	} 

	    }
}

完毕 end!
 

 

分享到:
评论

相关推荐

    sql server 命名规范

    ### SQL Server 命名规范详解 在数据库设计与开发过程中,遵循一套统一且合理的命名规范至关重要。良好的命名规范不仅能提升代码的可读性、可维护性,还能增强团队协作效率,减少潜在的错误和冲突。以下是针对SQL ...

    SQLSERVER数据库命名规范

    SQL Server 数据库命名规范旨在提高数据库的可读性和易维护性,统一各个开发人员的数据库编码风格。为了便于与 C# 代码进行对接,制定了本规范。 数据库命名 数据库命名规则旨在提供一个一致的命名约定,以提高...

    普元 命名sql 处理动态sql

    对于同一个查询的命名sql,列或者表名都是动态的,如有些时候命名sql为select custID,custName from cust,有些时候是select custID from cust,这时候列名是变量。EOS中默认是不支持的,会报列错误。 解决方案...

    C#下的SQL Server命名规范

    ### C#下的SQL Server命名规范 在开发过程中,遵循一致且明确的命名规范对于提高代码可读性、减少错误以及方便后期维护具有重要意义。本文将详细介绍C#与SQL Server交互时,应遵循的一系列命名规范。 #### 表命名...

    SQL数据库默认实例与命名实例的区别

    - **优点**:命名实例允许在同一台服务器上安装多个独立的SQL Server实例,每个实例拥有自己的数据文件、配置和资源分配。 - **应用场景**:对于需要在同一台物理服务器上运行多个独立数据库环境的情况(比如...

    自动生成执行SQL文件的SQLCMD命名

    描述中提到的“自动生成执行SQL文件的SQLCMD命名”可能是指一个工具或者方法,它简化了用户创建和执行数据库脚本的过程。通过这个工具,用户不再需要手动编写复杂的步骤指南,而是可以一键生成执行脚本,自动完成...

    软件公司SQL语句命名规范(很好的参考价值)

    首先,我们要明确SQL命名规范的重要性。一个清晰、一致的命名规则能够帮助开发者快速理解查询的目的,降低理解代码的时间成本,避免因命名不规范导致的误解和错误。此外,当项目规模扩大,团队成员增加时,遵循命名...

    SqlServer命名、撰写规则及范例

    SqlServer 命名规则是指在使用 SqlServer 数据库时,为了保持代码的一致性和可读性所设计的一系列规则。这些规则涵盖了表名、字段名称、存储过程、视图、触发器名称的定义等多个方面。 首先,在表名定义中,Sql...

    Sql Server参数化查询之where in和like实现详解

    Sql Server参数化查询之where in和like实现详解 在Sql Server中,参数化查询是提高查询性能和防止SQL注入攻击的有效方法之一。其中,where in和like是两个常用的查询条件,然而它们的参数化实现却不是那么简单。...

    SQL命名编码规范.pdf

    在SQLServer中编码如何有意义和规范的命名,不仅有利于别于自己进行操作,也有利于别人理解。

    《kettle中实现动态SQL查询》博客文章示例代码

    这些示例可能涵盖了如何设置动态SQL查询,以及如何在Kettle中使用问号占位符和命名参数的具体步骤。 总的来说,掌握Kettle中的动态SQL查询技术对于提高数据处理的灵活性和效率至关重要。问号占位符和命名参数都是...

    SQL Server 设计、命名、编码规范

    ### SQL Server 设计、命名、编码规范 #### 1. 更改记录 - **更改** | **变更内容*...通过以上详细的规范和指导,可以确保 SQL Server 数据库的设计、命名和编码符合最佳实践标准,从而提高数据库系统的质量和稳定性。

    SQL Server存储过程的命名标准

    在SQL Server数据库管理中,存储过程作为一种常用的数据访问机制,其命名规范对于代码的可读性和维护性至关重要。本文将详细介绍SQL Server存储过程中推荐使用的命名标准,并通过具体示例加以说明。 ### SQL Server...

    sql2000查询分析器

    SQL2000查询分析器是Microsoft SQL Server 2000版本中的一个重要工具,它为数据库管理员和开发人员提供了一个界面,用于编写、执行和测试SQL语句以及Transact-SQL脚本。这个工具在没有安装完整版SQL Server企业管理...

    在Sql Server查询语句中能不能用变量表示表名

    总的来说,虽然SQL Server允许在查询语句中使用变量表示表名,但这需要通过动态SQL来实现,并且需要注意安全性和性能问题。在处理动态表名时,理解如何正确地构建和执行动态SQL以及防范SQL注入至关重要。

    sql语句查询分析器

    SQL语句查询分析器是一种工具,它用于帮助程序员和数据库管理员优化和理解SQL查询的执行过程。在数据库管理系统中,SQL(结构化查询语言)是用于处理数据的标准语言,包括查询、更新、插入和删除记录。一个强大的SQL...

    SQL SERVER 多表联接查询SQL SERVER 多表联接查询SQL SERVER 多表联接查询

    SQL Server 多表联接查询 SQL Server 是一个功能强大且灵活的关系数据库管理系统,支持多表联接查询,能够从多个表中检索数据,以满足复杂的业务需求。在本节中,我们将详细介绍 SQL Server 的多表联接查询,包括...

    精通SQL 结构化查询语言详解

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    4.2.6 优化索引和查询 4.3 查询优化的工具  4.3.1 查询执行计划的缓存  4.3.2 清空缓存 4.3.3 动态管理对象 4.3.4 STATISTICS 4.3.5 测量查询的运行时间 4.3.6 分析执行计划 4.3.7 图形化的执行计划 ...

Global site tag (gtag.js) - Google Analytics