
//这个是你的方法。
public List<Dictionary<String, Object>> getAll(String sql)
{
return getlistt<Dictionary<String, Object>>(sql,null);
}
//这个地方是传sql语句,和参数。返回一个泛型数据集合
public List<T> getlistt<T>(string sql, params SqlParameter[] spms)
{
SqlDataReader reader = ExecuteReader(sql, spms);
List<T> rt = new List<T>();
while (readerRead())
{
rtAdd(createT<T>(reader));
}
readerClose();
return rt;
}
//这个是调用连接数据并处理sql语句
public SqlDataReader ExecuteReader(string sql, params SqlParameter[] spms)
{
SqlConnection con = new SqlConnection("这个地方写你的连接字符串");
SqlCommand cmd = new SqlCommand(sql, con);
if (spms != null) cmdParametersAddRange(spms);
SqlDataReader reader = null;
try
{
cmdConnectionOpen();
reader = cmdExecuteReader(CommandBehaviorCloseConnection);
}
catch (Exception ex)
{
throw ex;
}
return reader;
}
众所周知,mybatis的传入参数可以是各种Java的基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名} 即可获取传入的值 ,复杂数据类型:包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值,但是如果想传入一个collection怎么办呢?
经查找后发现可以使用mapper配置文件中的foreach语句,借用别人写的文章:
37 foreach
对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。
371参数为array示例的写法略372参数为list示例的写法
接口的方法声明:
Java代码
public List getStudentListByClassIds_foreach_list(List classIdList);
动态SQL语句:
Xml代码
<!-- 72 foreach(循环List参数) - 作为where中in的条件 -->
SELECT STSTUDENT_ID,
STSTUDENT_NAME,
STSTUDENT_SEX,
STSTUDENT_BIRTHDAY,
STSTUDENT_PHOTO,
STCLASS_ID,
STPLACE_ID
FROM STUDENT_TBL ST
WHERE STCLASS_ID IN
#{classIdList}
测试代码,查询学生中,在20000001、20000002这两个班级的学生:
Java代码
@Test
public void test7_2_foreach() {
ArrayList classIdList = new ArrayList();
classIdListadd("20000001");
classIdListadd("20000002");
List list = thisdynamicSqlMappergetStudentListByClassIds_foreach_list(classIdList);
for (StudentEntity e : list) {
Systemoutprintln(etoString());
}
}
这个是ItEye上的一篇文章,其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。当您想传入collection时,并不能直接传入collection对象,要将其先转换为list,然后才能传入。因为mybatis生成SQL语句遍历list时是需要用到get()方法的,而这个方法只在List中才有,Collection里是没有的。以上的配置在Mybitis官方文档中的“动态SQL”也可以找到。
参数示例:
根据班级ID查询教师列表
xml文件
[html] view plaincopy
select from Teacher where c_id=#{id}
java代码
[java] view plaincopy
List tList = teacherMapperselectTeacher(2);
for (Teacher entityTemp : tList) {
Systemoutprintln(entityTemptoString());
}
JAVA实体类型参数示例:
[html] view plaincopy
select from Teacher where c_id=#{id}
[java] view plaincopy
java代码
Teacher queryTeacher=new Teacher();
queryTeachersetId(2);
List tList = teacherMapperselectTeacher(queryTeacher);
for (Teacher entityTemp : tList) {
Systemoutprintln(entityTemptoString()); }
Map参数示例:
[html] view plaincopy
select from Teacher where c_id=#{id} and sex=#{sex}
[java] view plaincopy
java代码
Map map=new HasMap();
mapput("id","2");
mapput("sex","男");
List tList = teacherMapperselectTeacher(map);
for (Teacher entityTemp : tList) {
Systemoutprintln(entityTemptoString()); }
另外MyBatis还提供了一个使用注解来参入多个参数的方式。这种方式需要在接口的参数上添加@Param注解
示例:
接口方法
[java] view plaincopy
public List selectTeacher(@Param(value="id") String id,@Param(value="sex") String sex);
XML文件
[html] view plaincopy
select from Teacher where c_id=#{id} and sex=#{sex}
测试代码
[java] view plaincopy
List tList = teacherMapperselectTeacher("2","男");
for (Teacher entityTemp : tList) {
Systemoutprintln(entityTemptoString());
// 注意此处可以是任何集合类,不限于列表
map可以传递多个参数。
原因是有需要传递的参数有两个,使用map可以传递多个参数,使用Param注解可以指定在SQL映射文件里使用的参数。
SQL是具有数据 *** 纵和数据定义等多种功能的数据库语言。
以上就是关于取出sql中所有查询结果全部的内容,包括:取出sql中所有查询结果、怎么获得Map<String,Date>中 String或Date类型、为什么要用map在sql查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)