笔记要点
出错分析与总结

/**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 三种方式及举例的更多相关文章

  1. Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

    Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read  ,write方式会在用户空间和内核空间不断拷贝数据, ...

  2. 解析Xml文件的三种方式及其特点

    解析Xml文件的三种方式 1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...

  3. 三种方式上传文件-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  4. springmvc url处理映射的三种方式:

    一.SpringMVC简介 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解耦,并管理应用所需对象 ...

  5. 前端js,css文件合并三种方式,bat命令

    前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...

  6. JDBC 创建连接对象的三种方式 、 properties文件的建立、编辑和信息获取

    创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ ...

  7. android中解析文件的三种方式

    android中解析文件的三种方式     好久没有动手写点东西了,最近在研究android的相关技术,现在就android中解析文件的三种方式做以下总结.其主要有:SAX(Simple API fo ...

  8. Django文件上传三种方式以及简单预览功能

    主要内容: 一.文件长传的三种方式 二.简单预览功能实现 一.form表单上传 1.页面代码 <!DOCTYPE html> <html lang="en"> ...

  9. 转 Velocity中加载vm文件的三种方式

    Velocity中加载vm文件的三种方式   velocitypropertiespath Velocity中加载vm文件的三种方式:    方式一:加载classpath目录下的vm文件 Prope ...

随机推荐

  1. javascrtpt DOM操作

    DOM DOM:(document object mode)文档对象模型.DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的就是为了能让js操作html元素而制定的一个规范 DO ...

  2. PHP提高in_array查找元素的方法

    PHP提高in_array查找元素的方法<pre><?php$arr = array(); // 创建10万个元素的数组for($i=0; $i<100000; $i++){ ...

  3. php面相对象类中成员

    类中成员 一个类的内部可以有3种代码:属性.方法.类常量它们统称为“类中成员”. 一般属性 属性就是放在一个类中的变量. 定义形式: 形式1: var  $v1 ; //定义不赋值 形式2: var ...

  4. 常见的序列化框架及Protobuf序列化原理

    原文链接:https://www.jianshu.com/p/657fbf347934 https://www.cnblogs.com/javazhiyin/p/11375553.html https ...

  5. SUPPA 可变剪切分析

      SUPPA是一款通过转录本定量来获取可变剪切定量结果的软件.转录本的定量方式有很多,例如count,FPKM, TPM等,作者建议使用TPM,因为先均一化了基因的长度,然后均一化了测序的深度.同时 ...

  6. MacOS上使用Openconnect代替Cisco Anyconnect

    OpenConnect是一个Cisco Anyconnect的替代品,具有开源.易获取.可靠等优点.而官方版本的Cisco Anyconnect配置较为繁琐,需要在管理界面同时部署多平台客户端才能支持 ...

  7. java之aop使用及自定义注解

    目的: 1.Java注解简介 2.Java元注解(重点) 3.自定义注解 案例一(获取类与方法上的注解值) 案例二(获取类属性上的注解属性值) 案例三(获取参数修饰注解对应的属性值) 4.Aop自定义 ...

  8. Comet OJ Contest 4

    A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 ...

  9. Spring Cloud Alibaba学习笔记(8) - RocketMQ术语与概念

    Topic 一类消息的集合,RocketMQ的基本订阅单位 部署结构 Name Server Name Server 为 producer 和 consumer 提供路由信息. 相对来说,namese ...

  10. docker registry-v2 搭建私有仓库

    参考官方文档:https://docs.docker.com/registry/deploying/ 参考 :http://www.tuicool.com/articles/6jEJZj 本例子使用两 ...