持久层

Mybatis简介

时光总嘲笑我的痴心妄想 提交于 2019-12-05 03:38:20
1 Mybatis简介 Mybatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。 Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。 Mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和java中的POJO映射成数据库中的记录。 2 Mybatis的历史 原是Apache的一个开源项目iBatis,2010年6月这个项目由Apache Software Foundation迁移到Google Code,随着开发团队转投Google Code旗下,iBatis 3.x正式更名为Mybatis,代码于2013年11月迁移到GitHub上。 iBatis一词来源于“internet”和“abatis”的组合,是一个基于java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。 3 为什么要使用Mybatis? Mybatis是一个半自动化的持久层框架。 JDBC: SQL夹在java代码块里,耦合度高导致硬编码内伤。 维护不易且实际开发需求中SQL是由变化的,频繁修改的情况多见。   Hibernate和JPA: 长难复杂SQL,对于Hibernate而言处理也并不容易。 内部自动生产的SQL,不容易做特殊优化。 基于全映射的全自动框架

java第一次笔试+面试总结

核能气质少年 提交于 2019-12-04 16:18:22
今天是自己第一次java笔试和面试,总体感觉比预期好一点。 笔试题第一面是问答题,主要考查java基础,一共有18题,我有6道题没有写出来。第二面主要是算法题,一共有8道题,我大概写出来4道题,第三面主要是逻辑题和涉及http, 操作系统的一些题目,我做的太慢了,根本就没做到哈哈哈哈。 下面整理一下10道不会的题目,希望以后继续加油啦! 1.持久层设计要考虑哪些问题?你用过的持久层框架有哪些? 答:”持久“就是将数据保存到可掉电式存储设备中以便以后使用。简单来说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久 层就是专注于实现数据持久化的相对独立的层面。 持久层设计的目标包括: 一数据存诸逻辑的分离,提供抽象化的数据访问接口 一数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现 一资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制) 一数据抽象,提供更面向对象的数据操作 持久层框架有”Hibernate Mybatis ,Toplink, Guzz,jOOQ,Spring Data, .ActiveJDBC。 2、什么是IOC和DI ? DI是如何实现的? 答:I0C叫控制反转,是Inversion of Control的缩写, DL (Depedency Injection)叫依赖注入,是对IOC更简单的诠释

Mybatis简介

故事扮演 提交于 2019-12-03 23:07:00
1.1、什么是Mybatis MyBatis 是一款优秀的 持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。 MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis 。 2013年11月迁移到 Github . Mybatis官方文档 链接 GitHub 链接 1.2、持久化   持久化是将程序数据在持久状态和瞬时状态转换的机制    为什么需要持久化呢?     由于内存本身的缺陷导致,内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。内存过于昂 贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电吧。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直呆在内存中,需要持久化来缓存到外存。 1.3、持久层   持久层---就是实现持久化的代码(dao层,DAO,Data Access Object 数据访问对象)  

spring mvc基本概念

匿名 (未验证) 提交于 2019-12-02 23:57:01
Spring MVC的基本感念 关于三层架构和 MVC 三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就 是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构 包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,所以我们课程中的案例也都是基于 三层架构设计的。 三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面: 表现层: 也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求 web 层,web 需要接收 http 请求,完成 http 响应。 表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。 表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。 表现层的设计一般都使用 MVC 模型。(MVC 是表现层的设计模型,和其他层没有关系) 业务层: 也就是我们常说的 service 层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web 层依赖业 务层,但是业务层不依赖 web 层。 业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的, 事务应该放到业务层来控制) 持久层:

JavaEE--Mybatis学习笔记(一)

匿名 (未验证) 提交于 2019-12-02 21:53:52
一、简介: MyBatis 本是 apache 的一个开源项目 iBatis , 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的 持久层 框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) MyBatis 的前身就是 iBatis,iBatis 本是由 ClintonBegin 开发,后来捐给 A pache 基金会,成立了 iBatis 开源项目 。 2010 年 5 月该项目由 A pahce 基金会迁移到了 G oogle C ode, 并且改名为 M y B atis 。尽管如此,它的包结构仍然为 ibatis 。 访问网站 www.mybatis.org/ https://github.com/mybatis MyBatis 是一个数据持久层 ( ORM ) 框架。 把实体类和 SQL 语句之间建立了映射关系,是一种半自动化的 ORM 实现。 所有 sql 语句,全部定义在 xml (建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为 mapper。 二、 MyBatis 的优点 (与其他架构区别

Hibernate 简介

