77范文网 - 专业文章范例文档资料分享平台

Hibernate Spring入门指南(1)

来源:网络收集 时间:2018-11-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

2、 生成DAO接口

Persistence->DAO->DAOInterface

3、 生成Hibernate Abstract DAO

Persistence->Hibernate->3 - Hibernate Abstract DAO DAO Interface选择DAO 如使用spring要勾选

4、 生成Model DAO

Persistence->DAO->ModelDAO(extends DAO) POJO选择反向生成的类,如JobInfo.java extends DAO选择上面生成的DAO接口

5、 生成Hibernate Model DAO

Persistence->Hibernate->4 -Hibernate Model DAO POJO选择SmUsers

Hibernate DAO(superclass)选择HibernateDAO DAO Model Interface:选择SmUsersDAO

6、 以后每次只需要进行第4步和第5步:

4、生成Model DAO

5、生成Hibernate Model DAO

对dwsys.sm_announce表的执行4、5操作,这里不描述。 第四步:测试类

Hibernate、Spring入门指南

前言:

本培训教程旨在引导初次接触Hibernate和Spring的技术人员,能够快速的掌握和运用这两种工具。

一、 Hibernete应用

(一)

Hinernate 概念与原理

1. 什么是Hibernate

Hibernate是一个开放源代码的对象关系映射(Object Relational Mapping ,简称ORM)框架。ORM可以简单理解为Java对象和关系数据库中表的对应关系。Hibernate采用ORM技术,不仅仅管理Java类到数据库表的映射,还提供数据查询和获取数据的方法。相对于使用 JDBC 和 SQL 来手工操作数据库,Hibernate 可以大大减少操作数据库的工作量。

2. Hibernate工作原理

Hibernate工作原理,听起来好像是个很神秘的东东,其实并不神秘。Hibernate无非是一个中间件,它对JDBC进行了一次对象封装,负责把sql语句发送到数据库,而数据库返回来的信息hibernate接收之后直接生成一个对象传给java。下图显示了Hibernate的工作原理:

正如图中所示,Hibernate是利用数据库以及其他一些配置文件如 Hibernate .properties ,

XML Mapping 等来为应用程序提供数据持久化服务的。通过Hibernate .properties或者Hibernate.cfg.xml,Hibernate可以获取所操作的数据库;通过XML Mapping,Hibernate可以获取要操作的数据库表的信息。 要操作一个数据库表,Hibernate首先是操纵JAVA对象,通过JAVA对象找到对应的XML Mapping文件,再通过XML Mapping 文件找到对应的数据库表,通过把对JAVA对象的操作转换为SQL对数据库表的操作,从而完成所谓ORM的全过程。

(二) Hinernate插件与安装

1. Hibernatetools:

作用:顾名思义,Hibernate工具,Hibernete必不可少的插件。

安装:解压缩hibernatetools-3.1.0.beta4.zip到磁盘,将生成的features和plugins包整个拷贝覆盖到eclipse下即可,打开eclipse可以看到。 2. Easysql:

作用:包含SQL编辑器和执行器,表格编辑器,数据导出工具。若不安装则eclipse?Window?Preferences中无Eclipsework菜单。 安装:解压缩easysql-1.0.6.zip到磁盘,将生成的plugins包整个拷贝覆盖到eclipse下即可。

3. Eclipsework:

作用:EclipseWork是一个代码生成插件。可以利用它从POJO's或数据库的表格中快速生成你所需要的代码。EclipseWork根据XML文件创建自定义的代码生成向导,然后 依据配置的Velocity模板来生成代码。 安装步骤:

(1) 解压缩eclipsework-0.1.zip到磁盘,打开eclipse?Help?SoftWare Updates?Find

and Install…

(2) ? Search for new features of install

(3) ?New Local Site

(4) ?选择eclipsework-0.1解 压缩后的目录(包含features和plugins包以及site.xml

的包)

(5) ?给site命名?Finish

(6) ?勾上刚才的命名

(7) ?Next

(8) ?选择I accept the terms in the license agreement? Next

(9) ?

Finish

(10) ?Install?Yes重启eclipse

4. templates:

作用:顾名思义,起模板的作用。EclipseWork用该模板快速生成代码。

安装:解压缩templates-0.1.zip到磁盘,打开eclipse?Window?Preferences…?选择EclipseWork?wizards.xml选择解压出来的wizards.xml?Velocity Templatees’Folder选择解压出来的templates目录?勾选Open Editor when finish the wizard和Enable wizard’s cache?Apply?OK

