MyBatis基础

最后的301 2019-10-08 03:42:30
MyBatis
半自动化的ORM实现
Dao层
动态SQL
小巧灵活,简单易学
简介
MyBatis前身是iBatis,本来是Apache的一个开源项目,在Github上可以下载
ORM框架
实体类和SQL语句之间建立映射关系
特点:
基于SQL语法,简单易学
能了解底层封装过程,封装不是很好
SQL语句封装在配置文件当中,便于统一管理维护,降低耦合度
方便代码调试
持久化与ORM2
持久化:把内存里瞬时的东西变成持久性质的过程
orm可以配置你的对象与那个表对应,对象属性与哪个字段对应
ORM
编写程序时,以面向对象的方式处理数据
保存数据时,以关系型数据库的方式存储
ORM解决方案包含四部分:
在持久化对象上执行基本的增删改出操作
在持久化对象提供一种查询语言或API
对象关系映射
提供与事务对象交互,执行检查,延迟加载以及其他优化功能
支持框架:MyBatis,Hibernate
框架搭建:
1.下载mybatis的jar包并导入工程
2.编写MyBatis核心配置文件(configuration.xml)针对不同工程,名字也不一样,核心就是全局
头部
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
主体
<configuration>
<!--引入jdbc链接文件-->
<properties resource="jdbc.properties"/>
引入loge4g.xml配置文件
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
创建数据库连接
<environments default="development">
<environment id="development">
<!-- 事务管理-->
<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>
</environments>
<!-- 将mapper文件加入到配置文件中-->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>
</configuration>
3.创建实体类POJO (和正常实体类一样,注意变量名与数据库对应)
4.DAO层-SQL映射文件(mapper.xml)
头部:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!-- sql语句-->
<select id="count" resultType="int">(调用时使用name+id)调用,返回类resultType
select count(1) as count from smbms_user
</select>
</mapper>
5.创建测试类
读取全局配置文件mybatis-config.xml
String resource="mybatis-config.xml";
InputStream is= Resources.getResourceAsStream(resource);
创建SqlSessionFactory对象,读取配置文件
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
创建SqlSession对象
sqlSession=factory.openSession();
调用mapper文件进行数据操作
count=sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
最后关闭sqlSession
单例:只有一个工厂:
创建一个MyBtaisUtil工具类
省去了创建工厂的过程,改变了创建session的方式
//保证sqlSessionFactory只创建一次
private static SqlSessionFactory factory;
static{
InputStream is= null;
try {
//获取mybatis-config.xml输入流
is = Resources.getResourceAsStream("mybatis-config.xml");
//2创建SqlSessionFactory对象,完成配置文件的读取
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//开启session
public static SqlSession createSqlSession(){
return factory.openSession(false);
}
// 关闭session
public static void closeSqlSession(SqlSession sqlSession){
if(sqlSession!=null){
sqlSession.close();
}
}
优缺点:专注于SQL本身,是一个足够灵活的DAO层解决方案,实用与性能要求较高的或需求多变的互联网项目
优点:
同jdbc相比,减少50%代码量
最简单的持久化框架,小巧简单易学
SQL代码从程序代码中彻底分离
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段关系映射
缺点:
SQL语句编写量工作大,对开发人员要求高
数据库移植性差
MyBatis三大基本要素:
1.MyBatis的核心接口和类
SqlSessionFactoryBuilder
可重用其来构建多个SqlSessionFactory实例
用过即丢,生命周期只存在于方法体内
负责构建SqlSissionFactory,并提供多个build方法重载
SqlSessionFactory
SqlSessionFactory是每个MyBatis应用核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期一致
单例:
存在于整个应用运行时,有且仅有一个
SqlSession
包含了执行SQL所需的所有方法
对应以此数据库的对话,会话结束必须关闭
线程级别,不能共享
使用方式:
通过SqlSession实例直接运行映射的SQL语句
userList=sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserList");
基于Mapper接口方式操作数据,不同与之前:
1.在mapper同级创建接口,同mapper同级
2.在此接口创建方法,方法名与mapper里的映射id名字相同
3.userList=sqlSession.getMapper(UserMapper.class).getUserList();

2.mybatis-config.xml 系统核心配置文件
3.mapper.xml SQL映射文件
核心配置文件
根节点configuration
properties 可以配置在Java属性配置文件中 如配置连接数据库配置文件
settings 修改MyBatis在运行时的行为方式 如loge4j
typeAliases 为JAVA类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
envionments 环境
envionment 环境变量
transactionManger 事务管理器
dateSource 数据源
managers 映射器
properties两种配置方式:
1.配置到jdbc.properties里,在核心配置文件中
<properties resource="jdbc.properties"/>
拿到
2.直接配置为XML实现动态配置
<properties>
<property name="" value="">
</properties>

要是两个都用了,则第一种情况生效
最后拿出方式
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
settings的配置
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置,name
设置项:cacheEnabled
描述:对再次配置文件下的所有cache进行全局性开/关设置
值:true/false
默认:true
设置项:lazyLoadingEnabled
描述:全局性设置懒加载,如设置为false则所有相关的都会被初始化加载
值:true/false
默认:true,默认懒加载
设置项:autoMappingBehavior
描述:MyBatis对于resultMap自动映射匹配级别
值:NONE/PARTIAL/FULL
默认:PARTIAL
typeAliases:类型别名
仅仅只关联XML配置,简写比较长的Java类名
<typeAliases>
<typeAlias alias="别名" type="类的全路径">
</typeAliases>
然后在mapper文件里,使用此类只需要使用别名就够了
但是一个项目多个pojo,太麻烦,简单的写法:
<typeAliases>
<package name="cn.smbms.pojo"/>
</typeAliases>
此时,pojo下的所有文件均设置别名,别名及类名
environments元素
表示配置MyBatis的多套运行环境,将 SQL映射到多个不同的数据库上
子元素节点:environment 单独一个运行环境,但是必须指定其中的一个默认运行环境(通过defult指定)
<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>
</environments>
transactionManager:事务管理器
<transactionManager type="JDBC|MANAGED">
JDBC|MANAGEN托管
dataSource:
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
<dataSource type="UNPOOLED|POOLED|JNDI"/>
pooled类型主要用的池的原理
mapper:映射器
定义SQL映射语句
需在配置之中引用mapper映射文件
1.实用类资源获取路径:
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml">
</mappers>
2.使用URL获取资源:
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml">
</mappers>
...全文
11 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