是如今不少公司都选择使用的一个ORM(Object Relational Mapping)框架,因此是值得了解和学习一番的。程序员
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 能够对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(来自官方文档)面试
解释下上面这段话:spring
1.支持定制话SQL说明,使用mybatis程序员能够本身写sql语句,能够更好的优化SQL语句,相对Hibernate对sql的优化更方便.sql
2. 支持存储过程,就是在mybatis配置文件中进行了配置,在Java中就能够很方便的调用存储过程,以下配置,在Java中调用这个statement的id就能够调用到配置中的存储过程:数据库
<insert id="CALL_INSERT_T_USER" parameterMap="insertParamterMap" statementType="CALLABLE"> {call test.adduser(?, ?, ?, ?, ?)} </insert>
3. 高级映射就是相应的输入输出映射.设计模式
4. 避免JDBC的全部手动操做,即设置好对应的输入输出参数,就会返回相对应的设定对象 ; 而且框架处理了链接池,以及statement,结果集的的关闭.mybatis
5. 对配置和元素map使用简单的xml配置,下面举个例子:app
a. 配置的statement框架
<insert id="INSERT_TABLE_T_USER"> insert into t_user(name,age,sex,address) values(#{name},#{age},#{sex},#{address}) </insert>
b. Java中的调用代码:工具
@Test public void testMapParamert() { Map<String, String> param = new HashMap<String, String>(); param.put("name", "zhangsan"); param.put("age", "18"); param.put("sex", "male"); param.put("address", "sichuanchengdu"); param.put("phone", "110"); SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.insert("INSERT_TABLE_T_USER", param); sqlSession.commit(); }
这样直接设置参数到map集合中,map中的K值和配置文件中写的参数名相对应,就能够将相应的值设置进去; (我在工做中用的ibatis是这样用的 , 回来试了下mybatis也是支持的,不过通常其余公司不这样使用).
市面上经常使用的ORM框架,有Entity EJB、Hibernate、IBATIS、TopLink、OJB 还有 Spring中的JdbcTemplate 等, 据我见过或者面试过的公司中基本都是Hibernate和mybatis,遇到过两家公司会使用的是spring的JdbcTemplate.
我在工做学习中主要用到和了解过的就orm框架是Hibernate和mybatis,如今简单的对比下二者:
mybatis:专一是sql自己,须要程序员本身编写sql语句,sql修改、优化比较方便。
是一个不彻底 的ORM框架,虽然程序员本身写sql,mybatis 也能够实现映射(输入映射、输出映射)。
应用场景:适用与需求变化较多的项目,好比:互联网项目。
hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不须要程序写sql,sql语句自动生成了。
对sql语句进行优化、修改比较困难的。
应用场景:适用与需求变化很少的中小型项目,好比:后台管理系统,erp、orm、oa等. (来自某培训单位老师)
spring的JdbcTemplate: 使用模板设计模式设计的一套操做数据的库的Jdbc工具类 , 由程序员来写sql以及输入输出参数进行映射,封装了获取数据库链接关闭资源等功能,之前大概看过如今都忘记了,后续有时间进行补充.
上面大概介绍了下mybatis是什么以及一些相关的东西,中间还夹杂了一些代码,若是没了解过mybatis的能够跳过其中的代码 , 学习了解过mybatis在来看上述代码(由于只作简单介绍因此代码中省略了一些次要的东西) .