ORM体验之旅

最近查阅资料学习了两个比较实用的ORM框架,好东西与大家一起分享了。

O/RM的设计:

这是一张描述描述数据库访问的通用组件模型,通过ORM中的数据库访问组件来实现数据库的访问,通过定义统一接口访问数据库,让所有的数据库访问类都默认继承实现这个接口。(ORM的由来,ORM的设计思想由一张图表现的再清楚不过了)

ORM的核心模块:

以上这张图十分形象的给我们展示分层的重要思想,重点是描述了ORM的地位。

优缺点:

任何事物都不可能绝对的完美的,对于ORM也是一样的,上图就描述了它的优缺点。

有了宏观的把我,再来看看例子:Hibernate、Mybatis。这两个框架都是眼下最为流行的O/RM框架:

Hibernate:

对数据库结构提供了较完成的封装,她实现了POJO和数据库之间的映射,以及sql的自动生成和执行。程序员往往只需要定义好POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久化操作,程序员甚至不需要对sql的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的sql并调用JDBC接口加以执行。

Mybatis:

着力点在于POJO与sql之间的影身关系,然后通过映射配置文件,将sql所需的参数,以及返回的结果字段映射到指定的POJO,相对于Hibernate
“O/R”而言,是一种“sql Mapping”的ORM实现。

Mybatis核心代码:

uer.xml:

