MyBatis(概念篇)

3 篇文章 0 订阅
3 篇文章 0 订阅

概念

定义:

MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。

作用:

替代JDBC代码以及设置参数和获取结果集的工作。

功能:

通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录,从而替代JDBC的的步骤,使用xml或者注解配置实现java类和数据库中表进行映射。

优点

  1. jdbc在代码中使用" "字符串编写sql。在此处使用配置文件方式编写,解决了硬编码问题。
  2. 解决JDBC中数据库连接硬编码问题;在此处使用xml配置文件方式进行处理。
  3. 解决了查询结果封装问题。
  4. 更方便传参。

XML

概念:

xml是可扩展标记语言,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

功能:

为配置文件所服务

约束:

  • scheam约束。以.xsd为结尾的;(spring)
  • dtd约束。以.dtd为结尾的;(MyBatis)

运行原理:

  • mybatis中使用一个全局配置文件和多个映射文件组成;
  • 创建SqlSessionFactoryBuilder对象,使用其中的build方法去加载配置文件,生成SqlSessionFactory对象。
  • SqlSessionFactory对象使用openSession方法返回sqlsession对象;
  • SqlSession本身是不能像statement连接数据库表的,sqlsession是一个接口,里面提供了操作数据库的方法;
  • sqlsession里面包含了几种执行器,通过使用mapperstatement对象,去执行sql,并返回结果。
  • 输入参数类型:可以是简单数据类型;自定义数据类型、集合数据类型;
  • 输出结果:可以是简单数据类型、自定义数据类型、集合类型。

封装工具类

SqlSessionFactoryBuilder:

可以被实例化、使用和丢弃,一旦创建了SqlSessionFactory,就不再需要它了。因此SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)

SqlSessionFactory:

SqlSessionFactory一但被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或者重新创建另一个实例。使用SqlSessionFactory的最佳实践是在应用运行期间不要重复创建多次,多次重建SqlSessionFactory被视为一种代码坏习惯。

SqlSession

每个线程都应该有自己的SqlSession实例。SqlSession的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。绝对不能将SqlSession实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。

代码创建举例:

package cn.ry.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//工具类中的方法推荐使用静态方法: 静态方法调用的时候:类名.方法名();
//一般来说public 修饰的;
public class SqlSessionUtil {
//
private static SqlSessionFactory factory=null;
static {
//加载配置文件:
//使用到的是sqlSessionfactorybuilder;
SqlSessionFactoryBuilder build = new SqlSessionFactoryBuilder();
//org.apache.ibatis.io.Resources;
InputStream rs=null;
try {
rs = Resources.getResourceAsStream("configer.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//使用构建者模式读取配置文件中内容:
factory = build.build(rs);
}
public static SqlSession getSqlSession() {
//使用工厂模式,获取SqlSession:
//此处需要添加参数true;默认值是false表示手动提交;true表示自动提交;
SqlSession session = factory.openSession(true);
return session;
}
}

代理模式*

代理模式的要求:

  • 要求mapper接口和映射文件xml同包同名;
  • 映射文件中的namespace和接口的全限定类名保持一致;
  • 映射文件中的sqlID和接口中的方法名保持一致;(接口中的方法可以少于映射文件中sqlID);
  • 接口中的方法返回值类型(泛型或者集合)必须和映射文件中的resultType或者resultMap中的type属性值保持一致。
  • 接口中的方法的形参最多只能有一个,除非使用@Param参数注解以外(如果形参加了该参数注解,则所有加了该注解的形参会被放置在一个map中进行映射)。

今天先总结到这里,下次再继续总结吧。博主创作不易,点个关注不迷路,谢谢大家。

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值