




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA培训(理论部分)内容内容n基础知识介绍nSSH框架介绍nERP项目介绍内容内容n基础知识介绍JavaJava语言的特点JavaJava语言的特点:跨平台性n 什么是跨平台性?什么是跨平台性?通过通过JavaJava语言编写的应用程序在不同的系统平台上都可语言编写的应用程序在不同的系统平台上都可以运行。以运行。n 原理是什么?原理是什么?只要在需要运行只要在需要运行javajava应用程序的操作系统上,应用程序的操作系统上,先安装一个先安装一个JavaJava虚拟机虚拟机(JVM (JVM J Java ava V Virtual irtual M Machine)achine)即即可。
2、可。由由JVMJVM来负责来负责JavaJava程序在该系统中的运行。程序在该系统中的运行。JavaJava语言的运行机制Java6.0 PlatformJava6.0 Platform介绍介绍JavaJava语言基础组成语言基础组成n2.1 2.1 关键字关键字n2.2 2.2 标识符标识符n2.3 2.3 注释注释n2.4 2.4 常量和变量常量和变量n2.5 2.5 运算符运算符n2.6 2.6 语句语句2.1 2.1 关键字关键字2.2 2.2 标识符标识符2.2 2.2 标识符标识符JavaJava中的名称规范:中的名称规范:n 包名:多单词组成时所有字母都小写。包名:多单词组成时所
3、有字母都小写。n xxxyyyzzzxxxyyyzzzn 类名接口名:多单词组成时,所有单词的首字母大写。类名接口名:多单词组成时,所有单词的首字母大写。n XxxYyyZzzXxxYyyZzzn 变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单变量名和函数名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写。词开始每个单词首字母大写。n xxxYyyZzzxxxYyyZzzn 常量名:所有字母都大写。多单词时每个单词用下划线连接。常量名:所有字母都大写。多单词时每个单词用下划线连接。n XXX_YYY_ZZZXXX_YYY_ZZZ2.3 2.3 注释注释/ /
4、* * *这是我的这是我的Hello WorldHello World程序。程序。author author 小强小强* */ /class Democlass Demo / /* *这是主函数,是程序的入口这是主函数,是程序的入口它的出现可以保证程序的独立运行,它的出现可以保证程序的独立运行,* */ /public static void main(String args)public static void main(String args) /这是输出语句用于将括号内的数据打印到控制台。这是输出语句用于将括号内的数据打印到控制台。System.out.println(Hello Wor
5、ld);System.out.println(Hello World); 2.4 2.4 常量与变量常量与变量2.4 2.4 常量与变量常量与变量2.4 2.4 常量与变量常量与变量局部变量与成员变量2.5 2.5 运算符运算符2.6 2.6 程序流程控制程序流程控制u 其他流程控制语句其他流程控制语句u break(跳出跳出), continue(继续继续)break语句:应用范围:选择结构和循环结构。语句:应用范围:选择结构和循环结构。continue语句:应用于循环结构。语句:应用于循环结构。面向对象面向对象面向对象编程面向对象编程staticstatic例子例子staticstatic
6、内存布局内存布局面向对象的三个基本特征面向对象的三个基本特征 面向对象的三个基本特征面向对象的三个基本特征: : 封装封装: : 是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。类或者对象操作,对不可信的进行信息隐藏。 继承(一般与特殊)继承(一般与特殊) : : 是指一个对象直接使用另一对象的属性和方法是指一个对象直接使用另一对象的属性和方法. .子类可以拥子类可以拥有超类的属性和方法,也可以扩展定义自己特有的属性,增加新方法和重新定义超有超类的属性和方法,也可以扩展定
7、义自己特有的属性,增加新方法和重新定义超类的方法类的方法. . 多态(覆盖与重载)多态(覆盖与重载): : 是指接口的多种不同的实现方式是指接口的多种不同的实现方式, ,也可以被说成也可以被说成“一个接口,一个接口,多个方法多个方法”. .封装与继承封装与继承对象转型例子对象转型例子1 1对象转型例子对象转型例子2 2多态多态( (动态绑定动态绑定) ) 动态绑定(也叫多态或迟绑定)动态绑定(也叫多态或迟绑定)它是指它是指“在执行期间在执行期间(而非编译期间而非编译期间)”判断所引用对象的实际类型,根据其实际的类判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。型调用其相应的方法。
8、多态的存在有三个必要的条件多态的存在有三个必要的条件 1. 要有继承要有继承 2. 要有重写要有重写 3. 父类引用指向子类对象父类引用指向子类对象(满足以上三个条件后,当你调用父类里面被重写的方法的时候,实际当中满足以上三个条件后,当你调用父类里面被重写的方法的时候,实际当中new的的是哪个子类对象,就调用该子类对象的方法是哪个子类对象,就调用该子类对象的方法)多态例子多态例子多态例子多态例子内容内容二. SSH框架介绍SSHMvcMVCMVC与SSHSSHStruct2Struct2介绍简化的简化的Struts 2 Struts 2 工作流程工作流程Struts2框架介绍框架介绍Strut
9、s 2 Struts 2 完整工作流程 Struts 2基础与配置基础与配置n Action的传值方式n Action中访问Servlet APIn Struts2中的配置文件n Action中定义多个方法Action的传值方式的传值方式n Struts2 中我们与外界交互,实现数据传递主要有两种方式 1. 字段驱动(Field-driven) 通过字段进行数据传递,表现为Action中定义各种Java基本类型的字段,命名这些字段与表单数据相对应,并利用这些字段进行数据传递 Action的传值方式的传值方式n 2. 模型驱动(Model-driven) 通过JavaBean模型进行数据传递.采
10、用这种方式,JavaBean所封装的属性与表单数据的属性一一对应,JavaBean将成为数据传递的载体. Action中访问中访问Servlet APIn 通过通过ActionContextActionContext访问访问Servlet APIServlet API(解耦合)(解耦合) ActionContext.getContent().getSession/getApplicationActionContext.getContent().getSession/getApplicationn 通过通过ServletActionContextServletActionContext(耦合)(
11、耦合)n 通过通过* *Aware()Aware()接口来得到接口来得到ServletAPIServletAPI ApplicationAwareApplicationAware CookiesAware CookiesAware ServletRequestAware ServletRequestAware ServletResponseAware ServletResponseAware SessionAware SessionAwareStruts核心过滤器配置核心过滤器配置n 配置web.xml将action请求交给Struts控制配置例子配置例子(Struts.xml)配置例子配置例
12、子(Struts-system.xml)多个多个Action使用一个配置使用一个配置 通常情况我们都将业务逻辑代码放的通常情况我们都将业务逻辑代码放的ActionAction中的中的excuteexcute方法中进行,但对方法中进行,但对于实现多个功能的于实现多个功能的ActionAction就不合适了就不合适了 使用传统方式:使用传统方式: 使用使用DMIDMI(动态方法调用)(动态方法调用): : s:form action=多个多个Action使用一个配置使用一个配置n 通常项目中会有很多个Action,完成的都是对每张表的增删改查,方法名一样,Action 的命名也非常相似,我们可以采
13、用通配符的做法,通配符可以有多个package name=system namespace=/system extends=gci-default action name= class=“com.gcidesign.1Action method=2 result name= /WEB-success/WEB-INF/pages/system/1/1_2.jspINF/pages/system/1/1_2.jsp result name= /WEB-login/WEB-INF/pages/system/1/1_2.jspINF/pages/system/1/1_2.jsp result name
14、= /WEB-input/WEB-INF/pages/system/1/1_2UI.jspINF/pages/system/1/1_2UI.jsp HibernateHibernate介绍课程目标课程目标 课程目标:课程目标:理解理解O/R MappingO/R Mapping原理原理掌握掌握HibernateHibernate开发的相关知识开发的相关知识能使用能使用HibernateHibernate进行实际项目开发进行实际项目开发 ORMORM即即Object-Relational MappingObject-Relational Mapping,它的作用是在关系型数据库和对,它的作用是在
15、关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,通常不象之间作一个映射,这样,我们在具体的操作数据库的时候,通常不需要再去和复杂的需要再去和复杂的SQLSQL语句打交道,只要像平时操作对象一样操作它语句打交道,只要像平时操作对象一样操作它就可以就可以 。 常用的常用的ORMORM框架框架 Hibernate Hibernate iBatis http:/iBatis http:/ Apache OJB /ojb/Apache OJB http
16、://ojb/ TopLink http:/ http:/ Castor JDO /jdo.htmlCastor JDO /jdo.html对象关系映射( (Object-Relational Mapping) ) JDBCJDBC的特点的特点: : 通常的系统设计,使用通常的系统设计,使用 JDBC JDBC 操作数据库,业务处理逻辑和数据存取逻操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。辑是混杂在一起的。一般基本都是如下几个步骤:1、建立数据库连接,获得 Connection
17、 对象。2、根据用户的输入组装查询 SQL 语句。3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。5、然后一条一条读取结果集 ResultSet 对象中的数据。6、根据读取到的数据,按特定的业务逻辑进行计算。7、根据计算得到的结果再组装更新 SQL 语句。8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。7、最后依次关闭各个 Statement 对象和 Connection 对象。 JDBCJDBC和具体的数据库产品绑
18、定和具体的数据库产品绑定, , 使得更换数据库产品有可能是个不可能使得更换数据库产品有可能是个不可能完成的任务。完成的任务。 ORMORM的主要目的是在数据处理层实现分离业务逻辑和数据逻辑的主要目的是在数据处理层实现分离业务逻辑和数据逻辑( (解耦合解耦合) )Why ORMWhy ORM?表示层表示层控制层控制层层层业务逻辑层业务逻辑层模型层模型层实体模型层(实体模型层(JavaBeanJavaBean)持久层持久层Hibernate APIHibernate APIJDBC APIJDBC APIJDBC APIJDBC API关系型数据库关系型数据库HibernateHibernate是
19、对JDBCJDBC的封装快速体验快速体验HibernateHibernate开发步骤开发步骤 我们来快速的体验了一下我们来快速的体验了一下HibernateHibernate实际所做的事情实际所做的事情 HibernateHibernate开发步骤开发步骤 实体类(持久化类)的设计实体类(持久化类)的设计 实体类与关系数据库的映射实体类与关系数据库的映射 应用的开发应用的开发创建持久化类创建持久化类 User.javaUser.javapublic class User public class User private String id;private String id;private
20、String name;private String name;private String password;private String password;private Date createTime;private Date createTime;private Date expireTime;private Date expireTime;.getters/setters.getters/setters 创建类的映射文件创建类的映射文件 User.hbm.xml User.hbm.xml!DOCTYPE hibernate-mapping PUBLIC http:/ 创建创建Hibe
21、rnateHibernate配置文件配置文件 hibernate.cfg.xml hibernate.cfg.xml将类的映射文件加入将类的映射文件加入HibernateHibernate创建数据库表创建数据库表 利用利用SchemaExportSchemaExport工具类工具类 利用利用HibernateHibernate提供的工具类来创建数据库表提供的工具类来创建数据库表 创建创建ExportToDBExportToDB类类public class ExportToDB public class ExportToDB public static void main(String args
22、) throws Exceptionpublic static void main(String args) throws Exception/读取配置文件读取配置文件Configuration cfg = new Configuration().configure();Configuration cfg = new Configuration().configure();/创建创建SchemaExportSchemaExport对象对象SchemaExport export = new SchemaExport(cfg);SchemaExport export = new SchemaExp
23、ort(cfg);/创建数据库表创建数据库表export.create(true,true);export.create(true,true); 将对象保存到数据库将对象保存到数据库 UserTest1.java UserTest1.javapublic static void main(String args) throws public static void main(String args) throws ExceptionExceptionConfiguration cfg = new Configuration cfg = new Configuration().configure
24、();Configuration().configure();SessionFactory factory = SessionFactory factory = cfg.buildSessionFactory();cfg.buildSessionFactory();Session session = factory.openSession();Session session = factory.openSession();session.beginTransaction();session.beginTransaction();User user = new User();User user
25、= new User();user.setName(user.setName(管理员管理员););user.setPassword(admin);user.setPassword(admin);user.setCreateTime(new Date();user.setCreateTime(new Date();user.setExpireTime(new Date();user.setExpireTime(new Date();session.save(user);session.save(user);session.getTransaction().commit();session.get
26、Transaction().commit();if(session.isOpen()if(session.isOpen()session.close();session.close(); HibernateHibernate的处理流程的处理流程认识认识HibernateHibernate的基本组件的基本组件 HibernateHibernate核心接口核心接口 实体类实体类 实体类映射文件实体类映射文件 HibernateHibernate配置文件配置文件HibernateHibernate核心接口核心接口ConfigurationConfiguration 概述:概述:Configurati
27、on Configuration 类负责管理类负责管理Hibernate Hibernate 的配置信息。它包括如下的配置信息。它包括如下内容:内容:q HibernateHibernate运行的底层信息:数据库的运行的底层信息:数据库的URLURL、用户名、密码、用户名、密码、JDBCJDBC驱动类,数驱动类,数据库据库Dialect,Dialect,数据库连接池等。数据库连接池等。q HibernateHibernate映射文件(映射文件(* *. .hbm.xmlhbm.xml)。)。 HibernateHibernate配置的两种方法:配置的两种方法:q 属性文件(属性文件(hiber
28、perties)。)。调用代码:调用代码:Configuration cfg = new Configuration(); Configuration cfg = new Configuration(); q XmlXml文件(文件(hibernate.cfg.xmlhibernate.cfg.xml)。)。调用代码:调用代码:Configuration cfg = new Configuration().configure();Configuration cfg = new Configuration().configure();Ses
29、sionFactorySessionFactory 概述:应用程序从概述:应用程序从SessionFactorySessionFactory(会话工厂)里获得会话工厂)里获得Session(Session(会话会话) )实例。它在多个应用线程间进行共享。通常情况下,整个应用只有实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂唯一的一个会话工厂例如在应用初始化时被创建。然而,如果你例如在应用初始化时被创建。然而,如果你使用使用HibernateHibernate访问多个数据库,你需要对每一个数据库使用一个会访问多个数据库,你需要对每一个数据库使用一个会话工厂。话工厂。
30、 会话工厂缓存了生成的会话工厂缓存了生成的SQLSQL语句和语句和HibernateHibernate在运行时使用的映射在运行时使用的映射元数据。元数据。 调用代码:调用代码:SessionFactory sessionFactory = cfg.buildSessionFactory();SessionFactory sessionFactory = cfg.buildSessionFactory(); 说明:说明:SessionFactorySessionFactory由由ConfigurationConfiguration对象创建,所以每个对象创建,所以每个HibernateHibern
31、ate配置文件,实际上是对配置文件,实际上是对SessionFactorySessionFactory的配置的配置SessionSession(会话)(会话) 概述:概述:q SessionSession不是线程安全的,它代表与数据库之间的一次操作,它的概念介不是线程安全的,它代表与数据库之间的一次操作,它的概念介于于ConnectionConnection和和TransactionTransaction之间。之间。q SessionSession也称为持久化管理器,因为它是与持久化有关的操作接口。也称为持久化管理器,因为它是与持久化有关的操作接口。q Session Session通过通过S
32、essionFactorySessionFactory打开,在所有的工作完成后,需要关闭。打开,在所有的工作完成后,需要关闭。q 它与它与WebWeb层的层的HttpSessionHttpSession没有任何关系。没有任何关系。 调用代码的方法调用代码的方法/每次都创建一个新的每次都创建一个新的sessionsessionSession session = sessionFactory.openSession();Session session = sessionFactory.openSession();/从当前从当前threadthread中获取中获取session,session,没有
33、则新建一个没有则新建一个Session session = sessionFactory.getCurrentSession(Session session = sessionFactory.getCurrentSession() )持久化对象的状态持久化对象的状态 瞬时对象瞬时对象( (Transient Objects)Transient Objects):使用使用new new 操作符初始化的对操作符初始化的对象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何象不是立刻就持久的。它们的状态是瞬时的,也就是说它们没有任何跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何
34、跟数据库表相关联的行为,只要应用不再引用这些对象(不再被任何其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。其它对象所引用),它们的状态将会丢失,并由垃圾回收机制回收。 持久化对象持久化对象( (Persist Objects)Persist Objects):持久实例是任何具有数据库持久实例是任何具有数据库标识的实例。它有持久化管理器标识的实例。它有持久化管理器SessionSession统一管理,持久实例是在事统一管理,持久实例是在事务中进行操作的务中进行操作的它们的状态在事务结束时同数据库进行同步。当它们的状态在事务结束时同数据库进行同步。当事务提交时,通过执行事务提交时,通
35、过执行SQLSQL的的INSERTINSERT、UPDATEUPDATE和和DELETEDELETE语句把内存中语句把内存中的状态同步到数据库中。的状态同步到数据库中。离线对象离线对象( (Detached ObjectsDetached Objects) ):SessionSession关闭之后,持关闭之后,持久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同久化对象就变为离线对象。离线表示这个对象不能再与数据库保持同步,它们不再受步,它们不再受HibernateHibernate管理。管理。持久化对象的状态持久化对象的状态持久化对象的生命周期(持久化对象的生命周期(lifecyc
36、lelifecycle)TransactionTransaction(事务)(事务) 概述:概述: 它将应用代码从底层的事务实现中抽象出来它将应用代码从底层的事务实现中抽象出来这可能是一个这可能是一个JDBCJDBC事务,一个事务,一个JTAJTA用户事务用户事务它允许应用通过一组一致的它允许应用通过一组一致的APIAPI控制控制事务边界。这有助于保持事务边界。这有助于保持HibernateHibernate应用在不同类型的执行环境或容应用在不同类型的执行环境或容器中的可移植性。器中的可移植性。 调用代码:调用代码: Transaction tx = session.beginTransact
37、ion(); Transaction tx = session.beginTransaction();v 注:注:使用使用HibernateHibernate进行操作时必须显式的调用进行操作时必须显式的调用TransactionTransaction(默认默认:autoCommit=falseautoCommit=false)。)。从代码中体会从代码中体会SessionSession和和TransactionTransactionSession session = factory.openSession();Session session = factory.openSession();ses
38、sion.beginTransaction();session.beginTransaction();User user = new User();User user = new User();user.setName(user.setName(管理员管理员););user.setPassword(admin);user.setPassword(admin);user.setCreateTime(new Date();user.setCreateTime(new Date();user.setExpireTime(new Date();user.setExpireTime(new Date()
39、;session.save(user);session.save(user);session.getTransaction().commit();session.getTransaction().commit();session.beginTransaction();session.beginTransaction();User user1 = new User();User user1 = new User();user1.setName(jjj);user1.setName(jjj);session.save(user1);session.save(user1);session.getTr
40、ansaction().commit();session.getTransaction().commit();if(session.isOpen()if(session.isOpen()session.close();session.close(); Query(Query(查询查询) ) 概述:概述:QueryQuery(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用查询语句使用HQLHQL或者本地数据库的或者本地数据库的SQLSQL方言编写。方言编写。 调用代码:调用代码:Query query = session.
41、createQuery(“from User”); Query query = session.createQuery(“from User”); QueryQuery举例举例Configuration cfg = new Configuration().configure();Configuration cfg = new Configuration().configure();SessionFactory factory = cfg.buildSessionFactory();SessionFactory factory = cfg.buildSessionFactory();Sessio
42、n session = factory.openSession();Session session = factory.openSession();session.beginTransaction();session.beginTransaction();Query query = session.createQuery(from User);Query query = session.createQuery(from User);List users = query.list();List users = query.list();for (Iterator iter = users.ite
43、rator(); iter.hasNext();) for (Iterator iter = users.iterator(); iter.hasNext();) User user = (User) iter.next();User user = (User) iter.next();System.out.println(user name = +user.getName();System.out.println(user name = +user.getName(); session.getTransaction().commit();session.getTransaction().co
44、mmit();if(session.isOpen()if(session.isOpen()session.close();session.close(); HibernateHibernate的对象关系映射的对象关系映射映射文件的基本结构举例映射文件的基本结构举例!DOCTYPE hibernate-mapping PUBLIC http:/ . . classclass元素元素 常用属性常用属性 name name 实体类的类名实体类的类名 table table 被映射到数据库表的名称被映射到数据库表的名称 可以包含的常见子元素可以包含的常见子元素 id id 主键定义主键定义 prope
45、rty property 属性定义属性定义 关系映射定义(一对多、多对一等)关系映射定义(一对多、多对一等)主键主键 id id 被映射的类必须要有一个被映射的类必须要有一个idid定义定义 通常使用逻辑主键通常使用逻辑主键 逻辑主键:没有意义的唯一标识符逻辑主键:没有意义的唯一标识符 业务主键:有意义的唯一标识符业务主键:有意义的唯一标识符 HibernateHibernate使用使用generatorgenerator类来生成主键类来生成主键 HibernateHibernate自带了很多自带了很多generatorgenerator(不同的主键生成策略)(不同的主键生成策略) int/l
46、ong nativeint/long native String uuidString uuid assignedassigned(手工指定)手工指定) 我们也可以定义自己的我们也可以定义自己的generatorgenerator 实现实现IdentifierGeneratorIdentifierGenerator接口接口 一般情况下不需要实现自己的一般情况下不需要实现自己的generatorgenerator普通属性映射普通属性映射 - property- property 可使用的常见属性如下:可使用的常见属性如下: name name 对应类的属性名称对应类的属性名称 type type
47、 指定属性的类型,一般情况下可以不用指定,由指定属性的类型,一般情况下可以不用指定,由hibernatehibernate自动自动匹配(可参考文档中的有关说明)匹配(可参考文档中的有关说明) length length 指定长度指定长度 column column 指定属性所对应的数据库字段的名称,如果不指定,就是属指定属性所对应的数据库字段的名称,如果不指定,就是属性的名称性的名称多对一关联映射多对一关联映射 many-to-onemany-to-onen User-Group User-Group 多个用户属于某个组多个用户属于某个组n 从代码上体现为:从代码上体现为:public cla
48、ss Group public class Group privte String id;privte String id;private String name;private String name;. public class Userpublic class Userprivate String id;private String id;privte String name;privte String name; private Group group;private Group group;public Group getGroup()return group;public Grou
49、p getGroup()return group;public void setGroup(Group group)public void setGroup(Group group)this.group = group;this.group = group; n many-to-onemany-to-one的映射最常用,也是最容易理解和编写的的映射最常用,也是最容易理解和编写的一对一关联映射一对一关联映射 (one-to-one)(one-to-one)n 两个对象之间是一对一的关系,如两个对象之间是一对一的关系,如Person-IdCardPerson-IdCardn 有两种策略可以实现一对
50、一的关联映射有两种策略可以实现一对一的关联映射n 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联表的主键来关联n 唯一唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系;一的限制之后,也可以用来表示一对一关联关系;一对一一对一 ( (主键关联映射主键关联映射) )nPer
51、sonPerson类类public class Person public class Person private int id; private int id; private IdCard idCard; private IdCard idCard; . n映射文件映射文件 class name=com.bjsxt.hibernate.Person generator class=foreign param idCardname=propertyidCard . . one-to-one name=idCard constrained=true/nIdCardIdCard类类public
52、 class IdCard public class IdCard private int id; private int id; private Person person; private Person person; n映射文件映射文件 class name=com.bjsxt.hibernate.IdCard generator class=“native/ . . one-to-one name=“person一对多关联映射一对多关联映射 (one-to-manyone-to-many)n 在对象模型中,一对多的关联关系,使用集合来表示在对象模型中,一对多的关联关系,使用集合来表示n
53、 比如比如ClassesClasses(班级)和(班级)和StudentStudent(学生)之间是一对多的关系(学生)之间是一对多的关系public class Classes public class Classes private String id;private String id;private String name;private String name;private Set students;private Set students;.public class Student public class Student private String id;private St
54、ring id;private String name;private String name; .一对多关联映射文件一对多关联映射文件n ClassesClasses映射文件映射文件 one-to-many class=com.bjsxt.hibernate.Student / 关于关于lazylazy属性属性n lazy lazy 延迟加载(懒加载),一般用于集合的抓取策略,也就是说延迟加载(懒加载),一般用于集合的抓取策略,也就是说只在需要用到的情况下,再发出只在需要用到的情况下,再发出selectselect语句,将其相关的对象查询出语句,将其相关的对象查询出来来n setset默认默
55、认lazylazy属性的值是属性的值是truetrue,即,即hibernatehibernate会自动使用懒加载策略,会自动使用懒加载策略,以提高性能以提高性能n 举例说明举例说明 one-to-many class=com.bjsxt.hibernate.Student / 关于关于inverseinverse属性属性n inverse inverse 标记由哪一方来维护关联关系(双向关联中会用到)标记由哪一方来维护关联关系(双向关联中会用到)n inverseinverse默认值为默认值为falsefalsen 如果如果inverseinverse设置为设置为truetrue,表示将由对
56、方维护两者之间的关联关系,表示将由对方维护两者之间的关联关系n 举例说明举例说明 one-to-many class=com.bjsxt.hibernate.Student / 多对多关联映射多对多关联映射 (many-to-manymany-to-many)n 一般的设计中,多对多关联映射,需要一个中间表一般的设计中,多对多关联映射,需要一个中间表n HibernateHibernate会自动生成中间表会自动生成中间表n HibernateHibernate使用使用many-to-manymany-to-many标签来表示多对多的关联标签来表示多对多的关联n 多对多的关联映射,在实体类中,跟
57、多对多的关联映射,在实体类中,跟一对多一对多一样,也是用集合来表示一样,也是用集合来表示的的例子例子(many to many)(many to many):student-trainClassstudent-trainClass class name=com.test.hibernate.Studentgenerator class=native/many-to-many class=com.test.hibernate.TrainClass column=trainClassId/ table=TBL_TRAIN_CLASSgenerator class=native/HibernateH
58、ibernate查询查询 概述:概述:数据查询与检索是数据查询与检索是HibernateHibernate中的一个亮点。相对其他中的一个亮点。相对其他ORMORM实实现而言,现而言,HibernateHibernate提供了灵活多样的查询机制。提供了灵活多样的查询机制。q 标准化对象查询标准化对象查询( (Criteria Query)Criteria Query):以对象的方式进行查询,将查询以对象的方式进行查询,将查询语句封装为对象操作。优点:可读性好,符合语句封装为对象操作。优点:可读性好,符合Java Java 程序员的编码习程序员的编码习惯。缺点:不够成熟,不支持投影(惯。缺点:不够
59、成熟,不支持投影(projectionprojection)或统计函数(或统计函数(aggregationaggregation)q HibernateHibernate语言查询(语言查询(Hibernate Query LanguageHibernate Query Language,HQLHQL):):它是它是完全完全面向对象的查询语句,查询功能非常强大,具备多态、关联等特性面向对象的查询语句,查询功能非常强大,具备多态、关联等特性 。HibernateHibernate官方推荐使用官方推荐使用HQLHQL进行查询。进行查询。q Native SQL QueriesNative SQL Q
60、ueries(原生原生SQLSQL查询)查询):直接使用标准:直接使用标准SQLSQL语言或跟特语言或跟特定数据库相关的定数据库相关的SQLSQL进行查询。进行查询。例子:标准化对象查询例子:标准化对象查询(Criteria Query)(Criteria Query) 简单例子:简单例子:查询用户名以查询用户名以“J”J”开头的所有用户。开头的所有用户。Criteria criteria = session.createCriteria(User.class);Criteria criteria = session.createCriteria(User.class); criteria.a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年护士执业资格考试题及答案
- 内蒙古自治区乌兰察布市集宁区第二中学2024-2025学年高一下学期4月月考 数学试题(含解析)
- 本溪初二语文考试题目及答案
- 招生直播测试题及答案
- 网络管理软件应用分析试题及答案
- 计算机三级软件测试在公共政策评估中的作用试题及答案
- 软考网络工程师常见考题预测试题及答案
- 西方政治考试的难点与突破口试题及答案
- 如何规划信息系统项目管理师的复习时间试题及答案
- 公共政策在生态保护中的重要性试题及答案
- 2025年生态环境保护知识测试题及答案
- 道路监控系统培训课件
- 2025年湖北省新高考信息卷(三)物理试题及答题
- 2025-2030年力控玩具项目投资价值分析报告
- 基于学校区域文化优势背景下的小学水墨画教学研究
- 设备欠款协议书范本
- 机柜租赁合同协议
- 2025年2月22日四川省公务员面试真题及答案解析(行政执法岗)
- 造价项目时效管理制度
- 腹腔镜手术术后腹胀护理
- 泥水平衡-沉井-顶管及沉井施工方案
评论
0/150
提交评论