mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例
笔记要点
出错分析与总结
/**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数
* _POJO&Map&TO 三种方式及举例 _
* 单个参数 : #{参数名} ,取出参数值; [mybatis 不会做特殊处理]
* 多个参数 : 注册接口:public Employee getEmpByIdAndLaseName(Integer id,String lastName);
* 多个参数会被封装成一个map,key :param1...paramN 或者参数索引从0开始
* 命名参数: 明确指定封装参数时mapper接口的key:@Param("id") @Param("lastName")
* 多个参数会被封装成一个map;
* key: 使用@param注解指定的值;
* value:参数值;
* #{指定的key} 取出对应的参数
* --------------------------------------------------------
* POJO
* 1.如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo
* #{属性名}: 取出传入的pojo的属性值
*
* Map:
* 如果多个参数不是业务逻辑模型中的数据 ,没有对应的pojo,为了方便,我们也可以传入map
* #{指定的key} 取出Map中对应的参数
* TO:
* 如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个TO(transfer object)
* 数据传输对象:
* Page{
* int index;
* int size;
* }
* ===================思考====================
* public Employee getEmp(@Param("id")Integer id,String lastName);
* 取值: id==>#{id/param1} lastName ==>#{param2}
*
* public Employee getEmp(Integer id,@Param("e")Employee emp);
* 取值: id==>#{param1} lastName ==>#{param2.lastName /e.lastName}
*
* ###特别注意: 如果是Collection(List /Set)类型或者数组,也会特殊处理,
* 也是把传入的list或者数组封装在map中;
* key: Collection(collection),如果是List还可以使用这个key(list),数组(array)
* public Employee getEmpById(List<Integer> ids);
* 取值,取出第一个id的值: #{ids[0]}
*==================结合源码来看,mybatis如何处理====================
* debug +Stepinto 即可查看!
工程组织

<mapper namespace="com.dao.EmployeeMapper">
<!--namespace: 名称空间;id: 唯一标识; resultType:返回值类型; --> <!--public Employee getEmpByMap(Map<String,Object> map);-->
<select id="getEmpByMap" resultType="com.bean.Employee" databaseId="mysql">
select * from tbl_employee
where id = #{id} and last_name =#{lastName}
</select> <!-- 多个参数查询
public Employee getEmpByIdAndLaseName(Integer id,String lastName);-->
<select id="getEmpByIdAndLaseName" resultType="com.bean.Employee" databaseId="mysql">
select * from tbl_employee
where id = #{id} and last_name =#{lastName}
</select>

//接口式编程! namespace: 名称空间,指定为接口名字;
public interface EmployeeMapper {
//传入map
public Employee getEmpByMap(Map<String,Object> map);
//多个参数处理
public Employee getEmpByIdAndLaseName(
@Param("id") Integer id,@Param("lastName") String lastName); public Employee getEmpById(Integer id);
//添加返回值类型,表示mybatis的执行SQL语句结果是true或者false
public boolean addEmp(Employee employee);
public boolean updateEmp(Employee employee);
public boolean deleteEmpById(Integer id);
}
测试类 class test_tp20 public class test_tp20 {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test04() throws IOException {
//默认是不自动提交数据的,需要我们自己手动提交
SqlSession openSession = getSqlSessionFactory().openSession();
try {
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
//测试注释方法提交元素
Employee jerry = mapper.getEmpByIdAndLaseName(1, "jerry");
// System.out.println(jerry);
//测试map方法提交
HashMap<String, Object> map = new HashMap<>();
map.put("id", 4);
map.put("lastName", "葫芦娃");
Employee empByMap = mapper.getEmpByMap(map);
System.out.println(empByMap); /结果:/Employee{id=4, lastname='葫芦娃', email='葫芦娃@163.com', gender='0'}
//最后手动提交
openSession.commit();
}finally {
openSession.close();
}
}
}
mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例的更多相关文章
- Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式
Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read ,write方式会在用户空间和内核空间不断拷贝数据, ...
- 解析Xml文件的三种方式及其特点
解析Xml文件的三种方式 1.Sax解析(simple api for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...
- 三种方式上传文件-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- springmvc url处理映射的三种方式:
一.SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,并管理应用所需对象 ...
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
- JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取
创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...
- android中解析文件的三种方式
android中解析文件的三种方式 好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...
- Django文件上传三种方式以及简单预览功能
主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...
- 转 Velocity中加载vm文件的三种方式
Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式: 方式一:加载classpath目录下的vm文件 Prope ...
随机推荐
- python logging模块日志输出
import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) handler = ...
- VSCode 代码格式化快捷键
转载自:http://geek-docs.com/vscode/vscode-tutorials/vscode-code-formatting.html VSCode 代码格式化快捷键,我们平常在做自 ...
- [学习笔记] 下载、安装、启动 Eclipse(OEPE)
OEPE 的全称是: Oracle Enterprise Pack for Eclipse 截止目前的最新版本是:(12.2.1.9) 下载地址:(需要在甲骨文官网注册一个账户才能下载) https: ...
- 2019.10.28 IDEA入门指南(很多人问补充一篇)
Idea快速入门指南 1.安装 1.1.安装 我们使用的是最新的2017.3.4版本: 双击打开, 选择一个目录,最好不要中文和空格: 然后选择桌面快捷方式,请选择64位: 然后选择安装: 开始安装: ...
- 《ucore lab1 exercise6》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 题目:完善中断初始化和处理 请完成编码工作和回答如下问题: 中断描述符表(也可简称为保护模式下的中断向量表)中一个表项占多少字节?其中哪几位代表 ...
- Kylin系列(一)—— 入门
因为平常只会使用kylin而不知其原理,故写下此篇文章.文章不是自己原创,是看过很多资料,查过很多博客,有自己的理解,觉得精华的部分的一个集合.算是自己对Kylin学习完的一个总结和概括吧 ...
- Reids原理之IO模型
众所周知Redis是单进程单线程的应用,在如今多核横行的时代,我们不免有疑问,单线程的redis怎么就成了高性能的代表 当有多个线程同时调用redis的时候,那么单线程的redis是怎么处理的呢,这里 ...
- 去除echarts饼状图的引导线
series: { name: "流量占比分布", type: "pie", radius: ["40%", "60%" ...
- mysql全面整理(用于复习、查阅)--正在更新
Mysql学习 1. 关键字与函数名称全部大写 2. 数据库名称.表名称.字段名称全部小写 3. SQL语句必须以分号结尾 一.数据库基本操作 1. 创建.查看数据库 CREATE {DATABASE ...
- win10 idea springboot上传镜像到远程docker服务器
1. 开启2375端口,供外部访问docker vim /usr/lib/systemd/system/docker.service 修改ExecStart为下面一行内容 #ExecStart=/us ...