只愿长相守 提交于 2019-12-02 20:37:12
我们从 三个角度 理解一下 Hibernate : 一、 Hibernate 是对 JDBC 进一步封装 原来没有使用 Hiberante 做持久层开发时,存在很多冗余,如:各种 JDBC 语句, connection 的管理,所以出现了 Hibernate 把 JDBC 封装了一下,我们不用操作数据,直接操作它就行了。 二、我们再从分层的角度来看 我们知道非常典型的三层 架构 :表示层,业务层,还有持久层。 Hiberante 也是持久层的框架,而且持久层的框架还有很多,比如: IBatis , Nhibernate , JDO , OJB , EJB 等等。 三、 Hibernate 是开源的一个 ORM (对象关系映射)框架 。 ORM ,即 Object-Relational Mapping ,它的作用就是在关系型数据库和对象之间做了一个映射。从对象( Object )映射到关系( Relation ),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂 SQL 打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。 从上图中,我们可以看出 Hibernate 六大核心接口,两个主要配置文件,以及他们直接的关系。 Hibernate 的所有内容都在这了。那我们从上到下简单的认识一下,每个接口进行一句话总结。 1 、

JPA教程

▼魔方 西西 提交于 2019-12-02 19:16:16
1,基础 domain: 数据库建模 repository: 基础数据库操作接口 service: 设计复杂数据库操作实现/复杂业务实现 service.dto:数据库业务数据传输对象 web.rest: ui交互接口 web.vm: ViewModel前台显示数据模型 引自: https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html http://blog.csdn.net/linzhiqiang0316/article/details/53022683 http://blog.csdn.net/id_kong/article/details/70225032#criteriabuilder- 安全查询创建工厂 http://blog.csdn.net/dracotianlong/article/details/28445725 使用 Spring Data JPA 简化 JPA 开发 从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例;接着重构该示例,并引入 Spring 框架,这两部分不会涉及过多的篇幅,如果希望能够深入学习

bboss持久层分页接口使用示例

ぐ巨炮叔叔 提交于 2019-12-02 07:08:34
bboss持久层分页接口比较有特色,提供了四种Style的分页接口: 第一种Style 根据sql语句直接分页,这种风格是bboss 3.6.0及之前版本一直沿用的接口 第二种Style 根据sql语句和外部传入的总记录数进行分页,这是bboss 3.6.1及之后版本提供的接口 第三种Style 根据sql语句和外部传入的总记录数sql语句进行分页,这是bboss 3.6.1及之后版本提供的接口 第四种Style 使用数据库row_number() over()分析函数结合排序条件实现数据库物理分页 前三种style的支持oracle,mysql,maradb,sqlite,postgres四个主流数据库的高效物理分页,其他数据采用游标机制实现分页(效率相对较低);第4种风格支持oracle,mysql,maradb,sqlite,postgres,derby,ms sql server 2008,db2数据库的高效物理分页(其他类型数据库请采用前面三种风格进行分页) 我们根据查询参数的传入方式,分别下面举例介绍四种Style。 1.准备工作-编写一个sql语句配置文件,用来演示四种Style queryMaterialList为分页sql queryCountMaterialList为查总记录数sql Xml代码 <? xml version = "1.0" encoding =

java持久层框架mybatis如何防止sql注入

落花浮王杯 提交于 2019-12-01 07:38:23
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些 安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为 存储过程这样的方式,来防止sql注入,这当然是一种很 安全的方式,但我们平时开发中,可能不需要这种死板的方式。 mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候当然需要防止sql注入。其实Mybatis的sql是一个具有“输入+输出”功能,类似于函数的结构,如下: <select id=“getBlogById“ resultType=“Blog“ parameterType=”int”><br> select id,title,author,content from blog where id=#{id} </select> 这里,parameterType 标示了输入的参数类型,resultType标示了输出的参数类型。回应上文,如果我们想防止sql注入,理所当然地要在输入参数上下功夫。上面代码中高亮部分即输入参数在sql中拼接的部分,传入参数后,打印出执行的sql语句,会看到sql是这样的: select id,title

JAVA持久层框架的概述(ibatis>>mybatis)

纵然是瞬间 提交于 2019-12-01 07:00:46
现在主流的ORM映射框架有Hibernate、Apache OJB;这些基于Java的持久层框架都提供了全自动的对象–关系映射机制,能很好的实现从对象到关系数据的持久化操作。几乎不需要写任何的SQL语句(根据配置好的映射关系文件自动生成对应的 SQL 并调用 JDBC 接口加以执行),以面向对象的形式就能实现对数据库的操作。给我们的编程带来了很大的好处,不需要再接触底层的SQL语句,同时也避免了在书写SQL语句时带来的诸多问题。 但这些ORM框架也是有它的问题的,那就是对于复杂的SQL查询、多表的联合查询实现起来很麻烦,甚至某些业务方面用Hibernate无法实现。举个例子:假如有2张几乎相同的表(在实际的项目中这样的情况是存在的),现在需要把这2张表的数据全部查询出来在页面显示,使用Hibernate可能会这样操作,首先各执行一次findAll,然后在Service中循环,再存到一个List中,最后在页面显示。这样是能实现,但是很麻烦,那么简单的方法是什么呢?使用SQL语句中的union all 关键字,一个SQL语句就能实现,所以在这种情况下使用Hibernate就不是很合适了。面对这样的需求,再次举起 Hibernate 大刀,却发现刀锋不再锐利,甚至无法使用,奈何?恍惚之际,只好再摸出JDBC 准备拼死一搏,但JDBC也很麻烦,对于返回的ResultSet也需要处理