java框架之MyBatis
Posted Lazy的笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java框架之MyBatis相关的知识,希望对你有一定的参考价值。
主流框架的介绍
Struts2
1、MVC设计模式的实现
2、拦截器
3、可变和可重用的标签
主要用于Web应用的
HiberNate(对数据JDBC)
1、ORM,简化数据库操作,对象关系映射
2、DAO层
Spring框架
1、依赖注入容器、AOP实现
2、声明式事务
3、简化JavaEE应用
4、黏合剂,将大家组装到一起
Spring MVC框架(Spring框架的一部分,web层)
1、结构最清晰的MVC Model2实现
2、高度可配置,支持多种视图技术
3、定制化开发
MyBatis框架
1、半自动化的ORM实现
2.DAO层
3、动态SQL
4、小巧灵活、简单易学
持久化是程序数据在瞬时状态和持久状态间转换的过程
内存到存储设备或者数据库保存的过程。
ORM(Object Relational Mapping)
1、编写程序的时候,以面向对象的方式处理数据
2、保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
1、在持久化对象上执行基本的增、删、改、查操作
2、对持久化对象提供一种查询语言或者API
3、对象关系映射工具
4、提供事务对象交互、执行检查、延迟加载以及其他优化功能
框架(Framework)
1、提供重用的公共结构的应用程序半成品
2、优点
专注于业务逻辑实现,不再考虑公共问题
结构统一,易于学习、维护
主流框架技术
MyBatis、Hibernate
Spring
Spring MVC struts2
ORM
对象、关系映射,数据持久化技术
MyBatis、Hibernate
理解MyBatis的概念以及优点特性
搭建MyBatis开发环境
了解MyBatis与JDBC的区别
MyBatis前身是iBatis,本是Apache的一个开源的项目
http://mybatis.org Github网站
ORM框架
实体类与SQL语句之间建立映射关系
特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
使用MyBatis的开发步骤
1、下载mybatis-3.2.2.jar包并导入工程
2、编写MyBatis核心配置文件(configuration.xml)
3、创建实体类-POJO
4、DAO层——SQL映射文件(mapper.xml)
5、创建测试类
1)、读取全局配置文件mybatis-config.xml
2)、创建SqlSessionFactory对象,读取配置文件
3)、创建SqlSession对象
4)、调用mapper文件进行数据操作
String resource = "mybatis-config.xml";
int count = 0;
SqlSession sqlSession = null;
//获取mybatis-config.xml的输入流
InputStream is = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象,此对象可以完成对配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建sqlSession
sqlSession = factory.openSession();
//调用mapper文件来对数据进行操作,必须将Mapper文件引进到
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
System.out.println(count);
java中提供了Properties类来读取配置文件
String getProperty(String key) 用指定的键在此属性列表中搜索属性。通过参数key得到其对应的值
Object setProperty(String key,String value)调用Hashtable的方法Put.通过调用基类put()方法来设置键—值对
void load(InputStream inStream)从输入流中读取属性列表()键和元素对)。通过对指定文件进行装载获取该文件中所有键—值对
void clear() 清除所装载的键—值对,该方法由基类Hashtable提供
MyBatis框架优缺点
优点:
1、与JDBC相比,减少了50%以上的代码量
2、最简单的持久化框架、小巧并简单易学
3、SQL代码从程序代码中分离、可重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持对象与数据库的ORM字段关系映射
缺点:
1、SQL语句编写工作量大,对开发人员有一定要求
2、数据库移植性差
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
SqlSessionFactoryBuilder
1、用过即丢,其生命周期只存在于方法体内
2、可重用其来创建多个SqlSessionFactory实例
3、负责构建SqlSessinoFactory,并提供多个bulid方法的重载
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象,此对象可以完成对配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSessionFactory
1、SqlSessionFactory是每个MyBatis应用的核心
2、作用创建SqlSession实例
SqlSession sqlSession = SqlSessionfactory.openSession(boolean autoCommit);true:关闭事务控制(默认),false:开启事务
3、作用域、Application
4/生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
静态代码块,以保证SqlSessionFactory只被创建一次
SqlSession
1、包含了执行SQL所需的所有方法
2、对应一次数据库会话(可以多次执行SQL语句,关闭了救药重新创建SqlSession对象),会话结束必须关闭
3、线程级别,不能共享(最近作用域request)
SqlSession sqlSession = SqlSessionfactory.openSession(boolean autoCommit)
SqlSession的两种使用方式
1、通过SqlSession实例直接运行映射的SQL语句
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!-- 查询用户表记录数 -->
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
</mapper>
//调用mapper文件来对数据进行操作,必须将Mapper文件引进到
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
2、基于Mapper接口方式操作数据
userList = sqlSession.getMapper(UserMapper.class).getUserList();
非集成环境下的最佳实践
SqlSessionFactoryBuilder
用过即丢,推荐作用域在方法体内
SqlSessionFactory
最佳作用域范围:应用的全局作用域
生命周期应与应用的生命周期相同
3、SqlSession
线程级
一个request请求期间
MyBatis的基本元素——核心配置文件config.xml
configuration配置
1、properties 可以配置在Java属性配置文件中
2、settings 修改MyBatis在运行时的行为方式
3、typeAliases 为Java类型命名一个别名(简称))
4、typeHandlers 类型处理器
5、objectFactory 对象工厂
6、plugins 插件
7、environments 环境
8、environment 环境变量
transactionManager 事务管理
dataSource 数据源
9、mappers 映射器
properties 可以配置在Java属性配置文件中
1、可通过外部指定的方式,即配置典型的Java属性配置文件中(如database.properties),并使用这些属性对配置实现动态配置
database.properties文件内容:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms
user=root
password=@lazy
config.xml文件引用
<properties resource="database.properties" />
2、直接配置为xml,并使用这些属性对配置项实现动态配置
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms"/>
<property name="user" value="root"/>
<property name="password" value="@lazy"/>
</properties>
settings元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
<settings>
<setting name="lazyLoadingEnabled" value="false">
</settings>
typeAliases元素
作用是配置类型别名
<typeAliases>
<typeAlias alias="user' type="cn.smbms.pojo.User" />
</typeAliases>
在Mapper.xml中
未使用typeAliases元素时
<select id="getUserList" resultType="cn.smbms.pojo.User">
使用了typeAliases元素
<select id="getUserList" resultType="user">
第二中方式,直接引入包
<typeAliases>
<package name="cn.smbms.pojo" />
</typeAliases>
在Mapper.xml中,类型直接使用类的名称
<select id="getUserList" resultType="User">
environments元素
1、表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
2、子元素节点:environment,但是必须知道其中一个默认运行环境(通过default指定)
<environments default="development">//默认的运行环境ID
<environment id="development">//运行环境ID
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">//运行环境ID
.....
</environment>
</environments>
transactionManager事务管理器
<transactionManager type="JDBC|MANAGED">//MANAGED托管
dataSource元素使用基本JDBC数据源接口配置JDBC连接对象的资源
<dataSource type="[UNPOOLED|POOLED|JNDI]">
mappers元素
mappers:映射器,定义SQL映射语句
需在配置中引用mapper映射文件
方式一:使用类资源路径获取资源
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml" />
</mappers>
方式2:使用URL获取资源
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml" />
</mappers>
mapper配置
<mapper namespace="cn.smbms.dao.user.UserMapper">
<select id="count" resultType="int">
select count(*) from smbms_user
</select>
</mapper>
以上是关于java框架之MyBatis的主要内容,如果未能解决你的问题,请参考以下文章