搭建Mybaties环境
1、什么是mybatis框架
1、是一个开源的数据持久化框架
2、有什么用
1、内部封装了通过jdbc访问数据库的操作,支持普通的sql查询、存储过程和高级映射,几乎消除了所有jdbc代码和参数的手工设置以及结果集的检索,简单来说取代了jdbc数据访问层(basedao层)
3、其思想
1、将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置
2、将sql与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改sql
4、mybatis的前身是ibatis,是Apache的一个开源项目
1、官网网址:mybatis。org
2、GitHub下载:http://github.com/mybatis,这个网站可以下载器的的框架如spring等
5、什么是ORM(对象、关系映射),是一种数据持久化技术
1、简述:它在对象模型和关系型数据库之间建立对应关系,并提供一种机制,通过Javabean对象去操作数据库表的数据
6、mybatis与orm的关系
1、mybatis通过简单的xml或者注解进行配置好原始映射,在实体类和sql语句之间建立映射关系,是一种半自动的ORM实现
2、基于ORM,mybatis在对象模型和关系型数据库的表之间建立一座桥梁
3、通过mybatis,可以建立sql关系映射,便捷地实现数据存储、查询、更改和删除操作
7、搭建mybatis环境步骤
1、下载需要的jar文件并部署所需的jar文件到项目中
1、mybatis-3.2.2.zip jar文件中的jar包,在其lib目录中找到mybatis-3.2.2.jar 和mysql-connector-java-5.1.0.jar(数据库驱动jar文件)、log4j-1.2.12.jar(负责日志输出的jar文件)
2、所有的jar文件都需要放到web-INF下的lib目录中
3、还有一些源文件的配置可以详细查看官方文档进行
2、设置目录结构
1、src源文件夹存放dao层包、pojo实体类包、还有其他的service层、controller层等
2、创建一个源文件(sourcefolder)resources,存放mybatis-config.xml核心配置文件和属性文件如日志属性文件(需要在网上找到相关的配置信息,拷贝上去)和数据库连接配置属性文件
3、创建mybatis核心配置文件mybatis-config.xml文件
1、核心配置文件的作用:配置数据库连接、mybatis运行时所需的各种特性、设置和影响mybatis行为的属性
2、配置文件具体信息如图:
要起别名是<typealiase><package name="实体类的包名,不用具体到哪个类"/></typealiase>
4、创建实体类pojo
1、根据数据库的表创建相应的实体类,并且根据字段生产相应的属性,最好是属性名跟字段名一致,这样方便进行对象模型和关系型数据库表的映射
2、实体类的属性需要实现setter和getter方法
5、配置sql映射文件
1、sql映射文件和接口在dao层包创建,并且存放在一个包下,方便映射,sql映射文件和接口的起名要一致,接口的方法名和映射文件的操作标签的id一致
2、具体配置
sql语句中还有一个入参的属性parameterType="基本数据类型或者对象"
6、使用Junit进行测试
1、获取读取mybatis-config。xml的文件输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml")
2、通过sqlsessionfactorybuilder获得会话工厂
SqlsessionFactory sqlsessionfactory = new SqlsessionFactoryBuilder().build(is输入流);
3、通过会话工厂获得sqlsession、然后执行相关sql语句操作
Sqlsession session = sqlsessionfactory.opensession(true);
//opensession的参数为true表示关闭事务控制,自动提交,默认为true
session.selectOne("映射文件的全限定名.sql语句的id")
8、mybatis几个核心类的生命周期和作用域
1、SqlsessionFactoryBuilder:创建SqlsessionFactory实例
1、用过即丢,一旦创建SqlsessionFactory对象,这个类就不需要存在了
2、它的作用域是在方法体内,作为一个局部变量存在
2、SqlsessionFactory:创建Sqlsession实例,是mybatis应用的中心
1、一旦创建,就会在整个应用运行过程中始终存在,并且同时之存在一个对象实例
2、作用域是application
3、Sqlsession:是用于执行持久化操作的对象,类型jdbc的connection
1、对应着一次数据库会话,每一个线程都有自己的会话实例,不能被共享,也不是线程安全
2、最佳作用域是request或者方法体作用域
3、要保证会话关闭
4、两种使用方式
1、通过实例来直接执行已映射的sql语句
2、基于sql映射文件对应的接口操作数据
9、resulttype和resultmap的联系
1、resultType:表示返回类型,包括基本数据类型和复杂数据类型
2、resultMap:是对外部resultMap的引用,表示返回结果映射到哪个resultMap上
1、应用场景:数据库字段信息与对象属性不一致或者需要做复杂的联合查询,以便自由控制映射结果
2、自动映射级别
1、none,不做自动映射,在resultmap里做映射,才能获取
2、partial:若字段名和属性名一致,即使没有做属性名和字段名的匹配,也可以在后台获取到未匹配过的属性值,如果字段名和属性名不一致,且在resultmap里没有做映射,name就无法在后台获取并输出 不包括association和collection里面的
3、full:自动匹配所有属性,包括association和collection里面的
3、属性<association property="属性名" javaType="返回值类型">
<id property="属性" column="字段名"/>
<result property="属性" column="字段名"/>
//其他 跟都是样的写法,一个类中有另一个类的属性是使用的
</association>
4、实行<collection property="属性名" ofType="返回的类型">
<id property="属性" column="字段名"/>
<result property="属性" column="字段名"/>
//其他 跟都是样的写法,一个类中有另集合的属性时使用的
</collection>
10、多参数入参:
1、注解入参:@param("其别名"),在映射文件中的#{就是入参的别名},4个以上的最好是对象入参
11、mybatis缓存
1、一级缓存
是基于PerpetualCache(mybatis自带)的HashMap本地缓存,作用范围session,当session flush或者close之后,该session中所有的缓存都会被清空,只要进行增改删操作就会清空缓存,查询的话要close才清空
2、二级缓存
是全局缓存可以被所有sqlsession共享,要在核心配置文件中的settings配置
<setting name="cacheEnabled" value="true"/>
然后在映射文件中
<cache eviction="FIFO先进先出" flushinterval=“60000毫秒清空时间间隔” size=“” readonly=""/>
然后在sql语句中添加一个属性 useCache="true" 是否使用缓存
12、动态sql
1、if:利用if实现简单的条件选择,test属性存放判断的条件,并且要用 and代替
2、choose(when,otherwise):相当于java中的switch语句,通常与when otherwise搭配使用
<choose>
<when test="判断条件是否符合">符合条件要执行的sql语句</when>
<otherwise>当when的条件没有一个符合时才会执行这个sql语句</otherwise>
</choose>
3、where:简化sql语句中where的条件判断
<where></where>相当于添加一个where关键字,智能忽略sql语句and、or这些关键字
4、set:解决动态更新语句
<set></set>相当于添加一个set关键字,不过会自动忽略sql修改语句后面的逗号
5、trim:可以灵活地去除多余的关键字
6、foreach:迭代一个集合,通常用于in条件
<foreach collection="指定的集合类型如List" item="迭代的元素别名" open="以(开始" separator="以,作为间隔" close="以)结束">