<mapper namespace="itat.zttc.shop.model.User">
	<insert id="add" parameterType="User">
		insert into t_user (username,password,nickname,type) value
			(#{username},#{password},#{nickname},#{type})
	</insert>
</mapper>

从这里足以可以看出和Hibernate的不同之处了,同样都是在封装,但是Mybatis封装的确是sql语句。而Hibernate封装的确是POJO与实体间的映射关系。

usermapper.java:

public interface UserMapper {
	/**
	 * @param user
	 */
	@Insert("insert into t_user (username,password,nickname,type) value (#{username},#{password},#{nickname},#{type})")
	public void add(User user);
}

这里采用了注解的方式。

  • 方式一:test1.java:

	@Test
	public void testAdd() {
		SqlSession session = null;
		try {
			session = MyBatisUtil.createSession();
			User u = new User();
			u.setNickname("猪八戒");
			u.setPassword("222");
			u.setType(1);
			u.setUsername("bajie");
			session.getMapper(UserMapper.class).add(u);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.rollback();
		} finally {
			MyBatisUtil.closeSession(session);
		}
	}
	
  • 方式二:test2.java:

private static void testAdd() {
		try {
			//1、创建配置文件(mybatis-config.xml)的输入流
			InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
			//2、创建SQLSessionFactory
			SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
			//3、创建SQLSessioin
			SqlSession session = factory.openSession();
			//4、调用mapper文件插入数据(调用之前需要将mapper文件加入到mybatis-config.xml中)
			User u = new User();
			u.setNickname("孙悟空");
			u.setPassword("123");
			u.setType(0);
			u.setUsername("wukong");
			session.insert("itat.zttc.shop.model.User.add", u);
			session.commit();
			session.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
  • 方式三:test3.java:

	@Test
	public void testAdd() {
		SqlSession session = null;
		try {
			session = MyBatisUtil.createSession();
			User u = new User();
			u.setNickname("孙悟空");
			u.setPassword("123");
			u.setType(1);
			u.setUsername("wukong");
			session.insert(User.class.getName()+".add", u);
			session.commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.rollback();
		} finally {
			MyBatisUtil.closeSession(session);
		}
	}

上面的三种方式都是在获取配置文件中封装的sql语句,细心的人可以感受一下这三种方式所体现的抽象思想的不同程度,也可以感受一下抽象给我带来的乐趣。

总结:

要想拉进与面向对象间的距离,我想两个框架是我们不可以忽略的吧。这两个框架以不同的方式,从相同的角度,给我们提供了业务逻辑层与数据库操作层的解耦的很好的实现方式。ORM是一种很好的思想,而Hibernate和Mybatis则做了很好的实现。(文章中的图相当的好,是我借阅的网上的资料)。

时间: 2024-12-29 12:06:34

ORM体验之旅的相关文章

Oracle体验之旅(一)

安装: Oracle的安装在网上有很多的教程,讲解的很详细,这里便不再赘述,仅提供两个链接,或许有帮助:<Oracle安装和简单配置>,<免安装Oracle客户端和PL/SQL> 问题: 在Oracle的体验过程中出现了这样或那样的问题,在这里做一个简单的整理. 问题一: 问题描述: 在DOS窗口中使用sqlplus/nolog命令登陆Oracle,结果报:"sqlplus不是内部或外部命令",如图所示: 问题解决: 计算机→属性→高级→环境变量,在path中添

Linux体验之旅(一)——制作U启,安装rhel-server-6.3

U启制作: 双击UltraISO: 点击文件→打开: 选择rhel-server6.3 点击启动→选择写入硬盘映像 最后选择格式化优盘→写入→完成 注意:启动盘制作完成后一定记得将rhel-server文件手动考一份儿到U启中装机过程: U启制作完成后,我便将U盘插入电脑,重启电脑准备装机,安装F11进入系统,具体步骤如下: 步骤一: 步骤二:选择ok 步骤三:选择us,点击ok 步骤四:选择Hard Drive,点击ok 步骤五:点击ok 步骤六:成功进入到RHEL 6.3安装的安装界面 RH

【Knockout.js 学习体验之旅】(3)模板绑定

本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knockout.js 学习体验之旅](1)ko初体验 [Knockout.js 学习体验之旅](2)花式捆绑 [Knockout.js 学习体验之旅](3)模板绑定 模板引擎 页面是由数据和HTML组件构成的,如何将数据嵌入到HTML组件里面呢?一个比较好的选择是使用模板技术. 回顾下第一篇([Knock

Servlet体验之旅(二)——Session、Cookie

我们知道Session和Cookie都是用于会话跟踪的,只是实现的方式不大一样,那么他们究竟有什么不同呢?下面跟着我脚步来了解一下: Session.Cookie的含义: Session 一种服务器端的技术,在服务器端创建,通常是采用散列表来存储信息,保存的数量可大可小.例如Tomcat的session对象就是采用HashMap存储键值对的. 用于保存每个用户的专用信息.它的生存期是用户持续请求时间加上一段时间. Cookie 一种客户端技术,用于跟踪用户会话的一种方式,当然Session也可以

Windows 10 体验之旅

Window10  内测预览版发布了,前几天一直忙没有时间安装,据说windows 10会开启新变革,有许多酷炫的新功能.周末就迫不及待抓紧时间体验一下Window10 操作系统.预计Windows 10 将于 2015 年 7 月 29 日正式发布. 准备一台机器,现在我用一台虚拟机去安装Windows 10,建议最好用物理机体验,安装完成以后就可以和Cortana (小娜) 美女聊天了! Windows 10 操作系统安装步骤: 1.下载Windows 10 安装介质,在新创建虚拟机硬件配置

阿里云 ECS 免费体验之旅初体验详细记录

朋友申请了一个ecs的云服务体验,然我帮忙去研究下,部署一个web应用程序,下面是操作记录. 1,输入登录进入查看有一个实例 2,看到实例右边有"管理",点击管理进去可以看到实例的详细信息 3,在"管理"界面里面,可以看到"实例详情",比如"实例监控信息"."本实例磁盘"."本实例快照"等. 4,在实例界面右侧,点击"连接管理终端"可以进去终端操作ecs服务器,里面是

IBM Cognos 10.2 最新体验之旅

IBM Cognos Data Manager 数据集市的构建利器 本文详细的介绍了 Cognos 最新版本 10.2 的数据集市构建器 Data Manager 的使用,对于希望系统了解 Cognos Data Manager,以及 IBM 数据集市构建方法,并且掌握 Cognos 最新版本安全性的读者有非常实用的指导意义. 0 评论: 廖 显, IBM 商业智能与绩效管理 资深技术顾问 /业务分析架构师, IBM 关闭 [x] 廖显,目前在 IBM(中国)有限公司软件部负责西区企业业务分析与

记一次前端切图的体验之旅

之前都没有用过ps去切图,然后做成网页,这次有机会体验了一次.其实重点工作在ps的使用上. 工具使用adobe cs6,vscode即可.设计师直接给了用ps设计的psd工程.用ps软件打开后,用里面的裁剪工具,先人工将整张网页裁剪,然后保存成html网页格式. ps软件生成的网页是以table为骨架,然后在表格的单元格里填充裁剪的图片.默认图片是以数字为后缀结尾的,支持使用ps为想要的图片点击时间添加超链接,比如为导航栏的图片添加跳转到其他网页的功能. PS-前端切图教程(切jpg图和切png

Qt5.3.1,的linux平台体验之旅

1. samba安装:http://blog.csdn.net/voice_shen/article/details/7692605 2. 安装run,  sudo chmod 777 filename, 这里是777,不要写错了 3. 支持C++11,在pro文件里,添加CONFIG += c++11 4.  引用库配置 macx { DEFINES += USE_FILE32API INCLUDEPATH += \ /usr/local/include \ /$$PWD/../../exte