打开templates视图:eclipse? Window?Show View?Other…?EclipseWork?Templates

(三) Hibernate工程

1.

HibernateProject工程创建步骤

(1) 创建一个动态web工程

(2) 给工程取名HibernateProject,工程如图

(3) 导入需要的jar,把需要用到的jar包拷贝到工程的lib目录下,也就放到了工程

的classpath中,jar包如下图

(4) 创建需要的包,如下图所示

2.

配置和生成Hibernate的相关文件

第一步:配置Hibernate Configuration File(.cfg.xml)

添加:选择工程,点右键?New?Other…

?Hibernate?Hibernate Configuarion File

?Next

?Next

?选中Database dialect ?选择Driver class ?选择或填写Connection URL为相应数据库的URL?填写Default Schema(如DWSYS)?填写Username和Password(数据库用户与密码)?勾上Create a console configuration ?Finish,生成配置文件如图

第二步:设置反向工程(.reveng.xml) 添加工具栏的

hibernate

的图标

边的向下三角

hibernate.cfg.xml中配置的信息有:数据库驱动程序名、驱动程序URL、数据库名、数据库用户名及密码、表模式名等。

?Hibernate Code Generation…

?New一个新的Hibernate Code Generation,

Name命名自取,在Main中Console configuration选择上面配置的?Output directory选择上面配置的hibernate.cfg.xml存放的路径?勾选Reverse engineer from JDBC Connection?在Package中选择数据库表映射对象生成的路径(如cn.domain)?点击reveng.xml后的Setup…?Create new…

?选中parent folder?Next

?Refresh?选择需要反向功能的表(一次可以多选)?Include…

?Finish

?Package填写反向生成类存放的包路径?Exporters卡片中勾选Generate domain code(.java)、Generate mappings(hbm.xml)和Generate hibernate configuration(hibernate.cfg.xml)

?Run?刷新工程能看到生成的java类,hibernate.cfg.xml中的内容也有新的变化。

hibernate.reveng.xml配置了用到数据库中的哪些表;映射文件(这里的SmAnnounce.hbm.xml和SmUsers.hbm.xml)配置了数据库表和java类之间的关联;反向类(这里的SmAnnounce.java和SmUsers.java)是可以看作一个简单的VO类。

3.

生成POJO:

POJO:Plain Ordinary Java Object无格式普通Java对象,可以简单的理解为一个不包含逻辑代码的值对象(Value Object 简称VO)。

1、 生成HibernateUtil

Templates?Persistence->Hibernate->1 – Hibernate Util – ThreadLocal?生成 HibernateUtil.java文件

(四) Hibernate配置文件

1. xxx.cfg.xml配置文件详解

hibernate配置文件:cfg(config的缩写),是sessionFactory的配置文件,session工厂用于生产session(^_^)。

hibernate.cfg.xml内容如下:

2. xxx.reveng.xml反向工程文件详解

Hibernate反向工程文件:reveng(reverse engineer),把数据库中的表反射到工程中来。在reveng

文件中可以过滤出数据库中需要的表到工程中。

3. xxx.hbm.xml映射文件详解

Hibernate 映射文件: ORM(Object Relational Mapping)中的M。Mapping文件将对象(Object)与关系型数据(Relational)相关联的桥梁。 Hibernate 映射文件内容如下:

注意:延迟加载等在此没有提到

(五) Hibernate基本操作

获取数据源

结合实例分析,代码摘要: HibernateUtil.java代码

Configuration configuration = new Configuration(); //默认单数据源

SessionFactory sessionFactory = configuration.configure().buildSessionFactory(); Session session = sessionFactory.openSession(); //多数据源自选,用path表示你的xml路径

SessionFactory sessionFactory = configuration.configure(path); 注意:这里没有介绍多数据源的获取

(六) HQL语句

实例讲解createQuery

(七) SQL语句在Hibetnate中的运用

实例讲解createSQLQuery

注意:这里sql语句只谈到查询语句

(八) Hibernate事务

Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装(默认情况下使用JDBCTransaction)。后面还会谈到Spring对事务的管理,这里对Hibernate事务管理只是简单介绍。

1. JDBC Transaction

