博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三章 : JavaORM框架之Mybatis篇(Ibatis)
阅读量:6693 次
发布时间:2019-06-25

本文共 3382 字,大约阅读时间需要 11 分钟。

欢迎查看,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解ORM(对象关系映射关系)框架之Mybatis(Ibatis)。

主流ORM框架有MybatisHibernate,本章我们将对Mybatis的核心要点进行了解。

什么是ORM(对象映射关系)框架?

在这里插入图片描述

ORM(Object Relational Mapping)对象关系映射,是 一种为了解决面向对象与关系型数据库不匹配而出现的技术,使开发者能够用面向对象的方式使用关系型数据库。

Mybatis和Hibernate有什么异同?

  • Mybatis简单,Hibernate较复杂,门槛高。
  • Mybatis自定制Sql,比Hibernate灵活,可控
  • Mybatis与数据库映射得到的PO与Hibernate映射PO意义不同

Mybatis入门起步

/** * @Author:jimisun * @Description: * @Date:Created in 08:37 2018-09-24 * @Modified By: */public class Main {        public static void main(String[] args) throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession sqlSession = sqlSessionFactory.openSession();        TestUserMapper mapper = sqlSession.getMapper(TestUserMapper.class);        TestUser testUser = mapper.selectOne(1);        System.out.println(testUser.toString());    }}

PS:Mybatis支持注解开发,但需要保留空的XML文件,也就是保留空的命名空间 ; 如下所示

@Select(" SELECT * from user where id = #{id};")    MyDto selectOne(Integer id);

Mybatis和Spring的集成

如果你使用Mybatis那么一定会使用Spring,最常见的框架组合就是SSM(SpringMvc+Spring+Mybatis),那么Mybatis针对和Spring的整合提供了一个类库(jar包)

org.mybatis
mybatis-spring
1.2.2

以前我们配置在mybatis里面的配置,现在我们可以将这些配置转移到了Spring配置中;统一交给Spring进行管理, Mybatis的配置文件留空,但是不能删除哟

Spring和Myabtis整合的有两个关注点

  1. Myabtis将SqlSessionFactory交付Spring管理
  2. Spring将XML对应的接口进行接手管理

Mybatis结果映射

在实际项目中我们通过使用mybatis查询数据库经常使用多表查询,关联查询,或者实体的属性名和数据库列名不符等情况...所以查询的结果存在不定性,我们可以自定义Dto类,在mapper.xml文件中自定义标签即可。

Mybatis二级缓存

虽然很多时候我们在开发中并不经常Mybatis的二级缓存 , 但是如果针对个别SQL进行优化设置能够极大提升访问数据库效率 . mybatis支持一级缓存和二级缓存,默认开启一级缓存,一级缓存使SqlSession级别的,Session结束缓存就清空了,二级缓存使Mapper级别的,需要我们手动开启。

针对不需要使用二级缓存的方法设置useCache=false

我们进行简单的测试 , 观察Mybatis二级缓存是否开启

public static void main(String[] args) {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");        TestUserMapper testUserMapper = (TestUserMapper) context.getBean("testUserMapper");        /*测试缓存:先查询此时username为jimisun*/        TestUser testUser = testUserMapper.selectOne(1);        /*测试缓存:修改username为lisi*/        Integer integer = testUserMapper.updateOne(1);        /*测试缓存:最后查询查看是否从数据库获取还是从缓存获取*/        TestUser resultUser = testUserMapper.selectOne(1);        System.out.println(resultUser.toString());    }

Mybatis其他使用技巧

  • 在mapper.xml编写sql时对于重复的sql我们可以使用引用代码
  • 对于Mybatis非空判断我们建议这样使用 <if test="param !=null and param != ''">
  • 一个Mapper.xml中可以直接引用另一个Mapper.xml的resultMap , 不需要重复定义

Java开发之上帝之眼系列教程其他文章

勘误&感谢

  本系列文章资料来源很多出自于互联网和在下本身的见解,受限于个人技术能力水平和其他相关知识的限制,相关见解错误或者资料引用错误请各位帮助留言校正!引用资料多来自于互联网,在下在引用前会遵循各位前辈或者博主的引用说明表示感谢,但互联网资料多是转发再转发或存在遗漏请原作者内信联系指正。

转载地址:http://cbjoo.baihongyu.com/

你可能感兴趣的文章
IronPython 与C#交互
查看>>
【干货分享】流程DEMO-事务呈批表
查看>>
同时满足多个文本框不为空值按钮呈现可用激活状态disabled
查看>>
在不同域中各个系统拥有自已独立的用户系统时的单点登录问题
查看>>
如同透视!湖北医院首次将VR用于肺癌切除
查看>>
Oracle数据文件和临时文件的管理
查看>>
4python全栈之路系列之scrapy爬虫s
查看>>
华为S9300、s5700交换机端口镜像配置
查看>>
如何清除Exchange2010邮件日志
查看>>
PHP优化
查看>>
学习笔记 254: 预备知识总结
查看>>
javascript之事件监听
查看>>
linux运维转行程序员
查看>>
国内外软件测试大会汇总
查看>>
背水一战 Windows 10 (72) - 控件(控件基类): UIElement - UIElement 的位置, UIElement 的布局, UIElement 的其他特性...
查看>>
iscis
查看>>
iOS HTTP 资源时需要对 URL 进行 Encode
查看>>
nginx 负载均衡5种方式及其服务器几种状态
查看>>
每天早上七点钟备份公司的web站点计划
查看>>
iOS GCD(Grand Central Dispatch)的使用(1)
查看>>