MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合
笔记要点
出错分析与总结
工程组织
1.定义接口
public interface EmployeeMapper {
//多条记录封装到一个map中: Map<Integer,Employee>,键是这条记录的主键,值时记录封装后的JavaBean
@MapKey("id") //告诉Mybatis 封装Map的时候,使用哪个属性作为map的key,当然要对应你的下一行的Integer
public Map<Integer,Employee> getEmpsByLastNameLikeRetMap( String lastName); //select 的返回值类型是Map ,返回一条记录的Map,key是列名,值就是对应的值;
public Map<String,Object> getEmpsByIdReturnMap(Integer id); //select 的返回值类型是List
public List<Employee> getEmpsByLastNameLike( String lastName); //多个参数处理,传入map
public Employee getEmpByMap(Map<String,Object> map);
}
2.定义XML映射文件 EmployeeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.dao.EmployeeMapper"><!--namespace: 名称空间;id: 唯一标识; resultType:返回值类型; --> <!--public Map<Integer,Employee> getEmpsByLastNameLikeRetMap( String lastName);
如果返回的是一个集合,resultType要写Map中值 元素的类型:Employee
-->
<select id="getEmpsByLastNameLikeRetMap" resultType="com.bean.Employee" databaseId="mysql">
select * from tbl_employee
where last_name like #{lastName}
</select> <!--public Map<String,Object> getEmpsByIdReturnMap(Integer id);
记得更改,resultType="map"
-->
<select id="getEmpsByIdReturnMap" resultType="map" databaseId="mysql">
select * from tbl_employee
where id =#{id}
</select> <!--public List<Employee> getEmpsByLastNameLike( String lastName);
如果返回的是一个集合,resultType要写集合中元素的类型;
-->
<select id="getEmpsByLastNameLike" resultType="com.bean.Employee" databaseId="mysql">
select * from tbl_employee
where last_name like #{lastName}
</select> <!--public Employee getEmpByMap(Map<String,Object> map);-->
<select id="getEmpByMap" resultType="com.bean.Employee" databaseId="mysql">
select * from ${table_name}
where id = ${id} and last_name = #{lastName}
</select>
3.编写测试代码
public class test_tp26 {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test06() throws Exception{
//默认是不自动提交数据的,需要我们自己手动提交
SqlSession openSession = getSqlSessionFactory().openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); //1.select 返回List列表
List<Employee> like = mapper.getEmpsByLastNameLike("%e%");
for(Employee e:like){
System.out.println(e);
}
System.out.println("*********************"); //2.select 记录封装Map,返回单条记录
Map<String, Object> emps = mapper.getEmpsByIdReturnMap(1);
System.out.println(emps); //{gender=1, last_name=jerry, id=1, email=jerry@163.com}
System.out.println("*********************"); //3.select 记录封装Map,返回多组记录
Map<Integer, Employee> emps1 = mapper.getEmpsByLastNameLikeRetMap("%e%");
for(Map.Entry m: emps1.entrySet()){
System.out.println(m);
}
//{gender=1, last_name=jerry, id=1, email=jerry@163.com}
System.out.println("*********************"); //最后手动提交
openSession.commit();
}finally {
openSession.close();
}
}
}
测试结果
DEBUG 11-29 16:10:26,474 ==> Preparing: select * from tbl_employee where last_name like ? (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,493 ==> Parameters: %e%(String) (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,505 <== Total: 2 (BaseJdbcLogger.java:145)
Employee{id=1, lastname='jerry', email='jerry@163.com', gender='1'}
Employee{id=5, lastname='葫芦娃e', email='qwq@qq.com', gender='1'}
*********************
DEBUG 11-29 16:10:26,506 ==> Preparing: select * from tbl_employee where id =? (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,506 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,507 <== Total: 1 (BaseJdbcLogger.java:145)
{gender=1, last_name=jerry, id=1, email=jerry@163.com}
*********************
DEBUG 11-29 16:10:26,508 ==> Preparing: select * from tbl_employee where last_name like ? (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,508 ==> Parameters: %e%(String) (BaseJdbcLogger.java:145)
DEBUG 11-29 16:10:26,509 <== Total: 2 (BaseJdbcLogger.java:145)
1=Employee{id=1, lastname='jerry', email='jerry@163.com', gender='1'}
5=Employee{id=5, lastname='葫芦娃e', email='qwq@qq.com', gender='1'}
*********************
MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合的更多相关文章
- mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例
笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...
- Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载
笔记要点出错分析与总结工程组织 1.定义接口 interface DepartmentMapper package com.dao; import com.bean.Department; publi ...
- Mybatis3.1-[tp_32-33]-_映射文件_select_resultMap关联查询_association分步查询_延迟加载
笔记要点出错分析与总结 工程组织 1.定义接口 DepartmentMapper package com.dao; import com.bean.Department; public interfa ...
- MyBatis 3.0_[tp-24-25]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法
笔记要点出错分析与总结 /**================Mybatis参数值的获取:#和$符号的区别=============== * #{}:可以获得map中的值或者pojo对象属性的值; * ...
- Mybatis3.1-[tp_36-37]-_映射文件_select_resultMap关联查询__分步查询传递多列值&fetchType_discriminator鉴别器
_分步查询传递多列值&fetchType_discriminator鉴别器 笔记要点出错分析与总结 Department.java bean public class Department { ...
- 使用 hibernate 根据映射文件生成数据库表
为了更好的显示效果,可以在hibernate.cfg.xml配置文件的<session-factory>标签里加入以下内容: 显示sql语句和格式化显示sql语句: <propert ...
- .NET 4.0中使用内存映射文件实现进程通讯
操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...
- Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete
ylbtech-Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete 1.返回顶部 1. insert, update 和 delete 数据变更 ...
- 第3章 文件I/O(7)_高级文件操作:存储映射
8. 高级文件操作:存储映射 (1)概念: 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. (2)mmap和munmap函数 头文件 #include&l ...
随机推荐
- Okhttp3基本使用
https://square.github.io/okhttp/ https://www.jianshu.com/p/da4a806e599b https://www.cnblogs.com/wzk- ...
- 构建Springboot项目的3种方式
一.自己创建: 1.创建maven项目 2.pom.xml添加如下内容: <!--1.指定依赖都由springboot管理--> <parent> <groupId> ...
- jquery获取父,同,子级元素
一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir& ...
- [一点感触]ADF4350 ADF4111混频记
几经周折,还是和jack顺利的调完了二者的混频,回想起来我发的上一个版本是2016-11-29,时间可能永远停留在这里了... 祝您一路走好,未来的世界不再忙碌.奔波! 发两张界面纪念吧: 也曾想着把 ...
- 013 Android 实现流水灯功能+自定义控件的样式(可以复用)
1.介绍 (1)获取屏幕的焦点 android:focusable与android:focusableInTouchMode(获取屏幕焦点) 前者针对在键盘下操作的情况,如果设置为true,则键盘上下 ...
- Win10 将本地连接设置为按流量计费网络
在Win10中默认是不允许用户将本地连接设置为按流量计费网络的,不过我们可以通过修改注册表的方式来实现. 将本地连接设置为按流量计费网络后,Windows更新将不会自动下载.同样,Windows应用商 ...
- 04 IO流(二)——IO类的记忆方法、使用场景
关于IO流以前写的PPT式笔记请跳转:https://blog.csdn.net/SCORPICAT/article/details/87975094#262___1451 IO流的主要结构 记忆方法 ...
- 1. Spark基础解析
1.1 Spark概述 1.1.1 什么是Spark 官网:http://spark.apache.org Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMP ...
- IO是否会一直占用CPU?(转)
原文来自知乎:https://www.zhihu.com/question/27734728 这是一个很好的关于并发/并行系统的问题.简单回答就是:IO所需要的CPU资源非常少.大部分工作是分派给DM ...
- 详解Ubuntu16.04安装Python3.7及其pip3并切换为默认版本(转)
原文:https://www.jb51.net/article/156927.htm