(原创)mybatis学习一,夯实基础
一,what?(是什么)
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的用于配置和原始映射XML或注解,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二,why?(为什么)
- 另外一个持久层框架式hibernate,这个框架和hibernate框架有什么不一样的么?我在网上查找资料后,得出主要一下几点:
- hibernate是将jdbc进一步封装,而mybatis是原生态的jdbc,从这一点来说,mybatis的效率会更高一点
- mybaits相对来说上手容易一些
- 最重要的区别是什么呢,hibernate在查询的时候眉毛胡子一把抓,不管是不是需要的,都拿来,这对数据量很大的来说,可能会影响性能,而mybaits是取其需要的即可
上面的对比还是比较浅薄的,更深层次的对比详见下面的知乎的连接连接回答 MyBatis和Hibernate相比,优势在哪里?
三,how?(怎么做)
下面来介绍最最重要的一部分,就是怎么用。这个有一个教程写的很好,我在这就不在重复了,直接看连接
四,关于mybatisutils.class的联想,为mybatis和spring,springMVC融合做准备
对于mybatis来说,主要是获取SqlSessionFactory,然后来获取SqlSession,请看下面代码:
package org.app.test; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class mybatisUtils { private static SqlSessionFactory ssf = null; static { String confpath = "conf.xml"; InputStream inputs; // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) InputStream is = mybatisUtils.class.getClassLoader() .getResourceAsStream(confpath); // inputs = Resources.getResourceAsStream(confpath); ssf = new SqlSessionFactoryBuilder().build(is); } public static SqlSession getSqlSession() { return ssf.openSession(); } public static SqlSession getSqlSession(boolean autocommit){ return ssf.openSession(autocommit); } }
附件:config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="db.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="${name}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/mapping/userMapper.xml" /> </mappers> </configuration>
上面这段代码就是mybaits根据config文件来获取相关的数据库配置信息,那么有没有这样的一种类,可以接管mybatisutils.class这个类的功能,也就是说,如果接管了这个功能,并且能够生成SqlSession,那么是不是就可以融入到这个mybatis框架中了?
对,有这种类,这就是后来的spring和mybatis的融合,spring框架接管mybatisutils.class这样的类,而Srping框架中类名不叫mybatisutils.class,而是功能更加强大的SqlSessionDaoSupport类。
下一节,我们来学习:Spring和mybatis的融合