博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis入门
阅读量:6001 次
发布时间:2019-06-20

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

hot3.png

  1.什么是Mybatis?  

 1.1、mybatis是数据映射器(数据映射器层 )

1.2、mybatis不是直接把类映射为数据库表,而是把sql语句的参数与结果(即输入与输出)映射为类

 2.Mybatis的作用

2.1、Mybatis是三层架构中的数据持久层框架。

‍‍2.2、Mybatis对sql语句进行了封装和外部化,使sql语句从程序中分离出来(走配置文件)。业务逻辑从数据库中分离出来,应用程序更容易修改和测试,有更好的可移植性。‍‍

 3.Mybatis的使用

Mybaits共有四种操作数据的方式

这里使用Mybatis与Spring结合来进行开发

3.1、通过注入SqlSessionTemplate

首先,通过Spirng配置文件配置SqlSessionFactory和SqlSessionTemplate

      
      
            
            
             
             
           
       

在dao的实现类中注入SqlSessionTemplate,这样就能使用sqlSession对象提供的方法对数据数据库进行操作了

package com.sunsharing.module.dao.impl;import com.sunsharing.module.dao.TempDao;import com.sunsharing.module.model.User;import org.apache.ibatis.session.SqlSession;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.stereotype.Component;import org.springframework.stereotype.Repository;import javax.annotation.Resource;/** * Created by Administrator on 2015/9/23. */@Repositorypublic class TempDaoImpl implements TempDao {    @Resource    private SqlSessionTemplate   sqlSession;    @Override    public User getUser(int id) {        return (User)sqlSession.selectOne("com.sunsharing.module.dao.TempDao.getUser",id);    }

附上sql的配置文件

    
    
        SELECT * FROM user WHERE id=#{id}        
        INSERT INTO user (id,username,password) VALUES (#{id},#{username},#{password})        
        UPDATE user SET password=#{password} WHERE id=#{id}        
        DELETE FROM user WHERE id=#{id}    

3.1、继承SqlSessionDaoSupport

同样是操作sqlSession对象,只是是通过继承的方式获得,这里就不详细说了。

3.2、使用MapperFactoryBean

   
   

定义dao接口

package com.sunsharing.module.dao;import com.sunsharing.module.model.User;/** * Created by panyz on 2015/9/23. */public interface UserDao {    public User getUser(int id);    public void addUser(User user);    public void updateUser(User user);    public void deleteUser(int id);}

配置sql

    
         SELECT * FROM user WHERE id=#{id}         
        INSERT INTO user (id,username,password) VALUES (#{id},#{username},#{password})         
         UPDATE user SET password=#{password} WHERE id=#{id}         
         DELETE FROM user WHERE id=#{id}     

接下来要做什么呢?按照之前获得取qlSession的方法,你可能会想到,接下来应该就是实现dao接口提供实现类了吧。

但是其实我们的工作已经完成了,MapperFactoryBean的出现为了代替手工使用SqlSessionDaoSupport或SqlSessionTemplate编写数据访问对象(DAO)的代码,使用动态代理实现。具体实现其实就是

com.sunsharing.module.dao.UserDao是一个接口,我们创建一个MapperFactoryBean实例,然后注入这个接口和sqlSessionFactory(mybatis中提供的SqlSessionFactory接口,MapperFactoryBean会使用SqlSessionFactory创建SqlSession)这两个属性。之后想使用这个UserDao接口的话,直接通过spring注入这个bean,然后就可以直接使用了,spring内部会创建一个这个接口的动态代理。如此这般,我们就不需要编写实现类了,少写了好多代码,又可以多花点时间陪女朋友了。

但这样还不够,虽然不用自己编写实现类,但是需要为每一个dao接口配置一个MapperFactoryBean,还是有点麻烦,为了更加节省时间陪女票,于是mybatis-spring提供了MapperScannerConfigurer这个类,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。

MapperScannerConfigurer会扫描com.sunsharing.module.dao下所有的接口,为其创建动态代理。

 4.Mybatis与Hibernate对比

4.1、开发对比

学习成本:

Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。

开发社区:

Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快。

开发工作量:

Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

4.2、调优对比

sql优化:

Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段,更重要的是,sql写在配置文件中,后期可以请专业dba来优化。

扩展性:

Hibernate与具体数据库的关联只需在XML文件中配置数据库方言即可,所有的HQL语句与具体使用的数据库无关,移植性很好。MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。

5.Mybatis与Hibernate总结

5.1、Hibernate

优点:Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。 

缺点:Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。   

5.1、Mybatis

优点:Mybatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

缺点:Mybatis的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

转载于:https://my.oschina.net/u/2474041/blog/511743

你可能感兴趣的文章
OAF_OAF控件系列1 - Region Type汇总(概念)
查看>>
SPSite, SPWeb Dispose and Class Design Partter
查看>>
品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
查看>>
alter table添加表约束
查看>>
C# 模拟提交 Form表单的数据
查看>>
shell脚本加密
查看>>
java二维数组求每行最大值,每列最小值,及输出数组主对角线上的元素
查看>>
java代码包装类----------Integer
查看>>
python(56):正则表达式积累
查看>>
发送短信验证码-node+阿里云短信
查看>>
04-爬取单个英雄联盟英雄的符文图片
查看>>
《人员管理》读书笔记
查看>>
判断一棵二叉树是否为二叉搜索树
查看>>
Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题...
查看>>
悟透JavaScript
查看>>
大连东软集团实践报告
查看>>
"蓝桥杯“基础练习:数列特征
查看>>
证明积累
查看>>
233 Matrix
查看>>
深入学习jQuery自定义插件
查看>>