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 ...
随机推荐
- 推荐linux运维必备的几本书
首先,<鸟哥的linux私房菜> 鸟哥 其次,<linux就该这么学> 刘瑞版 然后,<CentOS linux系统运维> 张祥琳版 最后,<CentOS运维 ...
- eclipse的maven中需要把jar的包文件登入到自己的仓库里面的操作
问题的描述 从别人那拿到了Java maven的工程,导入自己的eclipse中之后编译的时候出现包文件找不到,之后把工程进行maven的update project之后,pom.xml文件出现错误, ...
- Tensorflow-逻辑斯蒂回归
1.交叉熵 逻辑斯蒂回归这个模型采用的是交叉熵,通俗点理解交叉熵 推荐一篇文章讲的很清楚: https://www.zhihu.com/question/41252833 因此,交叉熵越低,这个策略就 ...
- LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)
145. 二叉树的后序遍历 145. Binary Tree Postorder Traversal 题目描述 给定一个二叉树,返回它的 后序 遍历. LeetCode145. Binary Tree ...
- .NET Core 配置文件
老一代配置系统 1,XML格式 格式单一. 2,配置信息Kye,只能一维化配置 3,框架信息和应用程序信息混合到一起 应用程序中是 App.config web项目中 web.co ...
- (五)Spring Boot官网文档学习
文章目录 SpringApplication SpringApplication 事件 `ApplicationContext ` 类型 访问传递给 `SpringApplication` 的参数 A ...
- SQL语言(二)
SQL约束与策略 create table student( id int primary key, //主键约束 name ) not null, //非空约束 idCard ) unique, / ...
- 2019.10.16&17小结
话说也蛮久没写小结了,主要这两次考试失分严重,还是总结下吧. 10.16 T1 小奇挖矿2 100/0 [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市 ...
- javascript加超链接
JavaScript link 方法:给字符串加上超链接JavaScript link 方法link 方法返回使用 HTML a 标签属性定义的(斜体)字符串.其语法如下:str_object.lin ...
- python pip命令安装相当于yum仓库
进入pip目录: 创建pip.conf: 打开pip.conf [global] index-url=https://mirrors.aliyun.com/pypi/simple/ trusted-h ...