MyBatis教程
文章平均质量分 78
公众号Java蚂蚁
火星IT鸡肉男 赋予代码灵魂,追求极致性能
展开
-
老司机学习MyBatis之如何获取自增主键的值(MySQL)
使用MyBatis进行插入操作的时候,如果表的主键是自增的,针对不同的数据库相应的操作也不同。我们在实际开发中无非是两种情况比较多,一种是Oracle sequence,另外一种就是MySQL自增主键。本文主要应用于MySQL数据库,针对返回自增主键和不返回自增主键两种情况通过案例说明。原创 2017-10-20 22:04:41 · 777 阅读 · 0 评论 -
老司机学习MyBatis之如何使用动态SQL之使用where条件
一、前言前面一节我们最后留下了一个疑问,如果第一个条件当id为空的时候,我们的SQL语句拼接就产生了问题,我们先通过案例复现一下这个问题,修改testFindEmpByCondition方法@Testpublic void testFindEmpByCondition() throws IOException { SqlSessionFactory sqlSessionFactory = ge...原创 2018-06-10 12:24:15 · 2117 阅读 · 0 评论 -
老司机学习MyBatis之动态SQL使用set执行更新操作
一、前言当在 update 语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set标签可以将动态的配置 SET 关键字,并剔除追加到条件末尾的任何不相关的逗号。使用 if+set 标签修改后,如果某项为 null 则不进行更新,而是保持数据库原值。二、案例我们先来看看不用set标签时,我们如何实现update功能操作修改EmpMapper.java类,新增一...原创 2018-06-13 07:25:56 · 11581 阅读 · 3 评论 -
老司机学习MyBatis之动态SQL使用foreach遍历集合
一、前言foreach 就是遍历迭代,在SQL中通常用在 in 这个关键词的后面。foreach元素的属性主要有 item,index,collection,open,separator,close这6种<foreach collection="" close="" index="" item="" open="" separator=""> ....&am原创 2018-06-13 21:36:35 · 2434 阅读 · 0 评论 -
老司机学习MyBatis之动态SQL使用foreach在MySQL中批量插入
一、前言当我们使用MyBatis一次性插入多条数据时候也可以使用foreach标签,本文我们将介绍MySQL中使用MyBatis批量插入数据的两种方式。二、案例①第一种方式修改EmpMapper文件,增加batchSave方法/*** 批量插入数据* @param empList*/public void batchSave(List<Emp> empLi...原创 2018-06-14 07:19:25 · 11399 阅读 · 2 评论 -
老司机学习MyBatis之动态SQL使用foreach在Oracle中批量插入
一、前言前面一节,我们讲解了在MySQL下如何通过foreach批量插入数据,这一节,我们将介绍在Oracle下批量插入数据,也有两种方式。二、案例完整的工程目录结构如下在Oracle下创建数据库表t_emp,并创建序列CREATE TABLE t_emp ( id number(10) NOT NULL, emp_name varchar(50) DEFAULT NULL, emp_...原创 2018-06-14 21:38:18 · 3619 阅读 · 1 评论 -
老司机学习MyBatis之一级缓存原理以及失效情况
一、前言MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存:一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存,用户没有定制它的权利(不过这也不是绝对的,可以通过开发插件对它进行修改);每当我们使用MyBatis开启一次和数据库的会话,MyB...原创 2018-06-22 06:58:28 · 3048 阅读 · 1 评论 -
老司机学习MyBatis之二级缓存的使用
一、前言二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Application应用。二级缓存也叫做全局缓存,基于namespace级别的缓存,一个namespace对应一个二级缓存。①MyBatis将Application级别的二级缓存细分到Mapper级别,即对于每一个Mapper.xml,如果在其中使用了&l...原创 2018-06-24 21:20:57 · 370 阅读 · 0 评论 -
老司机学习MyBatis之一级、二级缓存的相关设置详解
一、前言前面两个章节,我们简单的介绍了一级缓存和二级缓存,并对它们的使用有了初步的了解,下面我们将从以下几个配置深入的了解一下几个常用的配置对一二级缓存的影响。二、案例①全局setting的cacheEnable这个配置我们在使用二级缓存的时候有用到,如果配置成false,二级缓存会失效,那么对一级缓存有影响吗?修改测试方法测试结果:控制台打印了一条SQL语句,第二...原创 2018-07-16 20:24:45 · 476 阅读 · 0 评论 -
老司机学习MyBatis之整合ehcache缓存框架
一、前言MyBatis为我们提供了Cache接口,也提供了一些实现类,进入Cache接口源码,可以看到缓存对于MyBatis来说就是一个Map,比较简陋。但是大家都知道MyBatis是一个专注于持久层框架,与数据库打交道MyBatis是很专业的,但是对于缓存它就略显不足,即便如此MyBatis却提供了Cache接口的标准规范,谁做缓存专业,谁就来实现它,提供了很好的扩展性。本节我们将介绍了一下...原创 2018-07-16 20:28:27 · 459 阅读 · 0 评论 -
老司机学习MyBatis之逆向工程MGB的简单使用
一、前言MyBatis Generator简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的根据表生成对应的映射文件,接口,以及bean类。支持基本的增删改查,以及QBC风格的条件查询,这样能够大大减少我们平时开发的工作量。但是表连接、存储过程等这些复杂sql的定义需要我们手工编写,下面我们将简单介绍一下如何逆向生成代码。二、案例①为了生成逆向工程,我们需要导...原创 2018-07-19 07:16:59 · 1739 阅读 · 0 评论 -
MyBatis插件开发原理
一、前言MyBatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变MyBatis的默认行为(诸如SQL重写之类的),由于插件会深入到MyBatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件。MyBatis在四大对象的创建过程中,都会有插件进行介入。插件可以利用动态代理机制一层层的包装目标对象,而实现目标对象在执行目标方法之前进行拦截的...原创 2018-07-20 07:03:38 · 2986 阅读 · 0 评论 -
老司机学习MyBatis之运行原理SQLSessionFactory获取openSession对象
一、前言在前面一节,我们分析了SQLSessionFactory的初始化的整个过程,接下来这一节我们将通过查看源码看看SQLSessionFactory获得openSession的整个流程。二、案例继续Debug,在34行处打上断点F5下一步,进入DefaultSqlSessionFactory的openSession方法该方法中configuration.getDef...原创 2019-08-28 22:46:12 · 3886 阅读 · 0 评论 -
老司机学习MyBatis之如何使用动态SQL之使用if条件
一、前言什么是动态SQL? 动态SQL有什么作用?如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,MyBatis 使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 ...原创 2018-06-10 12:23:45 · 880 阅读 · 0 评论 -
老司机学习MyBatis之如何使用association或者collection实现延迟加载
一、前言ResultMap可实现高级映射(使用association、collection实现一对一及一对多映射),且association、collection都具备延迟加载功能。延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。二、案例结合前面《老司机学习MyBatis之如何使用association解决一对一关联查询》和《老司机学...原创 2018-06-10 11:47:18 · 514 阅读 · 0 评论 -
老司机学习MyBatis之如何使用collection解决一对多关联查询
一、前言上一章节《老司机学习MyBatis之如何使用association解决一对一关联查询》,我们介绍了MyBatis使用association通过嵌套查询和分段查询两种方式在查询User表的时候关联查询出Role表的信息,我们发现association针对的是一对一的这种关联,那么如果是一对多的关系呢?比如:查询部门信息时,查询出部门下面的所有员工信息呢?这个时候我们使用association...原创 2018-06-10 11:34:35 · 1017 阅读 · 0 评论 -
老司机学习MyBatis之简单入门HelloWorld
一、准备Eclipse:Luna Service Release 1 (4.4.1)MyBatis:org.mybatis.mybatis-3.2.8JDK:1.7.0_79二、步骤♦搭建一个Maven工程MyBatisDemo♦POM文件导入相关依赖<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns...原创 2017-10-20 21:41:51 · 5628 阅读 · 0 评论 -
老司机学习MyBatis之如何获取Oracle主键的值
前面一节,我们介绍了MySQL下MyBatis是如何获取自增主键和非自增主键的,这节我们将来探讨一下Oracle是如何获取主键的,由于Oracle是不支持自动生成主键的,不像Mysql能自动生成。所以我们讨论的就是后者。原创 2017-10-30 21:36:31 · 649 阅读 · 0 评论 -
老司机学习MyBatis之动态SQL使用trim自定义字符串截取
一、前言前面一个章节讲到,如果where标签里面,and或者or写在后面,最后字符串拼串后,如果最后一个条件没有加上,可能会出现SQL多出 and或者or 的情形。那我们是不是没有办法解决这种问题的产生,事实上MyBatis为我们提供了另外一种标签trim,可以简单粗暴的解决这个问题,下面我们通过案例来看看如何实现二、案例我们先来看看前面使用where标签时的情景现在我们对上面的XML做如下改造在...原创 2018-06-11 22:18:16 · 4387 阅读 · 0 评论 -
老司机学习MyBatis之如何使用typeAliases别名和@Alias注解
一、前言typeAliases是MyBatis中的别名处理器类,翻译过来就是别名的意思。别名处理器的作用就是把Java类型,给它起一个简单一点的别名,这样我们在XML文件中引入全类名的地方就可以使用别名替代。这样可以减少很多的工作量,节约开发时间。例如下面我们使用的是全类名:现在我们要做的就是给他取一个别名。二、案例修改mybatis-config.xml核心配置文件&l...原创 2018-06-05 07:32:07 · 18233 阅读 · 2 评论 -
老司机学习MyBatis之动态SQL使用choose分支
一、前言choose元素的作用就相当于Java语法中的switch语句,跟SQL语法case..when..then..else也差不多,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。二、案例EmpMapper类/** * 根据部门ID查询该部门下的所有员工信息 * @param id * @return */public Emp f...原创 2018-06-12 19:24:31 · 983 阅读 · 0 评论 -
老司机学习MyBatis之mappers如何配置映射注册
一、前言定义SQL映射语句,首先我们要告诉MyBatis去哪里找到这些语句,Java在自动查找这方面没有提供一个很好的方法,所以最佳方式是告诉MyBatis到哪里去查找映射文件,你可以使用相对路径的资源引用或者完全限定资源定位符或者类名或者包名。二、案例配置方式有四种:相对路径方式 ;全路径方式 ;使用class方式;批量注册下面分别介绍这四种方式如何配置的?①相对路径方式<mapper r...原创 2018-06-05 21:56:29 · 1073 阅读 · 0 评论 -
老司机学习MyBatis之如何处理参数(单个参数或者多个参数)
一、前言Mybatis在使用Mapper接口进行编程时,底层采用了动态代理机制,表面上是调用的Mapper接口,而实际上是通过动态代理调用的SqlSession的对应方法,其最终会获得一个代理了Mapper接口的MapperProxy对象。MapperProxy对象在调用Mapper接口方法时会把传递的参数做一个转换,然后把转换后的参数作为入参传递给SqlSession对应的操作方法(如selec...原创 2018-06-05 22:33:52 · 1532 阅读 · 0 评论 -
老司机学习MyBatis之如何使用命名参数
一、前言上一节我们介绍了MyBatis单个参数和多个参数传递的处理方式,当我们处理多个参数传递时出现了一点小问题,可以对照前一章节查看问题所在,这一节我们介绍MyBatis提供的另外一种使用注解来参入多个参数的方式,这种方式需要在接口的参数上添加@Param注解二、案例参考前面一节的代码在UserMapper.java修改查询方法findUserByIdAndUserName,如下:/*** 根...原创 2018-06-07 07:15:24 · 914 阅读 · 0 评论 -
老司机学习MyBatis之使用POJO传递参数
11原创 2018-06-10 06:50:28 · 2756 阅读 · 0 评论 -
菜鸟学习IntelliJ IDEA之如何创建普通的Java工程
一、前言前面两个章节我们分别讲解了Windows和Linux两种不同的环境下InteliJ IDEA是如何安装的,后续几个章节我们将来看看如何通过InteliJ IDEA来创建项目和一些其他技巧性的使用方法,这一节我们将简单介绍一下InteliJ IDEA是如何创建普通的Java工程的。二、步骤首先我们进入InteliJ IDEA的启动界面点击 "Create New Project",弹出以下界...原创 2018-06-15 07:40:40 · 2523 阅读 · 0 评论 -
老司机学习MyBatis之MyBatis如何使用Map处理参数
一、前言如果多个参数不是业务模型中的数据,没有对应的POJO,为了方便,我们直接封装成Map传入。#{key}取出map中对应的值。二、案例在UserMapper.java增加查询方法findUserByMapParam,如下:/** * 封装Map作为传递参数的载体* @param user* @return */public User findUserByMapParam(Map&l...原创 2018-06-10 07:05:53 · 2342 阅读 · 0 评论 -
老司机学习MyBatis之#与$取值区别
一、前言动态SQL是MyBatis的主要特性之一,在mapper中定义的参数传到XML中之后,在查询之前 mybatis 会对其进行动态解析。MyBatis 为我们提供了两种支持动态SQL的语法:#{} 以及 ${}。二、案例下面我们通过相关案例来演示一下$与#的用法。UserMapper.xml文件中查询语句最初写法<select id="findUserByMapParam" para...原创 2018-06-10 07:19:05 · 894 阅读 · 0 评论 -
老司机学习MyBatis之如何通过select返回List
一、案例当要查询的结果不是单个记录而是一个集合的时候,MyBatis的resultType写的依然是集合中的对象的类型名称,例如:<select id="getAllUsers" resultType="com.queen.mybatis.bean.User"> select id, loginId, userName, role, note from t_user<...原创 2018-06-10 07:29:37 · 8649 阅读 · 0 评论 -
老司机学习MyBatis之如何通过select返回Map
一、案例当要查询的结果是一个Map的时候,这里分为两种情况:①返回单条记录<select id="getUserByIdReturnMap" resultType="map"> select id, loginId, userName, role, note from t_user where id=#{id}</select>注意:此时的result...原创 2018-06-10 07:45:39 · 6729 阅读 · 0 评论 -
老司机学习MyBatis之如何使用association解决一对一关联查询
一、前言这一节,我们将学习一下如何通过MyBatis提供的association关键字来实现关联查询,主要是实现一对一关联查询。有两种实现方式,分别是嵌套查询和分段查询。二、案例完整的工程目录如下:在MySQL数据库新建两张数据库表t_user和t_role,并插入若干条数据CREATE TABLE t_user ( id int(10) NOT NULL AUTO_INCREMENT, ...原创 2018-06-10 08:12:58 · 806 阅读 · 0 评论 -
MyBatis运行原理SQLSessionFactory的初始化
一、前言在前面的章节中,我们简单的介绍了一下MyBatis是如何配置使用的,为了更深切的体会到MyBatis的精髓,这一节我们将通过代码简单的看一看MyBatis的源码,分析一下MyBatis的执行流程二、案例修改MyBatisTest文件在32行处,打上断点,运行,方法进入,读取全局配置文件,通过文件流的形式进入文件流的源码就不看了,直接到new SqlSession...原创 2018-07-23 07:01:50 · 2038 阅读 · 0 评论