try { connection.setAutoCommit(false); ..... // 一连串SQL操作 connection.commit();// 必须commit才会更新数据库 } catch(Exception) {

connection.rollback();// 发生错误,撤消所有变更 }

2. Hibernate 的JDBCTransaction

try { session = sessionFactory.openSession(); Transaction tx = session.beginTransaction();

.... // 一连串SQL操作 tx.commit(); // 必须commit才会更新数据库 } catch(HibernateException e) { tx.rollback(); }

二、 Spring应用

(一)

Spring 概念与原理

1.

什么是Spring

I). 简化的Spring

什么是Spring?简单的说,Spring就是一个框架,一个采用的控制反转(Inversion of Control,IoC) 技术的框架。Spring另外采用了面向切面编程的(Aspect Oriented Programming 简称AOP)思想。综合来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

■ 框架——所谓框架,可以想象一个现实的例子就是房产开发商开发的房子,采用的都是框架式结构。Spring框架提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

■ 容器——容器是置于框架内的,可以容放一定物品的东东。Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean,包括如何被创建、如何实例化、如何相互依赖等等。

■ 轻量级——可以从三方面来讲:一是工具大小,完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布;二是运行开销,并且Spring所需的处理开销也是微不足道的;三是依赖性,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。 ■ 控制反转——在原理中专门介绍。 ■ 面向切面——在原理中专门介绍。

II). 完整的Spring

Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如下图所示。

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(Inversion of Control,IoC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。 Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 Hibernate等。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。Spring MVC完全可以与Struts媲美。 这部分内容可以在对Spring有一定掌握后深入学习,相信你会受益匪浅。

2.

Spring工作原理

I). 控制反转&依赖注入

―控制反转(Inversion of Control,IoC)‖原理是Spring 框架的核心。所谓控制反转,含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java 实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用的者的实例。但在Spring 里,创建被调用者的工作不再由调用者来完成,因此被称作控制反转。创建被调用者实例的

工作通常由Spring 容器来完成,然后注入调用者,因此也称作依赖注入(Depedency Injection)。 使用依赖注入让bean 与bean 之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。这也是Spring轻量级的一种体现。

II). 面向切面编程(AOP)

Spring的另一个特色是采用了面向切面编程原理(Aspect Oriented Programming 简称AOP)。AOP基于IoC基础,是对OOP的有益补充。AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的切面Crosscutting enterprise concerns,例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

(二) Spring插件与安装

Spring的概念与原理比Hibernate讲起来复杂得多,但是Spring插件的安装却简单多了,把需要的jar如spring.jar拷贝到lib下就OK啦。

(三) Spring工程(HelloWorld)

讲解了Spring的概念与原理后,你可能对对Spring的控制反转原理的理解还很模糊很抽象,下面通过Spring的HelloWorld实例,加深对原理的理解,看看代码究竟是怎样体现控制反转原理的。

第一步:创建工程

步骤同hibernate中的工程创建步骤,创建好的工程如下图

第二步:写一个对象类,代码如下:

第二步:创建一个Xml文件,内容如下:

第三步:测试类,内容如下:

第四步:运行并查看结果。

运行Java App后,控制台输入内容如下: Hi,吴宜水

My God!太简单了吧!这就是Spring的Ioc?不敢相信吧! 祝贺你,你说对了,这就是

Ioc,只不过是简化了一下,实际应用中无非就是多个对象类、多个Xml文件、多个服务类(这里的测试类),然后就是Xml的内容更丰富一点(这里xml文件里只有一个bean,bean只有一个属性,实际应用中会是多个bean多个属性,属性中注入的可能不只是字符,还可能是其他的bean)。

下面看一看程序与以往程序究竟有啥不同。 可以看到多用了一个Xml文件外,其他地方与以往基本一样。是的这里就是在这个Xml文件配置了一个bean――Message类。以往,我们都是自己new 一个Message的实例对象message,然后message. setMsg(―吴宜水‖)。

这么简单的东西为什么要这么折腾一下,用什么Ioc?!没错,这里是很简单,但是如果这里不再是用“吴宜水”了,而是换成了你,那么你就要找到对应的文件,修改里面的message. setMsg(―吴宜水‖)语句。修改一条这样的语句不要紧,但是如果有n条这样的语句,n个文件里用到了,哇哇!你是不是要哭了呢!这可能是个极端的例子,另外一个现实就是,如果以前用的是all.bean.Message,现在改用其他的了,怎么办呢?恐怕就不是很简单的事了。也许你已经想到了,通过Ioc可以减少因变动带来工作量。没错,这正是Ioc的优势所在,它可以灵活配置各种信息。这里为了简单起见,作了简化处理,真正的应用中,Ioc的优势可能超乎你的想象。

