ORM体验之旅
来源:互联网 发布:淘宝美工简历怎么写 编辑:程序博客网 时间:2024/05/18 03:28
最近查阅资料学习了两个比较实用的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:
@Testpublic 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、创建SQLSessionFactorySqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//3、创建SQLSessioinSqlSession 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:
@Testpublic 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则做了很好的实现。(文章中的图相当的好,是我借阅的网上的资料)。
- ORM体验之旅
- 体验Android ORM之DBFlow
- ORM偏爱-ORM之伤?
- ORM进阶之 ORM简介
- ORM进阶之 ORM简介
- window7体验之旅
- SQL2012体验之旅
- Selenium-----体验之旅
- ORM之硬伤
- Galbanum 之Orm(一)
- Galbanum之Orm(二)
- Galbanum之Orm(三)
- Galbanum 之Orm(四)
- Hibernate 之 ORM
- ORM之硬伤
- 【转载】ORM之硬伤
- spring之orm组件
- ORM之硬伤
- 如何更改Win8,8.1中文版到英文版,亲测!
- nyoj韩信点兵
- [菜鸟学爪哇]Day 6
- pb数据窗口类型
- 程序员修炼之路-(2)线性表(上):数组与链表
- ORM体验之旅
- SSH与Telnet区别
- 九宫格的实现算法
- 考新郎的C语言实现
- Mac系统终端命令行不执行命令 总出现command not found解决方法
- GDB
- instanceof的用法
- HDU 3473 Minimum Sum (划分树)
- storyboard中exit用发,返回原来页面