MyBatis3——输出参数ResultType、动语态sql

输出参数ResultType

1、输出参数为简单类型(8个基本+String)

2、输出参数为对象类型

3、输出参数为实体对象类型的集合:虽然输出类型为集合,但是resultType依然写集合的元素类型,eg:resultType="person"

4、输出参数类型为HashMap          --->一个HashMap对应一个人的多个元素(多个属性);查询所有人的属性:List<HashMap<String, Object>>

resultType和resultMap的区别:

resultType:实体类的属性、数据表的字段:类型、名字相同时

resultMap:实体类的属性、数据表的字段:类型、名字不同时

注意:当属性名和字段名不一致时,除了使用resultMap外还可以使用resultType+HashMap

resultType+HashMap方法:select 表的字段名 “类的属性名” from

eg:<select id="queryPersonOutByHashMap" resultType="HashMap">

select id "pid",name "pname" from person where id=1

</select>

动语态sql:

动态查询

<select id="queryPersonbyNameorAgeWithSqlTag" parameterType="Person" resultType="Person">

select id,name,age from person

<where> <!-- <where>只能解决第一个<if>里面的and -->

<if test="name!=null and name!=‘‘">

and name=#{name}

</if>

<if test="age!=null and age!=0">

and age=#{age}

</if>

</where>

</select>

foreach:

<foreach>迭代的类型:数组、对象数组、集合、属性

查询语句:select * from person WHERE id in(1,2,3);

<!-- foreach查询   #{id}填补item separator指定分隔符-->

<select id="queryPersonsbyIds" parameterType="grade" resultType="Person">

select * from person

<where>

<if test="ids!=null and ids.size>0">

<foreach collection="ids" open="id in (" close=")"

item="id" separator=",">

#{id}

</foreach>

</if>

</where>

</select>

简单类型的array数组:

无论传递什么参数名,都用array代替。

<!-- 将多个元素放到数组里进行查询  必须是array代替数组-->

<select id="queryPersonsWithArray" parameterType="int[]" resultType="Person">

select * from person

<where>

<if test="array!=null and array.length>0">

<foreach collection="array" open="id in (" close=")"

item="id" separator=",">

#{id}

</foreach>

</if>

</where>

</select>

list集合:

无论传递什么参数名,都用list代替。

<!-- 将多个元素放到list集合进行查询  必须是list-->

<select id="queryPersonsWithList" parameterType="list" resultType="Person">

select * from person

<where>

<if test="list!=null and list.size>0">

<foreach collection="list" open="id in (" close=")"

item="id" separator=",">

#{id}

</foreach>

</if>

</where>

    </select>

对象数组:

<!-- 将多个元素放到对象数组里进行查询 ,必须是array ,parameterType="Object[]"-->

<select id="queryPersonsWithObjectArray" parameterType="Object[]" resultType="Person">

select * from person

<where>

<if test="array!=null and array.length>0">

<foreach collection="array" open="id in (" close=")"

item="person" separator=",">

#{person.id}

</foreach>

</if>

</where>

</select>

 

SQL片段:

将相似功能代码提取出来,再进行引用。

步骤1、将代码提取出来;

<sql id="ObjectArrayIds">

代码片段

</sql>

步骤2、用到时用id引用。

<include refid="ObjectArrayIds"></include>

注意:sql片段与引用处不在一个文件里的话refid前面加上namespace的值。

原文地址:https://www.cnblogs.com/ghlz/p/12230619.html

时间: 2024-10-28 15:41:51

MyBatis3——输出参数ResultType、动语态sql的相关文章

存储过程输出参数、返回值、返回表及C#调用

存储过程中可以定义输出变量,返回值,执行存储过程还能获得结果集.每个存储过程的默认返回值为0.下面紧接着上文 SQL Server中存储过程Stored Procedure创建及C#调用 基础上写的一个新的Stored Procedure存储过程则包含了输出参数.返回值以及select结果. USE [db] GO /****** Object: StoredProcedure [dbo].[insert_persions] Script Date: 2/25/2015 11:14:11 AM

sql server 输出参数

id hebei shandong type riqi 1 140 120 1 2014-04-13 2 130 120 2 2014-04-13 表A中的数据如上图所示,现在我要处理的一种情况是这样子的,我需要写一个存储过程,代码中会传两个参数shandong,type 的值1 给接收参数@region ,@type,那么我会获得值120,获得之后在原有的数值上加1 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 DECLARE @region varchar

sql server 带输入输出参数的分页存储过程(效率最高)

create procedure proc_page_withtopmax ( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int output,--总页数,输出参数 @totalCount int output--总条数 ) as begin set nocount on; declare @sql nvarchar(1000) set @sql='select top 10 * from tb_testtable where (

动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的

当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,个人觉得用得比较多的地方就是分页存储过程和执行搜索查询的SQL语句.一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件,排序等参数,而对于搜索的话,可能要根据搜索条件判断来动态执行SQL语句. 在SQL Server中有两种方式来执行动态SQL语句,分别是exec和sp_executesql.sp_executesql相对而言具有更多的优点,它提供了输入输出接口,可以将输入输出变量直接传递到SQL语句

MyBatis - 输入和输出参数

基础知识 mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType 1. 返回值是一个对象的集合,@resultType中只能写该对象的类型,而不是写List<T> 2. 输入参数可以用#{}和${}两种取值方法,两者区别与联系: ① 当传入类型为JDBC基本类型(8种java基本类型+String)时,#{}里面可以写成任意值,${}里面必须写value ② 当传入类型为对象时,两种方式里面都应该写成类中属性名 ③ #{}方

创建有输出参数的存储过程并在c#中实现DataGridView分页功能

不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure usp_getPage1 go create procedure usp_getPage1--存储过程名称 @count int output,--输出参数 @countIndex int=1,--参数带默认值 @countPage int=5--参数带默认值 as --一个sql语句.ROW_N

C# 调用带有输出参数的分页存储过程

一.创建带有输出参数的分页存储过程 1 use StudentMISDB 2 go 3 select * from Course 4 alter table Course 5 add IsDelete int not null default 0 6 go 7 select * from Course where IsDelete=1 8 9 --update Course set IsDelete=0 10 11 ---循环 添加数据 12 --declare @index int 13 --

JdbcTemplate执行带输入参数和输出参数的存储过程

直接上代码: /** * 执行返回一个输出参数,若干输入参数的存储过程 * 方法第一个参数为存储过程名称,第二个参数为存放输入参数的数组(按顺序存放),方法返回值为存储过程输出参数 */ public String execProcedureWithOutParam(final String procName,final String[] inParams){ String returnVal=(String)getJdbcTemplate().execute(new CallableState

c#调用带输出参数的存储过程

sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT AS BEGIN SELECT @password = password FROM Users WHERE username = @username END -------------------------- 下面是.NET中调用存储过程的方法: string strConnection = "u