NHibernate Step By Step(11)-命名SQL查询
2010-08-26 23:59 Clingingboy 阅读(1126) 评论(0) 编辑 收藏 举报通过一个配置文件,往往无法满足所有的查询,nh提供了sql命名查询,即把sql查询语句定义在配置文件中,如下
<sql-query name="orgNamesOnly"> <return-scalar column="NAME" type="string"/> SELECT org.NAME FROM ORGANIZATION org </sql-query>
1.通过GetNamedQuery方法获取IQuery
IList result = s.GetNamedQuery("orgNamesOnly").List();![]()
2.返回多个字段
<sql-query name="orgIdsAndOrgNames"> <return-scalar column="orgid" type="long"/> <return-scalar column="thename" type="string"/> SELECT NAME AS thename, ORGID AS orgid FROM ORGANIZATION ORDER BY thename </sql-query>
返回结果
3.返回类型
<sql-query name="AllEmploymentAsMapped"> <return class="Employment"/> SELECT * FROM EMPLOYMENT </sql-query>
4.返回多个对象
<sql-query name="EmploymentAndPerson"> <return class="Employment"/> <return class="Person"/> SELECT * FROM EMPLOYMENT, PERSON </sql-query>
返回结果
5.返回对象和字段
<sql-query name="orgsAndOrgNames"> <return alias="org" class="Organization"/> <return-scalar column="thename" type="string"/> SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id} FROM ORGANIZATION org ORDER BY thename </sql-query>
返回结果
6.返回对象具体字段
<return alias="org" class="Organization"> <return-property name="id" column="ORGID"/> <return-property name="name" column="NAME"/> </return>
<sql-query name="organizationreturnproperty"> <return alias="org" class="Organization"> <return-property name="id" column="ORGID"/> <return-property name="name" column="NAME"/> </return> <return-join alias="emp" property="org.employments"> <return-property name="key" column="EMPLOYER"/> <return-property name="element" column="EMPID"/> <return-property name="element.employee" column="EMPLOYEE"/> <return-property name="element.employer" column="EMPLOYER"/> <return-property name="element.startDate" column="XSTARTDATE"/> <return-property name="element.endDate" column="ENDDATE"/> <return-property name="element.regionCode" column="REGIONCODE"/> <return-property name="element.employmentId" column="EMPID"/> <return-property name="element.salary"> <return-column name="AVALUE"/> <return-column name="CURRENCY"/> </return-property> </return-join> SELECT org.ORGID as orgid, org.NAME as name, emp.EMPLOYER as employer, emp.EMPID as empid, emp.EMPLOYEE as employee, emp.EMPLOYER as employer, emp.STARTDATE as xstartDate, emp.ENDDATE as endDate, emp.REGIONCODE as regionCode, emp.AVALUE as AVALUE, emp.CURRENCY as CURRENCY FROM ORGANIZATION org LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER </sql-query>
8.load-collection
9.使用存储过程
见此http://www.cnblogs.com/lyj/archive/2009/08/12/1328240.html
10.结果集映射
可将结果映射和sql-query分开,通过指定resultset-ref来关联,代码则通过setResultSetMapping方法来设置
<resultset name="spaceship-vol"> <return alias="sps" class="SpaceShip"> <return-property name="id" column="id"/> <return-property name="name" column="name"/> <return-property name="model" column="model"/> <return-property name="speed" column="speed"/> <return-property name="dimensions.length" column="length"/> <return-property name="dimensions.width" column="width"/> </return> <return-scalar column="surface" type="double" /> <return-scalar column="volume" type="double" /> </resultset> <sql-query name="spaceship" resultset-ref="spaceship-vol"> select id as id, fld_name as name, fld_model as model, fld_speed as speed, fld_length as flength, fld_width as width, fld_length * fld_width as surface, fld_length * fld_width *10 as volume from SpaceShip </sql-query>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2009-08-26 Spring.NET学习笔记(6)-基础AOP