MyBatis——简单例子
MyBatis是什么?它和hibernate的区别有哪些?
来看下百度百科给的解释
目前,Java 的持久层框架产品有许多,常见的有 Hibernate 和 MyBatis。
Hibernate 和 MyBatis 的区别
1)sql 优化方面
Hibernate 不需要编写大量的 SQL,就可以完全映射,提供了日志、缓存、级联(级联比 MyBatis 强大)等特性,此外还提供 HQL(Hibernate Query Language)对 POJO 进行操作。但会多消耗性能。
MyBatis 手动编写 SQL,支持动态 SQL、处理列表、动态生成表名、支持存储过程。工作量相对大些。
2)开发方面
MyBatis 是一个半自动映射的框架,因为 MyBatis 需要手动匹配 POJO、SQL 和映射关系。
Hibernate 是一个全表映射的框架,只需提供 POJO 和映射关系即可。
3)Hibernate 优势
Hibernate 的 DAO 层开发比 MyBatis 简单,Mybatis 需要维护 SQL 和结果映射。
Hibernate 对对象的维护和缓存要比 MyBatis 好,对增删改查的对象的维护要方便。
Hibernate 数据库移植性很好,MyBatis 的数据库移植性不好,不同的数据库需要写不同 SQL。
Hibernate 有更好的二级缓存机制,可以使用第三方缓存。MyBatis 本身提供的缓存机制不佳。
4)Mybatis优势
MyBatis 可以进行更为细致的 SQL 优化,可以减少查询字段。
MyBatis 容易掌握,而 Hibernate 门槛较高。
总的来说,MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。
所以对于性能要求不太苛刻的系统,比如管理系统、ERP 等推荐使用 Hibernate,而对于性能要求高、响应快、灵活的系统则推荐使用 MyBatis。
上述原文链接:C语言中文网 http://c.biancheng.net/view/4302.html
来看下MyBatis的工作原理
系统学习MyBatis之前,先用一个简单的例子入手
开发环境:IDEA 创建Maven工程项目
创建数据库造表
CREATE DATABASE mybatis; USE mybatis; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `uid` tinyint(2) NOT NULL, `uname` varchar(20) DEFAULT NULL, `usex` varchar(10) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建Maven工程,导入坐标

创建持久化类
/* 持久化类,对应数据库中user表 */ public class MyUser implements Serializable { private Integer uid; private String uname; private String usex; public Integer getUid() { return uid; } public void setUid(Integer uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String getUsex() { return usex; } public void setUsex(String usex) { this.usex = usex; } @Override public String toString() { return "MyUser{" + "uid=" + uid + ", uname='" + uname + '\'' + ", usex='" + usex + '\'' + '}'; } }
创建映射文件
创建 MyBatis 的配置文件
创建测试类
/* 测试类 */ public class MyBatisTest { public static void main(String[] args) { try{ // 读取配置文件 mybatis-config.xml InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); // 根据配置文件构建SqlSessionFactory SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); // 通过 SqlSessionFactory 创建 SqlSession SqlSession ss = ssf.openSession(); // SqlSession执行映射文件中定义的SQL,并返回映射结果 /* * com.mybatis.mapper.UserMapper.selectUserById 为 UserMapper.xml * 中的命名空间+select 的 id */ // 查询一个用户 MyUser mu = ss.selectOne( "UserMapper.selectUserById", 1); System.out.println(mu); // 添加一个用户 MyUser addmu = new MyUser(); addmu.setUname("陈恒"); addmu.setUsex("男"); ss.insert("UserMapper.addUser", addmu); // 修改一个用户 MyUser updatemu = new MyUser(); updatemu.setUid(1); updatemu.setUname("张三"); updatemu.setUsex("女"); ss.update("UserMapper.updateUser", updatemu); // 删除一个用户 ss.delete("UserMapper.deleteUser", 3); // 查询所有用户 List<MyUser> listMu = ss .selectList("UserMapper.selectAllUser"); for (MyUser myUser : listMu) { System.out.println(myUser); } // 提交事务 ss.commit(); // 关闭 SqlSession ss.close(); }catch(IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
下面我们分析一下上述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 /><!-- 属性 --> <settings /><!-- 设置 --> <typeAliases /><!-- 类型命名 --> <typeHandlers /><!-- 类型处理器 --> <objectFactory /><!-- 对象工厂 --> <plugins /><!-- 插件 --> <environments><!-- 配置环境 --> <environment><!-- 环境变量 --> <transactionManager /><!-- 事务管理器 --> <dataSource /><!-- 数据源 --> </environment> </environments> <databaseIdProvider /><!-- 数据库厂商标识 --> <mappers /><!-- 映射器 --> </configuration>
**细节:配置文件中各项内容不可颠倒,否则会出异常。**

浙公网安备 33010602011771号