优秀的持久层框架-Mybatis框架解析

Topic

Mybatis步骤

mybatis解决原生态jdbc的问题

数据库连接,使用时连接,不使用时释放,对数据库进行频繁连接的开启和关闭,造成数据库资源浪费,影响数据库性能

设想:使用数据库连接池管理数据库连接

将sql语句硬编码到Java代码中,如果sql语句修改,需要重新编译Java代码,不利于系统维护.

设想:将SQL语句配置在xml配置文件中,即使SQL变化,不需要对Java代码进行重新编译

向preparedStatement中设置参数,对占位符位置和设置参数硬编码到Java代码中,不利于系统维护.

设想:将SQL语句及占位符和参数全部配置在xml中

从resultset中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护.

设想:将查询结果集,自动映射成Java对象

持久层框架

Mybatis是一个持久层的框架,让程序将主要精力放在SQL上,通过mybatis提供的映射方式,自由灵活生成满足的SQL语句;可以将preparedStatement中的输入参数自行自动输入映射,将查询结果集灵活映射成Java对象(输出映射)

Mybatis架构

sqlSessionFactoryBuilder

通过sqlSessionFactoryBuilder创建会话工厂sqlSessionFactory

将sqlSessionFactoryBuilder当成一个工具类使用,不需要使用单例模式管理,在需要sqlSessionFactory时,只需要new一次sqlSessionFactoryBuilder就行了

sqlSessionFactory

通过sqlSessionFactory创建sqlSession,使用单例模式管理sqlSessionFactory

sqlSession

sqlSession是一个面向用户的接口, sqlSession中提供很多操作数据库的方法,如:selectOne(),selectList().sqlSession是线程不安全的,在sqlSession实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性.

sqlSession最佳应用场合在方法体内,定义成局部变量使用.

原始Dao开发方法

MybatisDemo02

编写dao,dao.impl,mapper.xml

Test:

public class BookDaoTest {

private SqlSessionFactory sqlSessionFactory;

@Before

public void setUp() throws IOException{

String resource="mybatis-config.xml";

InputStream inputStream=Resources.getResourceAsStream(resource);

sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

}

@Test

public void testLoadById() throws Exception{

//创建Dao对象

IBookDao bookDao=new BookDao(sqlSessionFactory);

Book book=bookDao.loadById(5);

System.out.println(book);

}

Mapper代理

编写dao,mapper.xml

遵守一定的开发规范:

在mapper.xml中的namespace等于dao接口的地址

Dao接口的方法名和mapper.xml中的statement的 id一致

Dao.java接口中的方法输入参数类型和mapper.xml中statement的paramterType指定的类型一致

Dao.java接口中的方法输出参数类型和mapper.xml中statement的ResultType指定的类型一致

Test:

public class BookDaoTest {

private SqlSessionFactory sqlSessionFactory;

@Before

public void setUp() throws IOException{

String resource="mybatis-config.xml";

InputStream inputStream=Resources.getResourceAsStream(resource);

sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

}

@Test

public void testLoadByName() throws Exception{

SqlSession sqlSession=sqlSessionFactory.openSession();

//创建IBookDao对象,自动生成mapper代理对象

IBookDao bookDao=sqlSession.getMapper(IBookDao.class);

Book book=bookDao.loadById(5);

System.out.println(book);

}

}

Mybatis-config.xml的详细配置

properties(属性)

settings(全局配置参数)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境集合属性对象)

environment(环境子属性对象)

transactionManager(事务管理)

dataSource(数据源)

mappers(映射器)

详细参数配置,下篇文章详解哦~

本文来自企鹅号 - 程序员食堂媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Linux如何查看当前占用CPU或内存最多的几个进程

命令 ps -aux | sort -k4nr | head -N 命令详解: head:-N可以指定显示的行数,默认显示10行。 ps:参数a指代all——所...

34960
来自专栏向上的小草

mybati缓存机制之一级缓存

  在月黑风高的某天夜晚,boss chen语重心长的发条了消息给小草说:“小草啊,是时候写写博客来记录平常自己积累的东西了......”。小草一听,平常没有写...

28900
来自专栏java达人

MapperScannerConfigurer处理过程源码分析

作者:format 来源: http://fangjian0423.github.io/(点击文末阅读原文前往) 前言 本文将分析mybatis与spring...

29280
来自专栏情情说

深入浅出MyBatis:MyBatis解析和运行原理

上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,可以给很多配置设置参数,动态代理可以在运行时创建代理对象,做一些特殊的处理...

40370
来自专栏别先生

MyBatis之Hello world(Mybatis入门)

MyBatis中文网,超详细的:http://www.mybatis.org/mybatis-3/zh/index.html MyBatis英文网:http:/...

26550
来自专栏Java成神之路

Mybatis_总结_05_用_Java API

使用 MyBatis 的主要 Java 接口就是 SqlSession。你可以通过这个接口来执行命令,获取映射器和管理事务。

10320
来自专栏叔叔的博客

过一遍mybatis源码-1

先过一遍mybatis的简单介绍和使用。 http://www.mybatis.org/mybatis-3/zh/getting-started.html 比较...

28750
来自专栏Java帮帮-微信公众号-技术文章全总结

Mybatis_day01

Mybatis_day01 前言 Jdbc演变到mybatis jdbc jdbc编程 publicstaticvoid main(String[] args)...

43470
来自专栏小灰灰

Android之倒计时CountdownTimer用法

四个方法,上面都涉及到了onTick,onFinsh、cancel和start。 其中前面两个是抽象方法,所以要重写一下。 官方实例: new Co...

25080
来自专栏IT可乐

mybatis 详解(七)------一对一、一对多、多对多

  前面几篇博客我们用mybatis能对单表进行增删改查操作了,也能用动态SQL书写比较复杂的sql语句。但是在实际开发中,我们做项目不可能只是单表操作,往往会...

53660

扫码关注云+社区

领取腾讯云代金券