- 传递简单的类型
- 传递pojo对象
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
- 传递包装类
包装类的应用场景,比方说是商品类,那么商品可能或包括一些其它的,颜色,形状,等
比方说是这样的一个类QueryVo,里边包含了一个User类。这样的就叫做包装类
这样去传递
- 基础数据类型
- list
- pojo
- resultMap
如果数据库中的字段名和实体类中的字段名不一致时,解决方案有,改数据库或者实体类,但是这是不可取的方案。 还有一种方案是取别名,在sql语句后边加上别名,能够结局问题。最后就是使用ResultMap了。
关于resultMap,用起来的感觉就好像是hibernate的持久化类的映射文件,非常相似,这大概就是框架思想想通的地方
- 动态sql-if标签的使用
Demo
- sql-where标签的使用
从上边的demo中,我们看到的是,where后边需要有一个 1=1 ,才能保证后边的 and 有效。那么使用where标签以后,就可以直接来了。
where标签自动补上where关键字,同时处理多余的and
需要注意一点,如果使用where标签,就不能手动的添加where关键字了,不然拼接出来,就会多一个where。
使用方法很简单,只需要将if标签包起来就可以了。
- sql-sql片段
先定义一个sql片段
使用也很简单:
- foreach标签的使用
重点是红框里边的
- 一对一关联查询
第一种方案使用resultType: 可以使用的方案是,实现原理很简单,就是表连接,这样需要有一个和连接表相对应的pojo(字段名相同)然后配合 resultType来使用。 但是这样做的方法的弊端是,面向对象的思想不够好。 (有公司在用,但是不推荐)
第二种方案使用ResultMap: resultMap 就是先写一个resultMap 然后再引入。对于这个resultMap 我的感觉就是可以类比hibernate的映射文件,与hibernate不同的是,这里换了一个关联的标签 (这种更符合面向对象的思想)
- 一对多关联查询
一对多与一对一不同的地方有两点,一个是标签 collection,一个是属性 ofType。
mybatis和spring的整合先回顾一下之前学过的spring框架,spring框架的两个重要的内容就是 IOC 和AOP 的思想。
首先IOC是控制反转,又叫依赖注入,它是用在容器管理上,每层对象之间的传递,是由spring来管理的。spring可以拿到对象的创建权。
AOP面向切面编程思想,比方说最常用的事务的管理,比方说监控某一块代码性能的时候,比方日志管理。
- 整合思路
- SqlSessionFactory对象应该放到spring容器中作为单例存在。
- 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
- Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
- 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
- 整合步骤
- 创建一个java工程。
- 导入jar包。(课前资料中mybatis与spring整合所有包)
- mybatis的配置文件sqlmapConfig.xml
- 编写Spring的配置文件
- 数据库连接及连接池
- sqlsessionFactory对象,
- 配置到spring容器中
- 编写Spring的配置文件
- 复制jdbc.properties配置文件到新工程
- 复制log4j.properties配置文件到新工程
mybatis推荐的是使用动态代理的方式进行开发,只需要有一个接口,有个映射文件,然后在applicationContexr.xml文件里边开启包扫描,就可以使用了。当有多个包需要开启扫描的时候,只需要逗号分隔开就行了
applicationContexr.xml 文件 里边的相关配置
逆向工程:替我们生成接口,生成pojo 这里先不做介绍。