MyBatis简介

什么是MyBatis

What is MyBatis?

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.

这是来自官网的简介

MyBatis是什么?

MyBatis是一个一流的持久性框架,支持定制SQL、存储过程和高级映射。 -- mybatis是什么

MyBatis消除了几乎所有的JDBC代码和手动设置参数以及检索结果。--mybatis的优势

MyBatis可以使用简单的XML或注释来配置和映射原语、映射接口和Java pojo(普通的旧Java对象)到数据库记录。--mybatis是怎么操作的

 

传统JDBC操作

public static Connection getConnection() {
    Connection connection = null;
    try {
        Class.forName("数据库驱动");
        String url = "数据库路径";
        String user = "用户名";
        String password = "密码";
        connection = DriverManager.getConnection(url, user, password);
    } catch (Exception e) {
        e.printStackTrace();
        }
    return connection;
}

过程大致分为如下几步:(执行sql和获取结果集代码就不贴了)

1.使用JDBC编程需要,连接数据库,注册驱动和数据库信息;

2.操作Connection,打开Statement对象;

3.通过Statement执行SQL,返回结果到ResultSet对象;

4.使用ResultSet读取数据,然后通过代码转化为具体对象;

5.关闭数据库相关资源。

 

不难看出,使用传统JDBC方式存在一些弊端

1.工作量相对较大,需要先连接,处理JDBC底层事务,处理数据类型,还需要操作Connection对象、Statement对象和ResultSet对象去拿到数据,并准确关闭他们;

2.我们要对JDBC编程可能产生的异常进行捕获处理并正确关闭资源

对于一条SQL就如此复杂,更何况复杂的应用

 

MyBatis编程

MyBatis需要手动匹配提供对象、SQL和映射关系

 

但是MyBatis具有自动映射功能。换句话说,在注意一些规则的基础上,MyBatis可以给我们完成自动映射,无需再写任何的映射规则,这大大提高了开发效率和灵活性,

而且MyBatis提供了动态SQL,也可以去优化SQL,通过配置决定你的SQL映射规则,也能支持存储过程,所以对于一些复杂的和需要优化性能SQL的查询,MyBatis更加方便。。

 

MyBatis的使用

首先是数据库及其他的基础配置

<dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
</dataSource>

这些属性将被用来创建SqlSessionFactory

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
 // ... or ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment,props);

 

这些是Mybtias的基础配置文件;其次就是一个映射文件

<mapper namespace="cn.yuan.demo.dao.AdminDao">
    <select id="getAdmin" resultType="Admin"parameterType="Admin">
        SELECT
        user_id,username,PASSWORD,salt,email,mobile,STATUS,dept_id,create_time
        FROM
        sys_user
        WHERE
        user_id = ${user_id}
    </select>
</mapper>

namespace定义了mapper接口,

sql的id定义了接口中的方法名,

 

最后为了使用MyBatis,我们还需要建立SqlSessionFactory,一般都是交由spring去建立,一般没有去手动建立

public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    public static SqlSessionFactory getSqlSessionFactory(){
        InputStream inputStream = null;
        if(sqlSessionFactory == null){
            try {
                String resurse = "mybatis-config.xml";
                inputStream = Resources.getResourceAsStream(resurse);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (Exception e) {
                e.printStackTrace();
               }
        }
    return sqlSessionFactory;
    }
}

//调用SqlSessionFactory

SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
Mapper mapper = sqlSession.getMapper(Mapper.class);

然后通过SqlSessionFactory创建SqlSession 再通过SqlSession来获得接口的实现

以上就是单独使用MyBatis的简单过程

 

什么时候使用MyBatis

没有完美的框架,只有最适用的。。。

 

同样的ORM框架还Hibernate,在这里就不详细讲解了,Hibernate的功能很强大,编程简单,而且需要程序员提供的映射关系,现在可以直接使用IDE工具来生成,无需编写SQL,在这一点上就开发效率而言是优于MyBatis的,此外,他还提供了缓存,日志,级联等功能;

但是Hibernate缺陷也很明显,就是复杂SQL,数据系统权限管理,根据条件变化的SQL,使用存储过程等场景使用Hibernate就十分不便;

而且Hibernate封装了组建SQL的过程,使性能难以通过SQL来优化

也就注定了Hibernate只适用于场景不太复杂,性能要求不太苛刻的时候使用。

 

如果你需要一个灵活的、可以动态生成映射关系,那么MyBatis确实是一个最好的选择。

MyBatis几乎可以代替JDBC,拥有动态列名,动态表名,存储过程的支持,同时提供简易的缓存(吐槽一下,MyBatis的缓存确实很尴尬)、日志、级联;

MyBatis具有高度灵活,可优化,易维护等特点;

但是它的缺陷是需要你提供映射规则和SQL,所以在开发工作量上比Hibernate稍大一些。

 

需要根据时间情况去选择框架

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值