资源预览内容
第1页 / 共33页
第2页 / 共33页
第3页 / 共33页
第4页 / 共33页
第5页 / 共33页
第6页 / 共33页
第7页 / 共33页
第8页 / 共33页
第9页 / 共33页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
案例二、 JAVA 数据库访问,从数据库访问中理解面向对象在其中发挥的作用。,面向对象案例分析与程序开发 (专业学位课),JDBC,创建数据库 CREATE TABLE userinfo (userId bigint(8) unsigned NOT NULL auto_increment,passWord varchar(50) NOT NULL COMMENT 密码,userName varchar(50) NOT NULL COMMENT 用户名,departmentId bigint(8) default NULL COMMENT 所属部门,Tel varchar(50) default COMMENT 联系电话,Description varchar(255) default COMMENT 用户描述,PRIMARY KEY (userId) ),程序步骤:,加载JDBC驱动程序Class.forName(“com.mysql.jdbc.Driver“);,获得数据库连接,String url=“jdbc:mysql:/localhost:3306/test“; Connection con = DriverManager.getConnection(url,“root“,“root“);,不同的数据库,DriverClass和URL是不同的,Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:127.0.0.1:1521:dbnameSql Server2005 com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver:/localhost:1433; DatabaseName=dbname,执行SQL语句,Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery(“SELECT * FROM userinfo“);int rows = stmt.executeUpdate(“INSERT INTO .“) ; boolean flag = stmt.execute(String sql) ;,获取数据,while(rs.next() String name=rs.getString(“userName“); String pass=rs.getString(“passWord“); System.out.println(name); ,关闭连接,rs.close() ; stmt.close() ; conn.close() ;,数据存储过程中的面向对象 JAVABean是否能够借助面向对象思想将过程简单化? JDBCUtil,讨论:例子中JDBCUtil类是否能够继续扩展功能。 分页功能,数据获取功能,元数据的作用,JDBC支持元数据DatabaseMetaData和ResultSetMetaData 就是两个常用的获取数据库元数据相关信息的接口,利用元数据继续修改JDBCUtil,获取元数据对象:ResultSet. getMetaData() 获得代表ResultSet对象元数据的ResultSetMetaData对象。 相关方法: ResultSetMetaData对象 getColumnCount() 返回resultset对象的列数 getColumnName(int column) 获得指定列的名称 getColumnTypeName(int column) 获得指定列的类型,反射,反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。,Oracle官方对反射的解释是,Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.,简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。 程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。,反射最重要的用途就是开发各种通用框架,很多框架(比如Spring)都是配置化的(比如通过XML文件配置JavaBean,Action之类的),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射运行时动态加载需要加载的对象。,反射的基本运用,获得Class对象 判断是否为某个类的实例 创建实例 获取方法 获取构造器信息 获取类的成员变量(字段)信息 调用方法,进军Hibernate-理解框架,利用元数据访问数据库,性能开销太大。 考虑使用表数据预定义的方式来进行访问。 或者采用Hibernate技术。,Hibernate技术 开放源代码的对象关系映射框架,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装。Hibernate将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。,POJO (Plain Ordinary Java Object),简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。 使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,没有业务逻辑,有时可以作为VO(value -object)或dto(Data Transform Object)来使用,ORM(对象关系映射),Object Relational Mapping,简称ORM,或O/RM,或O/R mapping。 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的-“虚拟对象数据库”。,Hibernate使用步骤,建立工程 添加Jar包 建立Hibernate配置文件 建立JavaBean和映射文件 利用HQL或SQL操作数据库,Hibernate配置文件,1:缺省名称为 hibernate.cfg.xml 2:存放在当前classes的根目录下,开发的时候在src根下就可以了 3:主要有如下四部分配置 : (1)与DB的连接 (2)可选配置 (3)资源文件注册 (4)二级缓存,Hibernate配置文件,jdbc:mysql:/localhost:3306/test com.mysql.jdbc.Driver root root org.hibernate.dialect.MySQLDialect true,JAVABean映射文件xxx.hbm.xml,1:与被描述的类同名 ,如:UserModel.hbm.xml 2:存放位置与所描述类存放在同一文件夹下 3:主要有如下四部分配置 : (1)类和表的映射 (2)主键的映射 (3)类的属性和DB中字段的映射 (4)关系的映射,JAVABean映射文件xxx.hbm.xml,jdbc:mysql:/localhost:3306/test com.mysql.jdbc.Driver root root org.hibernate.dialect.MySQLDialect true,利用HQL或SQL操作数据库,首先获得会话工厂对象 SessionFactory sf = new Configuration().configure().buildSessionFactory(); 获得会话对象 s = sf.openSession(); 存储:s.save(obj); 查询:s.createQuery(“from userinfo“); s.createSQLQuery(“select * from userinfo“);,数据库连接池技术,什么是连接池技术? 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 思考:为什么要使用连接池技术?,数据库连接池技术实现,借助第三方类库实现: C3P0、Proxool、Jakarta DBCP 、DBPool 本课程以C3P0为例,数据库连接池技术在JDBC中使用,src路径下提供一个c3p0-config.xml文件。 注意:文件名必须固定例子:c3p0-config.xml 从连接池拿到连接 ComboPooledDataSource ds = new ComboPooledDataSource(“mySource“); Connection con = ds.getConnection();,数据库连接池技术在Hibernate中使用,导入C3P0的jar文件; 需要修改Hibernate配置文件: 10 5 2 2000 2000 10,讨论: 程序使用数据库连接池后,如何验证(测试)其是否起作用?,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号