JavaORM框架之Mybatis篇(Ibatis)
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了解)Java体系。使Java的各种后端技术在你心中模块化;让你在工作中能将Java各个技术了然于心;能够即插即用。本章我们来一起了解ORM(对象关系映射关系)框架之Mybatis(Ibatis)。
什么是ORM(对象映射关系)框架?
ORM(Object Relational Mapping)对象关系映射,是 一种为了解决面向对象与关系型数据库不匹配而出现的技术,使开发者能够用面向对象的方式使用关系型数据库。
Mybatis和Hibernate有什么异同?
- Mybatis简单,Hibernate较复杂,门槛高。
- Mybatis自定制Sql,比Hibernate灵活,可控
- Mybatis与数据库映射得到的PO与Hibernate映射PO意义不同
Mybatis入门起步 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());
- }
- }
- @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" >
- <mapper namespace="com.jimisun.dao.TestUserMapper">
- <!--空-->
- </mapper>
Mybatis和Spring的集成 Myabtis和Spring整合完整示例代码下载
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.2.2</version>
- </dependency>
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-4.0.xsd">
- <!-- 加载配置文件 -->
- <context:property-placeholder location="classpath:db.properties"/>
- <!-- 数据库连接池 -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
- destroy-method="close">
- <property name="driverClassName" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- <property name="maxActive" value="10"/>
- </bean>
- <!-- mapper配置 -->
- <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <!-- 数据库连接池 -->
- <property name="dataSource" ref="dataSource"/>
- <!-- 加载mybatis的全局配置文件 -->
- <property name="configLocation" value="classpath:mybatis-config.xml"/>
- <!-- 扫描entity包 使用别名 -->
- <property name="typeAliasesPackage" value="com.jimisun.domain"/>
- <!-- 扫描sql配置文件:mapper需要的xml文件 -->
- <property name="mapperLocations" value="classpath:mapper/*.xml" />
- </bean>
- <!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <!-- 注入sqlSessionFactory -->
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
- <!-- 给出需要扫描Dao接口包 -->
- <property name="basePackage" value="com.jimisun.dao"/>
- </bean>
- </beans>
Spring和Myabtis整合的有两个关注点
- Myabtis将SqlSessionFactory交付Spring管理
- Spring将XML对应的接口进行接手管理
Mybatis结果映射 Myabtis自定义结果映射完整示例代码下载
- <resultMap id="MyDto" type="com.jimisun.domain.dto.MyDto">
- <result property="myid" column="id"></result>
- <result property="myusername" column="username"></result>
- </resultMap>
Mybatis二级缓存 Mybatis的二级缓存测试示例代码
- <!--开启二级缓存-->
- <cache/>
- <select id="selectOne" parameterType="java.lang.Integer" resultType="com.jimisun.domain.TestUser" useCache="false">
- SELECT * from user where id = #{id}
- </select>
我们进行简单的测试 , 观察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我们可以使用<include refid="id">引用代码
- 对于Mybatis非空判断我们建议这样使用 <if test="param !=null and param != ''">
- 一个Mapper.xml中可以直接引用另一个Mapper.xml的resultMap , 不需要重复定义
Java开发之上帝之眼系列教程其他文章
勘误&感谢
本系列文章资料来源很多出自于互联网和在下本身的见解,受限于个人技术能力水平和其他相关知识的限制,相关见解错误或者资料引用错误请各位帮助留言校正!引用资料多来自于互联网,在下在引用前会遵循各位前辈或者博主的引用说明表示感谢,但互联网资料多是转发再转发或存在遗漏请原作者内信联系指正。
JavaORM框架之Mybatis篇(Ibatis)的更多相关文章
- JAVAORM框架之Mybatis (Ibatis) 详解
目录 Mybatis基础概念 Mybatis开放方式演进 Mybatis框架核心要点 关联查询 延迟加载(懒加载) 动态SQL Mybatis缓存 Mybatis逆向工程 PageHelper分页插件 ...
- JAVA-ORM框架整理➣Mybatis操作MySQL
概述 在Java中,对数据库操作的框架很多,上节概述Hibernate的简单使用,这里简单整理Mybatis的使用.Mybatis也是简单的数据库操作框架,通过IOC方式,获取操作类对象,进行数据的操 ...
- 开源顶级持久层框架——mybatis(ibatis)——day02
mybatis第二天 高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis ...
- 【持久化框架】Mybatis简介与原理
从这篇博文开始我们学习一下Mybatis,希望大家提出宝贵的建议. 什么是Mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache softwar ...
- Hibernate框架与Mybatis框架的对比
学习了Hibernate和Mybatis,但是一直不太清楚他们两者的区别的联系,今天在网上翻了翻,就做了一下总结,希望对大家有帮助! 原文:http://blog.csdn.net/firejuly/ ...
- 【持久化框架】Mybatis与Hibernate的详细对比
前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Myba ...
- mybatis和ibatis区别
ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis. 1.Mybat ...
- 持久层框架之MyBatis
1.mybatis框架介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...
- Java框架之Mybatis(一)
一.Mybatis 简介 Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改 ...
随机推荐
- Incentivizing exploration in reinforcement learning with deep predictive models
Stadie, Bradly C., Sergey Levine, and Pieter Abbeel. "Incentivizing exploration in reinforcemen ...
- struts2中struts.xml和web.xml文件解析及工作原理
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp ...
- JDK中的序列化和反序列化
题外话:诸事缠身,不知不觉距离上一篇就将近一个月了,读书不易,学习不易,唯有坚持. 写来写去始终不满意,索性贴一个比较好的文章吧! 参考: [Java基础]序列化与反序列化深入分析
- 第三百一十八节,Django框架,信号
第三百一十八节,Django框架,信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时, ...
- 在安装ZooKeeper之前,请确保你的系统是在以下任一操作系统上运行
在安装ZooKeeper之前,请确保你的系统是在以下任一操作系统上运行: 任意Linux OS - 支持开发和部署.适合演示应用程序. Windows OS - 仅支持开发. Mac OS - 仅支持 ...
- PNG透明兼容IE6的几种方法(转)
png 透明针对 IE6 一直是件挺麻烦的事情,使用的方法也是各有不同,大多的原理是用 IE 的滤镜来解决的. 语法: filter:progid:DXImageTransform.Microsoft ...
- 转载: erlang连接mysql
转自:http://blog.csdn.net/flyinmind/article/details/7740540 项目中用到erlang,同时也用到mysql.惯例,google. 但是,按照网上说 ...
- 【转载】关于quartus ii软件中注释乱码问题的解决方法
最近在看Verilog代码,由于我的quartus版本打开他们的文件注释会全部乱码,痛苦万分!从网上找了下原因,解决方法基本没有,不过看到有人提出是编码的问题,立马我就想到一个解决方法,经过实验果然有 ...
- js 动态设置 option 的selected 选项
思路:通过for循环判断每个选项,一旦满足条件则设置其selected属性为true即可,关键代码: var obj = document.getElementById(select_id); for ...
- storm深入研究
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:He Ransom链接:http://www.zhihu.com/question/23441639/answer/28075 ...