Mybatis系列详解(一) mybatis入门

481 阅读6分钟

学习了hibernate这个持久层框架之后,在来学习Mybatis简直是无压力,因为Mybatis入门门栏很低,如果学习过了hibernate的话,对于Mybatis的学习很简单了,如果没学习过hibernate直接学习Mybatis也没关系,也很好理解。

写Mybatis这一章节博客,大致分为这样一种思路 

mybatis入门 --> 全局配置文件和映射文件详解 --> 高级映射(一对一,一对多,多对多) -->延迟加载机制 -->一级缓存,二级缓存(整合ehcache) --> spring整合mybatis --> 逆向工程

如果你想直接查看mybatis的标准helloworld,那么跳过这章,看第二章。

一、Mybatis的简介

mybatis封装了jdbc的持久层框架,前身为ibatis,在配置文件中编写sql,是不完全orm映射框架。

查看百度百科的介绍

            

1、支持普通sql查询

2、高级映射

3、存储过程

4、消除了几乎所有jdbc代码和参数的手工设置以及结果集的检索,等等特点,都会讲解到,今天先认识一下为什么说mybatis消除了所有jdbc代码和参数的设置,通过普通的jdbc有哪些不足,从而认识到mybatis的好处。

二、分析jdbc的问题

              

View Code

这种方式的缺陷

1、创建连接存在硬编码

2、执行statement时存在硬编码

3、频繁的开闭数据库连接,会影响数据库的性能。

现在就对这个所产生的问题与使用mybatis进行对比。

三、初级的mybatis

跟hibernate一样,也是需要拥有两个配置文件,

全局配置文件 和 映射文件,在编写这两个映射文件之前,必须创建mybatis环境(jar包等)

创建java工程

      3.1、jar包

          mysql(1)

            

          Mybatis(1个核心包+9个依赖包)

              

总共11个jar

                 

3.2、初始化数据库脚本

暂时只需要一张表 id是自增的,为主键

                

3.3、添加log4j.properties

                

                

该内容可以在mybatis的jar包中找到

                

View Code

3.4、全局配置文件

建议使用sqlMapConfig.xml,内容如下

            

此次的配置

            

View Code

3.5、映射文件和操作

User.xml 暂时这样取。

User.xml

该映射文件是为了解决jdbc中statement的硬编码的问题,所以,在此映射文件中,只需要指定输入参数类型,返回结果参数类型,sql语句等就差不多了,也就是将原本jdbc所遇到的硬编码问题全部是使用xml配置文件来替代,有什么需要就修改配置文件即可,现在来看看该映射文件是如何编写的。

通过增删改查这四个操作来讲解。

3.6.1、查询 按id查询出user对象 注意看下面的注释

                

View Code

操作

              

View Code

3.6.2、查询, 模糊查询,对username字段进行模糊查询

user.xml映射文件

                

操作

                

3.6.3、增加User, insert

user.xml,insert操作,对主键id有几种不同的处理方式,具体看下图的解释

                    

操作

                  

3.6.4、删除 delete

映射文件

                    

操作

                      

3.6.5、更新 update

映射文件

                      

操作

                          

小总结:编写了最基础的全局配置文件和映射文件。

全局配置文件:连接数据库所需要的帐号密码等属性,事务等操作

映射文件:通过对比原始jdbc连接数据库,其实mybatis中的映射文件就是对statement的硬编码进行改进,我们配置的都市statement需要的东西

sql语句、输入参数类型代替sql语句中的占位符,输出参数类型表示输出结果,都可以对应着statement的操作

parameterType:指定输入参数的java类型,可以填写别名或Java类的全限定名。别名的用法在详细讲解全局配置文件的时候会讲解到,在那边可以配置

resultType:指定输出结果的java类型,可以填写别名或Java类的全限定名。

#{}和${}的用法

#{}:相当于预处理中的占位符?

#{}里面的参数表示接收java输入参数的名称

#{}可以接受HashMap、简单类型、POJO类型的参数

简单类型:#{}里面可以是value,可以是任意值

POJO类型的参数:必须是POJO中的属性名

hashmap:key值名                        

${}:相当于拼接SQL串,对传入的值不做任何解释的原样输出。

${}会引起SQL注入,所以要谨慎使用。

${}可以接受HashMap、简单类型、POJO类型的参数。

当接受简单类型的参数时,${}里面只能是value。

sqlSession操作时selectOne和selectList  

selectOne:只能查询0或1条记录,大于1条记录的话,会报错   

                          

selectList:可以查询0或N条记录

对于增删改操作,切记需要commmit操作才能够生效。

四、开发dao的方式

上面我们就单纯测试了使用mybatis对数据库的增删改查操作,在开发中,我们都是开发dao接口和dao实现类,那么就在dao实现类中调用sqlsession的方法对数据库的增删改差操作即可。

4.1、dao接口

            

4.2、daoImpl 实现类

              

4.3、测试

              

小总结:

这样开发有一个不好的地方,就是不能够直接使用dao接口中的方法,而是使用的sqlSession中的方法,这样让人不能一目了然,所以我们在开发中都不使用这种方式进行开发,而是使用Mapper代理的方式,什么意思呢?接下来讲讲。

五、Mapper代理开发的方式

Mapper代理开发方式就是开发mapper接口(相当于dao接口)

1、mapper接口的全限定名要和mapper映射文件的namespace一致

2、mapper接口的方法名称要和mapper映射文件的statement的id一致

3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType一致

4、mapper接口的方法返回值类型要和 mapper映射文件的statement的resultType一致

这样直接看肯定不好理解,所以直接上代码。

三样东西,mapper接口,两个配置文件,一个全局配置文件,一个映射文件,但是这个映射文件就有要求了,除了上面所说的四点之外,另外一点也最好遵循,这里用不到,但是后面会讲解为什么会这样使用,就是mapper接口的名称要和映射文件的名称相同,

mapper接口,UserMapper.java

                  

映射文件,UserMapper.xml

                               

全局配置文件。sqlMapConfig.xml

其他都跟上面一样,重点讲一下这个mappers加载映射文件的问题,为什么需要mapper接口和映射文件同名,并且放入同一目录下

                     

为了方便批量加载映射文件。而使用这种方式,前提条件就是接口和映射文件同名并且放入同一目录下。

测试

                

直接调用方法名即可

六、总结

mybatis的基本用法就是这样,我想大家应该都有点感觉了,就是在映射文件中编写statement,将输入参数和输出结果进行映射,所以说mybatis是不完全映射的框架。懂了基本的用法之后,那么之后就会详细讲解其中的问题,全局配置文件当中的配置,映射文件中的详细配置(高级映射),延迟加载,一级缓存二级缓存等用法。

作者:有故事的老王

原文链接:www.cnblogs.com/whgk/p/6692…

关注作者微信公众号 —《JAVA架构进阶之路》

了解更多java后端架构知识以及最新面试宝典