美文网首页Java 杂谈
JAVAORM框架之MYBATIS篇(IBATIS)

JAVAORM框架之MYBATIS篇(IBATIS)

作者: Java架构_师 | 来源:发表于2018-09-28 14:42 被阅读4次

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

    主流ORM框架有Mybatis和Hibernate,本章我们将对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 *@ModifiedBy: */publicclassMain{publicstaticvoidmain(String[] args)throwsIOException { String resource ="mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory =newSqlSessionFactoryBuilder().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);<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><!--空-->

    Mybatis和Spring的集成

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

    org.mybatismybatis-spring1.2.2

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

    <?xml version="1.0"encoding="UTF-8"?>

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-4.0.xsd"><!-- 加载配置文件 --><!-- 数据库连接池 --><!-- mapper配置 --><!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --><!-- 数据库连接池 --><!-- 加载mybatis的全局配置文件 --><!-- 扫描entity包 使用别名 --><!-- 扫描sql配置文件:mapper需要的xml文件 --><!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --><!-- 注入sqlSessionFactory --><!-- 给出需要扫描Dao接口包 -->

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

    Myabtis将SqlSessionFactory交付Spring管理

    Spring将XML对应的接口进行接手管理

    Mybatis结果映射

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

    Mybatis二级缓存 Mybatis的二级缓存测试示例代码

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

    <!--开启二级缓存-->

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

    SELECT*fromuserwhereid =#{id}

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

    public static void main(String[] args) { ClassPathXmlApplicationContextcontext= 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我们可以使用<include refid="id">引用代码

    对于Mybatis非空判断我们建议这样使用 <if test="param !=null and param != ''">

    一个Mapper.xml中可以直接引用另一个Mapper.xml的resultMap , 不需要重复定义

    那如何学习才能快速入门并精通呢?

    当真正开始学习的时候难免不知道从哪入手,导致效率低下影响继续学习的信心。

    但最重要的是不知道哪些技术需要重点掌握,学习时频繁踩坑,最终浪费大量时间,所以有一套实用的视频课程用来跟着学习是非常有必要的。

    为了让学习变得轻松、高效,今天给大家免费分享一套阿里架构师传授的一套教学资源。帮助大家在成为架构师的道路上披荆斩棘。加群:874811168 免费领取下图资料。

    这套视频课程详细讲解了(Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构)等这些成为架构师必备的内容!

    而且还把框架需要用到的各种程序进行了打包,根据基础视频可以让你轻松搭建分布式框架环境,像在企业生产环境一样进行学习和实践。

    相关文章

      网友评论

        本文标题:JAVAORM框架之MYBATIS篇(IBATIS)

        本文链接:https://www.haomeiwen.com/subject/uekpoftx.html