Hibernate 与 ibatis区别
iBATIS和Hibernate的区别
一、iBATIS概述iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin(克林顿)在2001年发起的开放源代码项目。
最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
相对Hibernate和Apache OJB(Object Relational Bridge-OJB是基于XML 的对象/关系映射工具.OJB提供一些高级的特性如:对象缓存,延迟加载,利用事务隔离级别的结构进行分布式管理,支持悲观与乐观锁.OJB还提供了一个灵活的配置与插件机制以便可以扩展加入自己的功能)等“一站式”ORM(Obeject/Relation Mapping对象关系映射)解决方案而言,ibatis 是一种“半自动化”的ORM实现。
二、Hibernate概述Hibernate是一个基于JDBC的开源的持久化框架,是一个优秀的ORM实现(可以自动的根据xml完成对象关系映射,并持久化到数据库),它很大程度上简化了数据访问对象层(持久层)的编码工作,Hibernate对JDBC访问数据库的代码做了深度封装,大大简化了数据访问层繁琐的重复性代码。
在分层结构中Hibernate处于持久层,封装对数据库的访问细节,使业务逻辑层更专注于实现业务逻辑.hibernate优点:1、封装了jdbc,简化了很多重复性代码。
2、简化了DAO层编码工作,使开发更对象化了。
3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
4、hibernate使用Java反射机制,而不是字节码增强程序来支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。
所以说它是一个轻量级框架。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
三、iBATIS和Hibernate的区别相同点:1、屏蔽JDBC API的底层访问细节,使我们不用与JDBC API打交道,就可以访问数据二者都是比较优秀的开源产品;不同点:2、ibatis是在结果集与实体类之间进行映射,hibernate是在数据库与实体类之间进行映射。
hibernate与mybatis异同与比较(涵盖网上各个版本清晰明了)
hibernate与mybatis异同与比较(涵盖网上各个版本,清晰明了)一、序言最近一直用mybatis做开发,以前用过hibernate,能感受到一些它们在使用上的区别,不过总想抽出时间来好好比较比较弄弄清楚它们各自的优劣,以便更好进行选择和深入的了解。
网上也看了很多资料,结合自己的使用体会,粗率地概括和总结了一下,以供大家参考。
二、具体运用上的不同1、所需的jar包Mybatis:只需要3个(mybatis-3.1.1.jar,mybatis-3.1.1-javadoc.jar,mybatis-3.1.1-sources.jar)Hibernate:根据功能不同大概需要十几个2、映射关系Mybatis:实体类与sql之间的映射Hibernate:实体类与数据库之间隐射3、配置文件Student:属性:int id,String name,String password;方法配置:getStudentByName;//通过name查找getStudentById //通过id查找insertStudent //添加Student updateStudent //更改Student deleteStudent //通过id删除Student deleteStudentById //通过name伤处Student selectStudentmohu //通过name模糊查询Mybatis:总配置文件:mybatisConfig.xml<configuration><typeAliases><typeAlias alias="Student"type="com.niit.model.Student"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver"value="com.MySQL.jdbc.Driver"/><property name="url"value="jdbc:mysql://127.0.0.1:3306/mybatis"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapperresource="com/niit/model/StudentMap.xml"/></mappers></configuration>l 实体类映射文件:StudentMap.xml(一个或多个)<mapper namespace="com.niit.model.StudentMap"> <select id="getStudentByName" resultType="Student" parameterType="string">select * from student where name=#{name}</select><select id="getStudentById" resultType="Student" parameterType="int">select * from student where id=#{id}</select><insert id="insertStudent" parameterType="Student"> insert into student(id, name, password) value(#{id},#{name}, #{password})</insert><update id="updateStudent"parameterType="Student">update student set name=#{name}, password=#{password} where id=#{id}</update><delete id="deleteStudent" parameterType="String"> delete from student where name=#{name}</delete><delete id="deleteStudentById" parameterType="int"> delete from student where id=#{id}</delete><select id="selectStudentmohu" parameterType="String" resultType="Student">select * from student where name like "%"#{name}"%"</select></mapper>Hibernate:l 总配置文件:hibernate.cfg.xml<hibernate-configuration><session-factory><propertyname="ername">root</property><propertyname="connection.url">jdbc:mysql://127.0.0.1:3306/sa mple</property><propertyname="dialect">org.hibernate.dialect.MySQLDialect</property><propertyname="connection.password">123</property><propertyname="connection.driver_class">com.mysql.jdbc.Driver </property><propertyname="hibernate.show_sql">True</property><mapping resource="com/niit/model/Student.hbm.xml" /></session-factory></hibernate-configuration>l 实体类配置文件:Student.hbm.xml(一个或多个)<hibernate-mapping package="com.niit.model."><class name="Student" table="student"><id name="id" column="id"type="int"><generator class="identity"/> </id><property name="name"type="ng.String"><column name="name" length="20"not-null="true" /></property><property name="password"type="ng.String"><column name="password" length="20"not-null="true" /></property></class></hibernate-mapping>4、基本用法(增删改查模糊)Mybatis:@Testl select by namepublic void test() throws IOException{String resource = "mybatisConfig.xml";Reader reader =Resources.getResourceAsReader(resource); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);SqlSession session = sessionFactory.openSession();session.selectOne("com.niit.model.StudentMap.getStuden tByName","b");}l select by idsession.selectOne("com.niit.model.StudentMap.getStuden tById",2);l insertsession.insert("com.niit.model.StudentMap.insertStudent", student);l //updatesession.insert("com.niit.model.StudentMap.updateStudent ", student);l //delete by namesession.insert("com.niit.model.StudentMap.deleteStudent", "wl");l //delete by idsession.insert("com.niit.model.StudentMap.deleteStudent ById", 3);l //select muhu(模糊查询)session.selectList("com.niit.model.StudentMap.selectStud entmohu", "b");Hibernate:l //select by idConfiguration cfg = new Configuration().configure();SessionFactory sf = cfg.buildSessionFactory();Session session = sf.openSession();Session.get(Student.class,id); l //select by name session.createQuery("from Student as s where =’a’").list();l //insertsession.save(Student);l //updateSession.update(Student) ;l //delete by nameSession.delete (Student) ;l //delete by idUser user = new User();user.setId(1);session.delete(user);l //select muhu(模糊查询)session.createQuery("from Student as s where like '%"+str+"%'").list();5、与Spring的整合Mybatis:配置数据源文件<bean id="dataSource"class="mons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><propertyname="url"value="jdbc:mysql://127.0.0.1:3306/spring?useUnicode=tr ue&characterEncoding=UTF-8></property><property name="username"value="root"></property><property name="password"value="1234"></property><property name="maxActive"value="100"></property><property name="maxIdle"value="30"></property><property name="maxWait"value="500"></property><property name="defaultAutoCommit" value="true"></property></bean>配置sqlsessionfactory(将数据源注入)<bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><property name="configLocation"value="classpath:MyBatis-Configuration.xml"></prope rty><property name="dataSource"ref="dataSource" /></bean>在Dao实现层中通过spring Ioc 愉快使用SqlSessionFactory <bean id="userDao"class="org.mybatis.spring.mapper.MapperFactoryBean"& gt;<property name="mapperInterface"value="erDao"></property><property name="sqlSessionFactory"ref="sqlSessionFactory"></property></bean>spring整合mybatis需要的jar包Hibernate:配置数据源文件<beanclass="org.springframework.beans.factory.config.Property PlaceholderConfigurer"><property name="locations"><value>classpath:jdbc.properties</value></property></bean><bean id="dataSource" destroy-method="close"class="mons.dbcp.BasicDataSource"> <property name="driverClassName"value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${ername}" /><property name="password" value="${jdbc.password}" /></bean>配置sessionfactory(将数据源注入)<bean id="sf"class="org.springframework.orm.hibernate3.annotation.An notationSessionFactoryBean"><property name="dataSource" ref="dataSource" /> <property name="packagesToScan"><list><value>com.niit.model</value></list></property><property name="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDi alect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean>配置hibernatetemplete(将SessionFactory注入)<bean id="hibernateTemplate"class="org.springframework.orm.hibernate3.HibernateTem plate"><property name="sessionFactory"ref="sf"></property></bean>6、注解支持mybatis:启用注解并注入testMapper1.@Repository("testBaseDAO")2. @Autowiredpublic void setTestMapper(@Qualifier("testMapper") TestMapper testMapper){this.testMapper = testMapper;}@SelectProvider(type = TestSqlProvider.class, method = "getSql")或@Select("select * from ....")(SelectBuilder/SqlBuilder)@InsertProvider(type = TestSqlProvider.class, method = "insertSql")@DeleteProvider(type = TestSqlProvider.class, method = "deleteSql")@Options(flushCache = true, timeout = 20000)@UpdateProvider(type = TestSqlProvider.class, method = "updateSql")@Param("id")@Result(id = true, property = "id", column = "test_id") Hibernate:比较基础不解释三、各种“效果”上的不同(10点)1. Hibernate是全自动ORM框架,而Mybatis是半自动的。
Mybatis与Hibernate区别与常见面试题总结
Mybatis与Hibernate区别与常见⾯试题总结1、什么是Mybatis?(1)Mybatis是⼀个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本⾝,不需要花费精⼒去处理加载驱动、创建连接、创建statement等繁杂的过程。
程序员直接编写原⽣态sql,可以严格控制sql执⾏性能,灵活度⾼。
(2)MyBatis 可以使⽤ XML 或注解来配置和映射原⽣信息,将 POJO映射成数据库中的记录,避免了⼏乎所有的 JDBC 代码和⼿动设置参数以及获取结果集。
(3)通过xml ⽂件或注解的⽅式将要执⾏的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进⾏映射⽣成最终执⾏的sql语句,最后由mybatis框架执⾏sql并将结果映射为java对象并返回。
(从执⾏sql到返回result的过程)。
2、Mybaits的优点:(1)基于SQL语句编程,相当灵活,不会对应⽤程序或者数据库的现有设计造成任何影响,SQL写在XML⾥,解除sql与程序代码的耦合,便于统⼀管理;提供XML标签,⽀持编写动态SQL语句,并可重⽤。
(2)与JDBC相⽐,减少了50%以上的代码量,消除了JDBC⼤量冗余的代码,不需要⼿动开关连接;(3)很好的与各种数据库兼容(因为MyBatis使⽤JDBC来连接数据库,所以只要JDBC⽀持的数据库MyBatis都⽀持)。
(4)能够与Spring很好的集成;(5)提供映射标签,⽀持对象与数据库的ORM字段关系映射;提供对象关系映射标签,⽀持对象关系组件维护。
3、MyBatis框架的缺点:(1)SQL语句的编写⼯作量较⼤,尤其当字段多、关联表多时,对开发⼈员编写SQL语句的功底有⼀定要求。
(2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
4、MyBatis框架适⽤场合:(1)MyBatis专注于SQL本⾝,是⼀个⾜够灵活的DAO层解决⽅案。
阿里巴巴客户经理面试技巧
阿里巴巴面试问题:面试分三个环节,第一是我先自我介绍,谈谈自己的学习工作情况,第二他们会对期间我说的她们感兴趣的话题进行询问,第三是我可以向她们问两个问题。
大约半小时吧,第一轮面试就结束了。
她们告诉我如果有进一步交流的需要的话会在5个工作日内通知我的。
晚上回到住所,大约七点左右吧接到了阿里巴巴的电话,明天下午一点原地方和网站前台组的经理见面。
从自我介绍,到专业背景,接下来是性格,工作经历,爱好,职业规划,对界面组的看法,对阿里巴巴电子商务的看法等等。
认真地学习了阿里巴巴的创业历史,学习了阿里巴巴的企业文化,价值观,远景目标以及选人用人标准等等,第一个问题: 你们两先自我介绍一下。
第二个问题对我:你把他(另一个面试的)介绍给我们.第三个问题: 你觉得自己有什么优点和缺点毕业后的打算你最晚几点可以接受是怎么打算将来的说一下你以前的工作吧?你的工作还挺丰富的吗?很好,你认为你胜任这份工作的优点是什么?你给我个说服我的理由吧?的,谢谢您参加我们的面试,我们会对你的简历做一个评估,如果可以的话会三天内给你通知的,如果不行我们会把你的资料放在我们档案库里以供参考!前两天意外收到一个电话,是阿里杭州公司打来的,问我是否在找工作,说阿里需要招聘一些销售的职位,需要的话,周六可以到他们指定的地方去面试.想着目前的处境,还是决定去面试一下。
其次问我有什么问题需要问的第五是到阿里巴巴你想得到什么?那你能不能说一下你在大学里面的一些学习工作和实践情况?"“你在这些实践中遇到的最大的挫折是什么?你怎么克服的?”)“你平时喜欢看那些方面的书?"“说下你最喜欢的三本文学书?”“平时看报纸吗?看那些?"(“对自己的职业生涯有什么规划吗?”依我的经验我觉得你的素质会在阿里巴巴有比较好的发展,如果将来发展很好的话你还选择自己创业吗?”“能不能讲下你为什么选择阿里巴巴?”)“好的,我的问题问完了,你还有什么要问我的吗?”阿里巴巴:“你好!我是阿里巴巴的***,你的简历我们收到,想就一些问题跟你聊聊,不知道现在是否有时间?"阿里巴巴:“从你的简历可以看到,你的社会实践比较多,从事执行类的工作比较多,那么请你谈谈两件你最值得一说的社会经历"。
Hibernate和MyBatis的区别
Hibern ate简介Hibern ate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
H ibern ate可以应用在任何使用JDB C的场合,既可以在Ja va的客户端程序使用,也可以在Se rvle t/JSP的We b应用中使用,最具革命意义的是,Hibern ate可以在应用EJB的J2E E架构中取代CMP,完成数据持久化的重任。
一、基本功能Hibern ate作为数据持久化的中间件,足以让数据库在业务逻辑层开发中去冬眠。
它通过可扩展标记语言(X ML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。
使整个项目开发分工更加明确,提高了程序开发的效率。
config uration对象:Config urati o n 类负责管理H i b ern ate 的配置信息。
H ibern ate 运行时需要获取一些底层实现的基本信息,其中几个关键属性包括:1.数据库URL2.数据库用户3.数据库用户密码4.数据库JDBC驱动类5.数据库dia lect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。
以上信息一般情况下由h ibern ate.cfg.xml或者h i b ern ate.proper ties 文件来配置,实现与不同数据库的连接。
Sessio n对象:Sessio n是持久层操作的基础,相当于JDB C中的Co nnect ion:实例通过Se ssion Facto ry实例构建:Config urati on config = new Config urati on().config ure();Sessio nFact orysessio nFact ory = config.buildS essio nFact ory();Sessio n sessio n = sessio nFact ory.openSe ssion();之后我们就可以调用Se ssion所提供的s ave、find、flush等方法完成持久层操作。
JavaWeb目前主流比较成熟的框架以及正在兴起的框架
JavaWeb⽬前主流⽐较成熟的框架以及正在兴起的框架成熟的框架介绍根据RebelLabs,也是在线Java⽤户组(虚拟JUG)的媒体盟友所进⾏的调查,2018年最佳Java框架的阵容如下:Hibernate 框架Hibernate 是⼀种ORM框架,全称为 Object-Relative Database-Mapping,在Java对象与关系型数据库之间建⽴某种映射,以实现直接存取Java对象(POJO)。
ORM框架是⼀种不同与MVC的另⼀种思想框架,适⽤范围也与MVC截然不同。
使⽤JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使⽤复杂的SQL语句进⾏读写、关闭连接,获得的数据⼜需要转换或封装后往外传,这是⼀个⾮常烦琐的过程。
这时出现了Hibernate框架,它需要你创建⼀系列的持久化类,每个类的属性都可以简单的看做和⼀张数据库表的属性⼀⼀对应,当然也可以实现关系数据库的各种表件关联的对应。
当我们需要相关操作是,不⽤再关注数据库表。
我们不⽤再去⼀⾏⾏的查询数据库,只需要持久化类就可以完成增删改查的功能。
使我们的软件开发真正⾯向对象,⽽不是⾯向混乱的代码。
我的感受是,使⽤Hibernate⽐JDBC⽅式减少了80%的编程量。
Struts2框架本词条缺少信息栏、名⽚图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!Struts2以WebWork优秀的设计思想为核⼼,吸收了 Struts框架的部分优点,提供了⼀个更加整洁的MVC设计模式实现的Web 应⽤程序框架Struts2以WebWork优秀的设计思想为核⼼,吸收了 Struts框架的部分优点,提供了⼀个更加整洁的MVC设计模式实现的Web 应⽤程序框架。
Struts2引⼊了⼏个新的框架特性:从逻辑中分离出横切关注点的拦截器、减少或者消除配置⽂件、贯穿整个框架的强⼤表达式语⾔、⽀持可变更和可重⽤的基于MVC模式的标签API, Struts2充分利⽤了从其它MVC框架学到的经验和教训,使得 Struts2框架更加清晰灵活。
六大类系统架构图及其简介
各种系统架构图及其简介1.Spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring框架的功能可以用在任何J2EE 服务器中,大多数功能也适用于不受管理的环境。
Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。
这样的对象可以在不同J2EE环境(Web或EJB)、独立应用程序、测试环境之间重用。
组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。
每个模块的功能如下:核心容器:核心容器提供Spring框架的基本功能。
核心容器的主要组件是BeanFactory,它是工厂模式的实现。
BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。
Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中。
所以,可以很容易地使Spring框架管理的任何对象支持AOP。
Spring AOP模块为基于Spring的应用程序中的对象提供了事务管理服务。
通过使用Spring AOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。
异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。
Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。
Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。
Hibernate框架简介
Hibernate框架简介⼀、什么是 Hibernate?Hibernate 是⼀个基于元数据的轻量级的 ORM 框架:1、元数据(Meta Data):data about data(数据的数据),也就是说描述⼀个对象数据,相当于这个对象的上下⽂环境。
2、轻量级:占⽤资源少,没有侵⼊性。
(其实我认为这只是相对⽽⾔,如果和 Ibatis 相⽐,它到成重量级的了)。
3、ORM:(Object Relation Mapping)对象关系数据库的映射这是 Hibernate 框架的重点,也就是说将我们程序中的实体(bean,这⾥也叫 POJO)和数据库中的表进⾏映射。
java 类型和 sql类型映射,⾯向对象设计和关系型数据库设计的映射,从⽽我们只需要将更多的精⼒放到业务中,⽽不是 sql 数据库⽅⾯。
4、POJO:(Plain Ordinary Java Object),⽆格式的普通 java 对象,也就是上边说的实体,和数据库做映射的简单类。
只是在这⾥提出了⼀个新的名词⽽已。
总⽽⾔之,Hibernate 就是将我们的数据库表和程序的 POJO 类进⾏映射,数据的操作进⾏了封装,使我们不⽤把数据库弄得⾮常精通,我们会⾯向对象编程就可以了,这样⼤⼤提⾼了我们的编程效率,⽽且对个⼈的知识要求也降低了。
⼆、Hibernate 基础 ----- 数据库操作在 Hibernate 出现之前,对数据库操作是基于 JDBC,这中间经历了操作 JDBC、封装 JDBC、ORM 三个阶段。
1、操作 JDBC 阶段:本阶段即在调⽤ JDBC 连接数据库的包时,需要⾃⼰进⾏编写的进⾏数据库⽤户登录验证的那段代码。
在这段代码中可以执⾏ SQL 语句进⾏数据查询、插⼊、删除等。
2、封装 JDBC 阶段:由于仅仅只是操作 JDBC,使得在实现不同逻辑功能时,都要重新编写进⾏数据库⽤户登陆验证的那段代码,使得代码重复很严重。
为此,引⼊了 JavaBean的技术,书写⼀个 DBAccess.java 类进⾏数据库⽤户登陆验证和数据库操作,并把其中进⾏数据库操作部分封装成不同的函数,那么实现后续的逻辑功能时只需调⽤这些函数即可实现。
三大框架原理
ooa(object oriented analysis)面向对象分析ood(object oriented design)面向对象设计Oop 面向对象编程Spring javabean的生命周期配置初始化调用销毁Spring1、spring原理2、IoC概念:控制权由对象本身转向容器:由容器根据配置文件区创建实例并创建各个实例之间依赖关系。
spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度。
它的原理是在applicationContext.xml加入bean标记,在bean标记中通过class属性说明具体类名、通过property标签说明该类的属性名、通过constructor-args说明构造子的参数。
其一切都是返射,当通过applicationContext.getBean(―id名称‖)得到一个类实例时,就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。
正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。
spring第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象方法,在调用之前之后提供相关的服务,如事务、安全、日志。
其名词分别是代理、真实对象、装备、关切点、连接点。
2、动态代理:不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的返射得到真实对象的Method,调用装备的invoke方法,将动态代理、Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。
hibernate与ibates优缺
综上: 很多时候我们要在是自己开发框架和选用第三方框架和选用什么样的框架问题上进行综合考虑。考虑的标准当然是项目的当前情况和我们希望达到目的的一个平衡。
利用一些较完全的开发框架和代码生成工具,在前期会较大的提高开发效率,但在后期常常会拖慢进度,并有可能成为以后维护的梦魇。比如torque生成实体类和其对应的sql,虽大幅提高了效率,但修改负担较大。
比较理想的开发方式是使用简单框架结合简单的代码生成工具。框架提供系统的基础服务,并规范开发。框架一方面提供了开发中某一方面的开发基础支持,比如数 据访问层,事务,日志,公用类,异常等。另一方面,也为开发定义了模式,定义了系统的基本轮廓。同时,通过简单的代码生成工具生成部分低级的代码。比如通 过工具从数据库模式生成实体类。这些类生成后我们可以自由修改。
利用一些框架在前期一般会拖慢开发效率。因为我们需要付出学习成本,很多时候,使用框架需要写很多配置文件,在使用不熟时开发速度较慢;同时利用框架往往 使系统代码量增大,比如model1和model2模型,开发效率应该还是model1快,四层的架构肯定比两层的代码量大。 但对于中后期开发和维护将会极大的提高效率。
ibatis只是封装了数据访问层,替我们做了部分的对象关系映射。但我们的代价是必须要写xml配置文件,相对于hibernate我们还要写很多 sql。hibernate通过工具直接从数据库模式生成实体类和基本的配置文件,而且大部分情况下不需要我们写sql,会较大的提升开发效率。但这些也 有很多的局限性,尤其是对环境的要求较高(数据库设计,对象设计,团队的协作等)。
Java笔试题(一)答案
Java笔试题面试岗位:高级中级初级笔试时间:姓名:一、jQuery1、Java如果需要匹配包含文本的元素,用下面哪种来实现?(单选)A、text()B、contains()C、input()D、attr(name)考点:jquery的选择器(B)2、在jquey中,如果想要从DOM中删除所有匹配的元素,下面哪一个是正确的?(单选)A、delete()B、empty()C、remove()D、removeAll()考点:jquery的文档处理(C)3、为每一个指定元素的指定事件(像click)绑定一个事件处理器函数,下面哪个是用来实现该功能的?(单选)A、trigger (type)B、bind(type)C、one(type)D、bind考点:jquery的事件操作(B)4、当一个文本框中的内容被选中时,想要执行指定的方法时,可以使用下面哪个事件来实现?(单选)A、click(fn)B、change(fn)C、select(fn)D、bind(fn)考点:jquery的事件处理(C)5、在jquery中,想让一个元素隐藏,用________实现,显示隐藏的元素用_________实现。
考点:jquery的页面效果(hide(),show())6、在jquery中想要实现通过远程http get请求载入信息功能的是下面的哪一下事件?(单选)A、$.ajax()B、load(url)C、$.get(url)D、$. getScript(url)考点:jquery的ajax (C)7、在一个表单中,如果想要给输入框添加一个输入验证,可以用下面的哪个事件实现?(单选)A、hover(over ,out)B、keypress(fn)C、change()D、change(fn)考点:jquery的事件处理(D)8、如果想在一个指定的元素后添加内容,下面哪个是实现该功能的?(单选)A、append(content)B、appendTo(content)C、insertAfter(content)D、after(content)考点:jquery的文档处理(D)二、Java1、JAVA的基本数据类型有哪些?String 是不是基本数据类型?数值型:——整型:byte(字节型)、short(短整型)、int(整型)、long(长整型)——浮点型:float(单精度浮点数)、double(双精度浮点数)字符型:char布尔类型:boolean String不是基本数据类型,它属于引用数据类型当中的class类型。
谈谈你对hibernate与ibatis的认识!
可以从hibernate以及ibatis各自的特点,优缺点谈起,谈一些自己的认识,在没有特别说服力的情况下,你最好倾向于面试公司所采用的框架IBATIS:iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目,最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例,相对Hibernate 和Apache OJB等“一站式”ORM解决方案而言,ibatis 是一种“半自动化”的ORM实现,iBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度上可以作为ORM的一种补充,程序设计人员应该结合自己的项目的实际情况,来选择使用不同的策略。
iBATIS和Hibernate都做了映射,但iBATIS是把实体类和sql语句之间建立了映射关系,这种策略可以允许开发人员自己来写合适的sql语句,而Hibernate在实体类和数据库之间建立了映射关系,sql对于开发人员是不可见的,对于那些数据量非常大的应用,无法去优化sql语句。
所谓“半自动”,可能理解上有点生涩,纵观目前主流的ORM,无论Hibernate还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO到数据库表的全套映射机制,程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作,程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。
HIBERNATE:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任.Hibernate是一个免费的开源Java包,它使得与关系数据库打交道变得十分轻松,就像您的数据库中包含每天使用的普通Java对象一样,同时不必考虑如何把它们从神秘的数据库表中取出(或放回到数据库表中)IBATIS和HIBERNATE的比较:在系统咨询工作过程中,常常遇到以下情况:1.系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开2.开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就笔者工作所面向的金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定)3.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标,面对这样的需求,再次举起Hibernate 大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC 准备拼死一搏……,说得未免有些凄凉,直接使用JDBC进行数据库操作实际上也是不错的选择,只是拖沓的数据库访问代码,乏味的字段读取操作令人厌烦,“半自动化”的ibatis,却刚好解决了这个问题,这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”,ORM 实现而言,“全自动”ORM 实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行,而ibatis 的着力点,则在于POJO 与SQL之间的映射关系,也就是说,ibatis并不会为程序员在运行期自动生成SQL 执行,具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。
ibatis example用法 -回复
ibatis example用法-回复Ibatis是一个持久化框架,与其他流行的ORM框架(如Hibernate和MyBatis)相似,它简化了Java 程序与数据库之间的交互过程。
本文将深入探讨Ibatis的用法,并以不同主题为基础进行详细讲解。
让我们一起来一步一步地了解Ibatis吧!主题:Ibatis的基本使用一、Ibatis简介1. 什么是Ibatis?Ibatis(现称为Apache Torque),是一个轻量级的持久化框架,主要用于将Java对象映射到关系数据库。
相比于其他ORM框架,Ibatis提供了更细粒度的控制力,使开发者可以直接访问和操作SQL语句。
2. Ibatis的特点是什么?- 灵活性高:Ibatis提供了直接编写SQL语句的能力,可以处理复杂的查询逻辑。
- 易于使用:Ibatis采用简单的XML配置文件,与Java对象映射。
- 性能优越:Ibatis具有高性能的数据访问,缓存查询结果,并支持事务处理。
二、Ibatis的配置与数据映射1. 如何配置Ibatis?Ibatis的配置通过XML文件进行,需要指定数据库连接信息、SQL语句的命名空间和映射文件路径等。
示例如下:xml<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver"value="com.mysql.jdbc.Driver"/><property name="url"value="jdbc:mysql:localhost:3306/mydatabase"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><mappers><mapper resource="com/example/mybatis/MyMapper.xml"/> </mappers></configuration>2. 如何进行数据映射?Ibatis通过XML文件中的映射配置,将数据库表与Java对象进行映射。
Java开源框架:Struts、Spring、Hibernate和iBatis
Java开源框架:Struts、Spring、Hibernate和iBatis 引言在当今软件开发领域,Java是最受欢迎的编程语言之一。
与此同时,Java开源框架也变得越来越流行。
这些框架提供了丰富的功能和工具,使开发人员能够更快速、更高效地构建和维护Java应用程序。
本文将重点介绍四个最受欢迎的Java 开源框架:Struts、Spring、Hibernate和iBatis。
第一章:Struts框架1.1 框架简介Struts是一个基于MVC架构的Web应用程序开发框架。
它通过将应用程序的业务逻辑、数据模型和用户界面分离,使开发人员能够更好地组织和管理代码。
Struts提供了一个可扩展的框架,包括控制器、模型和视图组件。
1.2 核心组件Struts框架的核心组件包括Action类、ActionForm类、配置文件和标签库。
Action类处理用户请求,并将结果返回给用户。
ActionForm类用于封装用户请求的数据。
配置文件用于配置整个应用程序的行为。
标签库提供了用于生成动态HTML页面的标签。
1.3 优点和应用场景Struts框架具有以下优点:- 提供了丰富的功能和工具,如表单验证、国际化支持和异常处理。
- 可以与其他Java技术和框架无缝集成,如Hibernate和Spring。
- 适用于开发大型、复杂的Web应用程序。
第二章:Spring框架2.1 框架简介Spring是一个轻量级的Java开源框架,用于构建企业级Java应用程序。
它提供了依赖注入(DI)和面向切面编程(AOP)等功能,使开发人员能够更容易地编写可测试、可维护和可扩展的代码。
2.2 核心组件Spring框架的核心组件包括IoC容器、AOP模块、数据访问模块和Web模块。
IoC容器负责管理应用程序中的对象,并处理它们之间的依赖关系。
AOP模块提供了面向切面编程的支持。
数据访问模块提供了对数据库的访问功能。
Web 模块用于构建Web应用程序。
hibernate和mybatis的项目结构
hibernate和mybatis的项目结构Hibernate和MyBatis是两个常用的Java持久化框架,它们在项目结构上有一些区别。
本文将一步一步回答关于Hibernate和MyBatis项目结构的问题,以帮助读者更好地理解和应用这两个框架。
首先,我们需要了解什么是项目结构。
项目结构是指在开发一个软件项目时,组织和管理项目代码、资源和配置文件所遵循的一套规范。
具体而言,它包括项目目录结构、配置文件的位置、源代码的组织方式等等。
接下来,让我们回答与Hibernate和MyBatis相关的项目结构问题。
首先是Hibernate的项目结构。
一、Hibernate的项目结构Hibernate是一个面向对象的关系映射框架,它允许开发人员将Java对象与数据库表之间进行映射。
下面是一个Hibernate项目的基本结构:1. src/main/java: 这是存放Java源代码的目录,包括实体类、数据访问对象(DAO)和业务逻辑层(Service)等。
2. src/main/resources: 这是存放配置文件的目录,包括Hibernate的主配置文件hibernate.cfg.xml、映射文件(*.hbm.xml)以及其他的配置文件。
3. src/test/java: 这是存放测试代码的目录,包括单元测试和集成测试等。
4. src/test/resources: 这是存放测试所需要的资源文件的目录。
5. WebContent/WEB-INF: 这是存放Web应用的目录,包含web.xml、JSP页面、JavaScript和CSS文件等。
6. lib: 这是存放项目依赖的第三方库的目录。
总结起来,Hibernate的项目结构比较简单,主要包括源代码目录、配置文件目录、测试目录以及Web应用目录。
接下来,我们来回答MyBatis的项目结构问题。
二、MyBatis的项目结构MyBatis是一个基于Java的持久化框架,它将SQL语句和Java代码解耦,提供了一种简化数据库访问的方式。
Hibernate与iBatis技术选型
3 简单易用,集成方便 在JPA框架下创建实体和创建Java 类一样简单,没有任何
的约束和限制,只需要使用 javax.persistence.Entity进行注释; JPA的框架和接口也都非常简单,开发者可以很容易的掌握。 4 可媲美JDBC的查询能力
JPA的查询语言是面向对象而非面向数据库的,它以面向对象 的自然语法构造查询语句。
Hibernate 与iBatis比较
功能需求 JPA 缓存 存储过程 灵活性 学习程度 自动化程度 运行效率
hibernate
满足 支持 一级缓存,二级缓存 支持 一般 难 高 使用二级缓存 ,效率高
iBatis
满足 不支持 一级缓存 支持 很灵活 容易 一般 高
Hibernate 与iBatis比较
Hibernate ----缓存管理
Hibernate 中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属 于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预; 第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存 。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查 询结果提供了一个查询缓存,它依赖于第二级缓存。
iBatis
相对于hibernate “一站式”ORM解决方案,而ibatis是一 种“半自动化”的ORM实现。
“全自动”ORM 实现了 POJO 和数据库表之间的映射,以 及 SQL 的自动 生成和执行。而ibatis 的着力点,则在于POJO 与 SQL之间的映射关系。也就是说,ibatis 并不会为程序员在 运行期自动生成 SQL 执行。具体的 SQL 需要程序员编写,然 后通过映 射配置文件,将SQL所需的参数,以及返回的结果字 段映射到指定 POJO。
java中mybatis和hibernate的用法总结
java中mybatis和hibernate的⽤法总结在项⽬开发上,hibernate提供的经验简化了不少⼯作量和兼容性,但这些绝对需要有经验后才能明⽩,对于新⼿来说使⽤起来很困难。
hibernate⽐mybatis掌握难度要⾼⼀些,对sql的控制弱⼀些。
下⾯我们就三个⽅⾯带来mybatis和hibernate的总结分析,⼀起来看看⼆者的⽐较吧。
1.开发效率如果是做⼀些简单的CMS类似的只有简单的增删改查的项⽬,那么使⽤Hibernate更有优势,不需要掌握太多的Hibernate知识,只需要会⼀些基本的查询和⼀些配置(Hibernate真正要学会,个⼈感觉知识量⽐mybatis⼤很多)。
hiberbate是⽤java对象拼sql,mybatis是直接写原⽣sql。
hibernate提供了很好的映射机制,mybatis还需要⾃⼰写resultmap paramMap这些东西。
Hibernate和MyBatis都有相应的代码⽣成⼯具。
可以⽣成简单基本的DAO层⽅法。
针对⾼级查询,Mybatis需要⼿动编写SQL语句,以及ResultMap。
⽽Hibernate有良好的映射机制,开发者⽆需关⼼SQL的⽣成与结果映射,可以更专注于业务流程。
综上所述,那么从开发效率上来讲,Hibernate> mybatis。
2.可维护性hiberbate是⽤java对象拼sql,mybatis是直接写原⽣sql。
直接写SQL更容易维护,⽽前者需要通过java对象来看SQL,你得把sql,⽤System.out.println(sql);把SQL打印出来,才可以看到。
Hibernate的查询会将表中的所有字段查询出来,这⼀点会有性能消耗。
Hibernate也可以⾃⼰写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。
⽽Mybatis的SQL是⼿动编写的,所以可以按需求指定查询的字段。
Hibernate HQL语句的调优需要将SQL打印出来,⽽Hibernate的SQL被很多⼈嫌弃因为太丑了。
JDBC+Ibatis+hibernate区别与解释
JDBC Ibatis Hibernate讲解---------------------------------------------JDBC------------------------------------------------------------- 1、JDBC连接数据库的步骤加载驱动-→创建连接-→创建Statement对象-→执行SQL语句-→处理返回结果-→关闭连接。
2、常用的对象DriverManager:加载驱动、创建连接。
Connection:与数据库进行连接。
Statement:执行静态SQL语句并返回生成结果的对象。
PreparedStatement:执行动态态SQL语句并返回生成结果的对象。
ResultSet:返回数据库的结果集。
3、SQL优化<1、SELECT避免使用*号。
<2、减少全表的查询。
<3、写SQL用大写。
<4、在Java代码中尽量少用连接符“+”连接SQL。
<5、使用索引。
<6、避免在索引列上使用NOT。
<7、避免在索引列上进行计算。
<8、总是使用索引的第一个列。
<9、减少访问数据库的次数。
4、SQL语句是在JA V A中判断效率快还是在DB中判断快。
答:在DB中。
在JA V A中进行判断,首先就要进行全表扫描,将查询出来的值与初始值进行比较,而全表扫描本身就是一个非常耗时过程,更何况每次查询出来就比较一次,如果不匹配又去访问,如果我有上百万的数据呢,那不就得访问上百万次数的数据库,而SQL 优化中又有一条十分重要的原则,就是要减少访问数据库的次数,因为每条SQL语句的执行,数据库在内部都执行了许多工作。
如解析SQL语句、估算索引的利用率、绑定变量、读数据块等等。
由此可见,减少数据库的访问次数,就能实际上减少数据库的工作量。
而在DB中,只需要写好SQL就可以了,有条件查询就不会进行全表扫描了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.ibatis SQL Map 配置文件
文件中对所用数据库的连接做了基本配置,包括数据库驱动类型、用户名、密码,以及连接池的相关管理数据。
2.PO和映射文件
和hibernate一样,PO作为数据库关系表的影射,也需要响应的映射配置文件,可以手写,也可以借助hibernate的相关工具生成PO,不会影响PO在ibatis中的使用。与hibernate不同的是,ibatis的映射文件中没有对PO中每个属性做响应的描述,而是指定了一系列与PO有关的SQL相关操作,也体现了ibatis良好的灵活性与可扩展性。
iBATIS的特点:
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。
SqlMapClient对象是ibatis持久层操作的基础,相当于hibernate中的session,提供对SQL映射的方法。
insert()方法实现对插入SQL语句的映射;
delete()方法实现对删除SQL语句的映射;
update()方法实现对更新SQL语句的影射;
queryForList()、queryForMap()、queryForObject()、queryForPaginatedList()等方法提供了一组查询SQL语句的影射;
Hibernate配置文件有两种,分别是hibernate.cfg.xml文件和hibernate.properties,推荐使用hibernate.cfg.xml。
2.PO和映射文件
使用middlegen和hibernate-extensions从数据库导出PO的映射文件,并在hibernate.cfg.xml当中声明。
一、基本功能
Hibernate作为数据持久化的中间件,足以让数据库在业务逻辑层开发中去冬眠。它通过可扩展标记语言(XML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。使整个项目开发分工更加明确,提高了程序开发的效率。
configuration对象:
Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要
3.编写DAO
对每一张关系表编写一个DAO,提供一组增、删、改、查方法供业务逻辑对数据库操作使用。
更多的细节请大家参阅hibernate的网站获取详细的信息。并在各自的实践和开发中加深体会。
Ibatis简介
相对Hibernate和Apache OJB 等"一站式"ORM解决方案而言,ibatis 是一种"半自动化"的ORM实现。所谓"半自动",可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate 还是Apache OJB,都对数据库结构提供了较为完整的封装,提供了从POJO 到数据库表的全套映射机制。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate或者OJB 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。
2. iBatis 可以进细粒度的优化
比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
对于实际的开发进行的比较:
1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
获取一些底层实现的基本信息,其中几个关键属性包括:
1. 数据库URL
2. 数据库用户
3. 数据库用户密码
4. 数据库JDBC驱动类
5. 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。
Save()方法实现增加和保存;
Delete()方法实现数据的删除;
Update()方法实现数据更新和修改;
Find()方法实现数据的检索;
Hibernate会根据不同的操作自动生成相应的SQL语句,从而实现了程序员对PO对象的操作转化为对数据库关系表的操作。
二、使用步骤
1.编写Hibernate配置文件
选用ibatis和hibernate的区别
Hibernate简介
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
3. 开发方面:
开发效率上,我觉得两者应该差不多。可维护性方面,我觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。
3.编写DAO
在DAO中,可以使用SqlMapClient提供的方法来对应的指定对PO操作的SQL语句,从而使业务逻辑层的开发仍然是面向对象的操作。
选择Hibernate还是iBATIS都有它的道理:
Hibernate的特点:
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行,但是Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS。
以上信息一般情况下由hibernate.cfg.xml或者hibernate.properties文件来配置,实现与不同数据库的连接。