什么是Mybaits?
Mybaits
半自动orm持久层框架,免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
Mybaits框架核心配置文件
- configuration 根节点元素
- peopreties 包含数据库连接相关参数
- settgs 设置Mybaits框架的运行时行为
- environments 可配置多组运行环境
- environment 配置运行环境(事务管理,数据源…)
- mappers 配置SQL映射文件的位置
- mapper mappers的子元素
SqlSessionFactorybuilder
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的.而使用SqlSessionFactorybuilder的原因就是把SqlSessionFactory 这个对象交给builder来创建,也就是创造者模式.
SqlSessionFactorybuilder可以拆分为3部分
- SqlSessionFactorybuilder:工人
- SqlSessionFactory:工厂
- SqlSession:产品
工厂(SqlSessionFactory)通过工人(SqlSessionFactorybuilder)
得到产品(SqlSession)
public class Usermapeerutil {
static SqlSession sqlSession = null;
public static SqlSession getSqlSession(){
String resource="mybaits-config.xml";
InputStream inputStream=null;
try {
inputStream = Resources.getResourceAsStream(resource);
}catch (IOException e){
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
作用域和生命周期
- SqlSessionFactorybuilder:
SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量),也就是方法执行完毕,它被摧毁 - SqlSessionFactory:
SqlSessionFactory 的最佳作用域是应用作用域,它是一直存在的,直到你整个程序运行完毕,使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏习惯”。 - SqlSession:
SqlSession的最佳的作用域是请求或方法作用域,也就是当你每次发起请求,都会打开一个SqlSession,当请求完成后将它关闭
每个线程都应该有它自己的 SqlSession 实例,SqlSession 的实例不是线程安全的,所以它是不能被共享的.
Sql映射
MyBatis 提供的所有特性都可以利用基于 XML 的映射语言来实现,这使得 MyBatis 在过去的数年间得以流行。
- cache – 该命名空间的缓存配置。
- cache-ref – 引用其它命名空间的缓存配置。
- resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
- sql – 可被其它语句引用的可重用语句块。
- insert – 映射插入语句。
- update – 映射更新语句。
- delete – 映射删除语句。
- select – 映射查询语句
<?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">
<!--
根据namespace查找对应创建dao接口
根据方法名称查找对应的sql语句
-->
<mapper namespace="com.cn.mapper.UserMapper">
<!--
每一种sql语句对应每一种标签
resultType 返回值类型
-->
<select id="login" resultType="com.cn.pojo.User">
select * from user where number=#{arg0} and password=#{arg1}
</select>
</mapper>
(还在学习中,第一次发文章,勿喷,有不足之处还望指点)