笔记要点
出错分析与总结

/**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. 推荐linux运维必备的几本书

    首先,<鸟哥的linux私房菜> 鸟哥 其次,<linux就该这么学> 刘瑞版 然后,<CentOS linux系统运维> 张祥琳版 最后,<CentOS运维 ...

  2. eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作

    问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...

  3. Tensorflow-逻辑斯蒂回归

    1.交叉熵 逻辑斯蒂回归这个模型采用的是交叉熵,通俗点理解交叉熵 推荐一篇文章讲的很清楚: https://www.zhihu.com/question/41252833 因此,交叉熵越低,这个策略就 ...

  4. LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)

    145. 二叉树的后序遍历 145. Binary Tree Postorder Traversal 题目描述 给定一个二叉树,返回它的 后序 遍历. LeetCode145. Binary Tree ...

  5. .NET Core 配置文件

    老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中           web.co ...

  6. (五)Spring Boot官网文档学习

    文章目录 SpringApplication SpringApplication 事件 `ApplicationContext ` 类型 访问传递给 `SpringApplication` 的参数 A ...

  7. SQL语言(二)

    SQL约束与策略 create table student( id int primary key, //主键约束 name ) not null, //非空约束 idCard ) unique, / ...

  8. 2019.10.16&17小结

    话说也蛮久没写小结了,主要这两次考试失分严重,还是总结下吧. 10.16 T1 小奇挖矿2 100/0 [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市 ...

  9. javascript加超链接

    JavaScript link 方法:给字符串加上超链接JavaScript link 方法link 方法返回使用 HTML a 标签属性定义的(斜体)字符串.其语法如下:str_object.lin ...

  10. python pip命令安装相当于yum仓库

    进入pip目录: 创建pip.conf: 打开pip.conf [global] index-url=https://mirrors.aliyun.com/pypi/simple/ trusted-h ...