下面再来看一看究竟是怎么实现的。

首先,应用程序去加载应用程序的上下文,实际上也就把配置文件中的配置信息加载一遍。代码如下:

ApplicationContext actx= new ClassPathXmlApplicationContext(\

然后,根据配置文件加载要用的bean,找到具体的实现类,代码如下: TestBean testBean= (TestBean)actx.getBean(\

这里,实现类可配置,不但可配置类的属性(),还可以配置用哪个类,例如配置文件中的testBean的实现类就配置成all.bean.Message,你也可以换成其他的(

接下来的语句直接就用testBean.getMsg()把结果输出来了,并没有看到Message类的实例化语句,也没有看到类似message. setMsg(―吴宜水‖)语句。究竟Message是怎样实例化的,它的msg属性又是怎样被赋值了呢?所有这些工作,spring都交给了容器去处理了,就不用我们自己去管这些事了。实际上,在容器启动时将Message提前进行实例化了,它的属性也正是在实例化的过程中赋值的,如果你也可以设置成不提前实例化,后面会告诉你怎么做。

通过这个简单的HelloWorld,你是不是似乎理解Spring的控制反转或者依赖注入原理了呢?不明白?不要紧,在网上这方面的文章很多,他们讲解会更透彻,多看自然就明白了。

(四) Spring配置文件及加载

1. 2.

Spring xml配置文件的作用

Spring xml配置文件里用来配置需要依赖注入的bean。

Spring xml配置文件的组成:

I). xml配置文件示例

吴宜水

II). 标签:

Id : 标识该bean的名称,通过factory.getBean(―id‖)来获得实例。 Class : 该bean的类路径。

Singleton : 默认为true,即单实例模式,每次getBean(―id‖)时获取的都是同一个实例,如果设置为false,即原型模式,则每次获取的是新创建的实例。

Init-method : 在bean实例化后要调用的方法(bean里定义好的方法)。 Destroy-method : bean从容器里删除之前要调用的方法。 Autowire : 其属性要通过何种方法进行属性的自动装配。

对于上述的各个属性,id和class是必要的,其他的则可以省略。例如如果设置了autowire的值,则表明需要自动装配,否则是手动装配。

III). 标签

Bean里的属性通过标签来标识。有以下几种情况: ● 简单类型属性

springTest

● 引用其他bean

也可以将改为

这样叫做内部bean,缺点是无法在其他地方重用这个bean的实例。 ● 装配集合

共有以下几种集合的装配: ****装配List和数组****

something

otherThing ****装配Set****

something

otherThing

****装配Map****

value1

****装配Properties****

value1 value2 ● 设置null

要将一个属性null,需要通过标签,如果不设置,则属性为默认值(在实例化时)而不是null。

3.

Spring xml配置文件的装载:

从前面的HelloWorld实例可以看出,加载Spring 的xml配置文件很简单,代码如下: ApplicationContext actx= new ClassPathXmlApplicationContext(yourXmlPath); Xml还有另外一种加载方式,代码如下:

ApplicationContext actx= new FileSystemXmlApplicationContext(yourXmlPath); 当然,xml的加载方式还不止这两种,这里不详细描述。正如前面讲的,Spring在加载xml的时候将会实例化符合条件的bean。

(五) Spring事务管理

Spring中提供了声明式事务管理,与传统的编程式事务管理相比,编程式的重复代码较多,声明式比编程式更灵活。 声明式事务管理原理是AOP,也就是说声明式事务管理是AOP思想的明显体现。通过声明式事务处理,具体的业务代码再不必去写一堆try…catch…之类的代码,去处理事务和日志之类,尽关心业务本身。 那么声明式事务管理是如何做到的呢?下面通过一个实例,来看看如何进行声明式事务管理,同时,通过这个这个实例,进一步理解AOP原理(前面只有一个Ioc的实例,刚好这里是一个AOP实例)。

1.

不用Hibernate的事务管理

下面来看一个不用Hibernate的事务管理实例,这个实例尽可能的简单,首先我们抛弃了Hibernate,另外我们抛弃了继承的接口,为的就是一个目的,直接剖析Spring的事务管理。实例的具体步骤如下: 步骤一、编写DAO类

