笔记要点
出错分析与总结

/**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. iOS 多线程的简单理解(1) 方式 :同步 异步

    最近遇到特别糟糕的面试,过程中提到多次对多线程的处理问题,并没有很好的给予答复和解决,所以在这里做个简单的备案: 期望能更加了解和熟练使用 多线程技术: 下面都是自己的总结,如果存在不对的,或者不足, ...

  2. axios ajax框架 请求配置

    请求参数 { // `url` is the server URL that will be used for the request url: '/user', // `method` is the ...

  3. 安装 KVM

    安装 KVM 需要的包 sudo apt-get install -y qemu-kvm qemu-system libvirt-bin virt-manager bridge-utils vlan ...

  4. Docker 安装运行MySQL

    1.镜像主页 https://hub.docker.com/_/mysql 2.拉取5.7版本 docker pull mysql:5.7 3.或者拉取最新8.x版本 docker pull mysq ...

  5. 关于mathtype6.9在office2010中出现The MathType can not be found的问题

    本文问题解决方法参考:https://blog.csdn.net/yiran103/article/details/41694843 自从重装了系统,安装mathtype总是提示The MathTyp ...

  6. 用Python打开文件夹

    用Python读取文件夹, 然后打开文件 下面读取到文件的每一个内容, 然后加上路径 import os path = r'../Downloads/text/content' for filenam ...

  7. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

  8. QT json数据的应用(cJSON)

    json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...

  9. HCIA SWITCHING&ROUTTING 笔记——第一章 TCP/IP基础知识(2)

    视频地址:https://ilearningx.huawei.com/courses/course-v1:HuaweiX+EBGTC00000336+Self-paced/courseware/abb ...

  10. Scala 面向对象编程之继承

    extends关键字 // Scala中,让子类继承父类,与Java一样,也是使用extends关键字 // 继承就代表,子类可以从父类继承父类的field和method:然后子类可以在自己内部放入父 ...