Mybatis

是现在很多公司都选择使用的一个ORM(Object Relational Mapping)框架,所以是值得了解和学习一番的。

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。(来自官方文档)

解释下上面这段话:

1.支持定制话SQL说明,使用mybatis程序员可以自己写sql语句,可以更好的优化SQL语句,相对Hibernate对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,结果集的的关闭.

5. 对配置和元素map使用简单的xml配置,下面举个例子:

  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框架

市面上常用的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在来看上述代码(因为只做简单介绍所以代码中省略了一些次要的东西) .

最新文章

  1. Java控制Appium server start/stop
  2. ES5基础之正则表达式02:范围类、预定义类和边界字符
  3. 已经为类型参数“Chart”指定了 constraint 子句。必须在单个 where 子句中指定类型参数的所有约束
  4. heX——基于 HTML5 和 Node.JS 开发桌面应用
  5. [译]关于.NET Core1.1的通告
  6. frequentism-and-bayesianism-chs-iv
  7. [原]android不支持命名的semaphore
  8. VM虚拟机下在LINUX上安装ORACLE 11G单实例数据库
  9. ORACLE WIN7安装过程截图
  10. xml中的特殊符号
  11. Google谷歌推出goo.gl缩短网址服务 - Blog透视镜
  12. IE input X 去掉文本框的叉叉和密码输入框的眼睛图标
  13. HTTP协议(超文本传输协议)
  14. hdu1160dp
  15. class_copyIvarList方法获取实例变量问题引发的思考
  16. [Android] Android 手机下 仿 微信 客户端 界面 -- 微聊
  17. chrony 时间同步服务器
  18. jsp中的el表达式没有解析
  19. admin 后台
  20. SIGALRM信号和SIGCHID信号

热门文章

  1. 拓扑排序&amp;关键路径
  2. 【转】Swig 使用指南
  3. jquery获取iframe页面的元素
  4. c++ 中 pair 的 使用方法
  5. 用Redis轻松实现秒杀系统
  6. Scala入门系列(九):函数式编程
  7. 使用Dagger2做静态注入, 对比Guice.
  8. Codeforces Round #257 (Div. 2) A. Jzzhu and Children(简单题)
  9. 中小企业为什么要上HR系统
  10. OSChinaclient源代码学习(1)--Android与Server的交互