cn/domain/SmAnnounce.hbm.xml

class=\

ager\>

class=\

xyFactoryBean\>

key=\>PROPAGATION_REQUIRED,-java.lang.Exception

步骤四、编写并运行测试类 测试类代码如下:

可以看到,运行结构和前面的完全一样。 在上面两个实例中,第一个实例里用的是DataSourceTransactionManager来管理事务,第二个实例中用的是HibernateTransactionManager来管理事务。两者实现了同一个目的,事务管理。 另外,第一个实例中MyDAO没有实现任何的接口,而第二个实例中MyService 扩展了 HibernateDaoSupport。实际上这有分别是两种代理方式:动态代理和cglib代理。动态代理强制要求实现接口,而动态代理则不需。两者的共同点是不管是用动态代理还是用cglib代理,两者都是通过Spring容器来管理。

三、 作业

使用Hibernate和Spring结合的方式,实现下面四张表的查询以及增删改操作,注意事务的控制。

数据库:8号机、WHJYDW

物品表:SCXS.ITEM_INFO Name Code Data Type Primary Foreign Key allowNull 物品ID 物品名称 备注 ITEM_ID ITEM_NAME MEMO VARCHAR2(10) VARCHAR2(30) VARCHAR2(60) TRUE not null not null 储柜表:SCXS.CAB_INFO Name Code Data Type Primary Foreign Key allowNull 储柜ID 储柜名称 备注 CAB_ID CAB_NAME MEMO VARCHAR2(10) VARCHAR2(30) VARCHAR2(60) TRUE not null not null

库存表:SCXS.SALE_INFO Name Code Data Type Primary Foreign Key allowNull 储柜ID 物品ID 存储数量 创建时间 修改时间 CAB_ID ITEM_ID STORE_NUM GEN_TIME UPDATE_TIME VARCHAR2(10) VARCHAR2(10) NUMBER(9,2) DATE DATE TRUE TRUE not null not null not null not null not null

销售表主表:SCXS.SALE_INFO Name Code Data Type Primary Foreign Key allowNull 销售ID 物品ID 创建时间 修改时间 Name SALE_ID ITEM_ID GEN_TIME UPDATE_TIME Code VARCHAR2(10) VARCHAR2(10) DATE DATE Data Type TRUE Primary TRUE Foreign Key not null not null not null not null allowNull 销售表明细表:SCXS.SALE_INFO 销售ID 销售数量 销售价格 创建时间 修改时间

create user SCXS identified by \ default tablespace USERS temporary tablespace TEMP profile DEFAULT; grant connect to SCXS; grant dba to SCXS;

grant unlimited tablespace to SCXS;

create table SCXS.ITEM_INFO (

ITEM_ID VARCHAR2(10) not null, ITEM_NAME VARCHAR2(30) not null, MEMO VARCHAR2(60) not null );

alter table SCXS.ITEM_INFO

add constraint PK_ITEM_INFO primary key (ITEM_ID);

create table SCXS.CAB_INFO (

CAB_ID VARCHAR2(10) not null,

SALE_ID SALE_NUM SALE_PRICE GEN_TIME UPDATE_TIME VARCHAR2(10) NUMBER(9,2) NUMBER(9,2) DATE DATE TRUE not null not null not null not null not null CAB_NAME VARCHAR2(30) not null, MEMO VARCHAR2(60) not null );

alter table SCXS.CAB_INFO

add constraint PK_CAB_INFO primary key (CAB_ID);

create table SCXS.STORE_INFO (

CAB_ID VARCHAR2(10) not null, ITEM_ID VARCHAR2(10) not null, STORE_NUM NUMBER(9,2),

GEN_TIME DATE default sysdate not null, UPDATE_TIME DATE default sysdate not null );

alter table SCXS.STORE_INFO

add constraint PK_STORE_INFO primary key (CAB_ID,ITEM_ID);

create table SCXS.SALE_INFO (

SALE_ID VARCHAR2(10) not null, ITEM_ID VARCHAR2(10) not null, SALE_NUM NUMBER(9,2),

GEN_TIME DATE default sysdate not null, UPDATE_TIME DATE default sysdate not null );

alter table SCXS.SALE_INFO

add constraint PK_SALE_INFO primary key (SALE_ID);

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Hibernate Spring入门指南(1)在线全文阅读。

Hibernate Spring入门指南(1).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/277277.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: