数据持久化编程学习总结

一、JDBC编程

1. 使用JDBC规范

在数据库编程方面,最先使用的数据持久化技术无疑是JDBC

可以说JDBC(Java Data Base Connectivity)是学习其它数据持久化技术的基础

Java中访问数据库使用的就是JDBC,基本操作有CRUD(Create-Read-Update-Delete)

JDBC定义了数据库的连接,SQL语句的执行以及查询结果集的遍历,一般操作步骤如下:

1.      注册驱动:DriverManager.registerDriver(driver);

2.      建立连接:Connection conn = DriverManager.getConnection(url, "username","password");

3.      获取对象:Statement stmt = conn.createStatement();

4.      执行查询:ResultSet rs = stmt.executeQuery(sqlstring);

5.      处理结果:while (rs.next()){doing something about the result}

6.      释放连接:rs.close(); stmt.close();conn.close();

总结:在初学阶段,无疑是必须学会使用原生态的JDBC进行数据库编程

优点:JDBC为数据库编程提供了可能,规范了数据库的连接和操作方式

缺点:JDBC API和SQL语句与Servlet和JSP夹杂在一起

每次进行数据库操作都要进行对象的创建与销毁

二、JDBC高级应用

1. 使用DAO模式

大量进行JDBC编程后,就积累了不少经验和发现不少缺点,于是对JDBC进行分层和模块化

而DAO(Data Access Object)和POJO(Plain Old Java Object)则是JDBC下常用的模式

在DAO模式出现之前,操作数据库的代码与业务代码均出现在Servlet或者JSP中

SQL语句、Java语句和Html语句夹杂在一起了,导致开发效率很底下

而使用了DAO模式后,所有的JDBC API和SQL语句均移到了DAO层

实现分层后Servlet、JSP只与Java Bean、DAO层交互,而不会有JDBC API和SQL语句

这无疑增加了程序的清晰性、可读性,而且其可重用性比较好

2. 使用DBCP

在JDBC编程中,每一次的数据操作,都要创建并销毁conn对象、stmt对象和rs对象

繁琐的创建和销毁这些对象无疑会消耗一定的时间和IO资源,在并发访问时尤其明显

使用数据源DBCP(DataBase connection pool)技术可以解决这一问题

数据源一般配置在xml文件中,使用数据源会自动进行优化和管理,一般配置如下:

		<property name="driverClassName" value=" driverClassName "></property>
		<property name="url" value="jdbc url "></property>
		<property name="username" value=" username "></property>
		<property name="password" value=" password "></property>

总结:DAO模式解决了JDBC API和SQL语句与JSP的夹杂问题并实现了分层

DBCP则为繁琐的创建和销毁对象提供了解决方法

三、使用ORM框架Hibernate进行数据库编程

1. ORM框架的基本原理

DAO模式无非就是手动将POJO拆分并拼装成SQL语句和将SQL查询结果拼装回POJO

在使用了JDBC高级技术和DAO模式进行编程后,仍然需要编写大量的SQL语句

而ORM通过xml配置文件或使用Java注解的方式把Java对象映射到数据库上

这样ORM(Object-RelativeDatabase-Mapping)框架就能自动生成SQL语句

2. 使用ORM框架Hibernate进行数据库编程

Hibernete是ORM框架的一种,同样能够自动生成SQL语句

在DAO模式中,一个简单的Person POJO如下(省略getter和setter方法):

public class Person {
	private Integer id;
	private String name;
}

对应于数据库的表person

create table if not exists person (
   id int primary key auto_increment,
   name varchar(20) not null,
);

使用Java注解后Person POJO实体类能映射到数据库上,并能自动生成SQL语句

代码如下(省略getter和setter方法):

	@Entity
	@Table(name = "person")
	public class Person{
	     @Id
	     @GeneratedValue(strategy= IDENTITY)
	     private Integer id;
	     @Column(name = "name")
	     private String name;
	}

Hibernate使用Session和HQL语句进行数据库的相关操作,如查询数据的操作如下:

       Session session =HibernateSessionFactory.getSessionFactory().openSession();
       String queryString = "select p.id,p.name from Person p";
       //查询并输出所有的记录
       List<Object[]> personList =session.createQuery(queryString).list();
       for(Object[] row : personList){
           for(Object obj : row)
                System.out.print("  " + obj);
           System.out.println();
       }
       session.close();

总结:ORM这类的框架解决了DAO层需要编写大量的SQL语句的问题

Hibernate使用HQL解决了数据库的移植问题

优点:无需再编写大量的SQL语句并解决了数据库移植问题

缺点:在数据库事务操作上然后要编写较多的代码

四、使用JPA规范进行数据库编程

1. 使用JPA规范

由于人们使用各种不同的数据库如Oracle、DB2、MySQL和SQL Server等进行数据存储

所以进行数据库连接的方式必然多种多样,而JDBC则规范了数据库的连接方式

同样的道理,各种ORM框架的出现必然会使开发和维护的难度升级

所以Java官方又推出了JPA规范,旨在规范各种ORM框架,使其有统一的接口和方法

使用JPA规范进行数据库编程只需指定一种ORM框架作为底层的实现,如Hibernate

如果需要更换其它的ORM框架则只需在配置文件中修改,类似于更换其它的数据库

而JPA规范则使用EntityManager进行相关的数据库操作,如查找操作如下:

	public boolean findPersonByName(String name) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unitname");
		EntityManager em = emf.createEntityManager();
		Person person = em. findPersonByName(name);
		if (a == null)
			return false;
		return true;
	}

总结:JPA需要指定一种ORM框架作为底层的实现

JPA也是使用Java注解配置POJO,使用EntityManager进行相关的数据库操作

优点:JPA规范旨在规范各种ORM框架,使其有统一的接口和方法

缺点:仍然需要对事务管理进行编程

五、使用SpringDAO进行数据库编程

SpringDAO对JDBC进行了封装,结合DAO模式进行使用

SpringDAO规范使用JDBCTemplate进行相关的数据库操作,如查找操作如下:

public int getPersonCount(){
     String sql = "select count(*) from person";
     return getJdbcTemplate().queryForInt(sql);
}

总结:SpringDAO对JDBC进行了封装,隐藏了JDBC API,只需使用getJdbcTemplate()方法

类似于使用DAO模式,只是封装了JDBC和提供了事务管理

优点:能够通过使用Spring进行事务管理

隐藏和封装了JDBCAPI

缺点: 类似于使用DAO模式,仍然需要编写和使用大量的SQL语句

六、使用SpringORM进行数据库编程

SpringORM就是为了解决SpringDAO的缺点,让其完善起来

这样一来,SpringORM就有了所有的优点,包括能够使用DAO模式进行分层

能够使用ORM框架解决编写大量的SQL语句的问题

隐藏和封装了JDBC API,只需使用getHibernateTemplate()方法

能够使用HQL解决数据库的移植问题,并且通过使用Spring进行事务管理

总结:使用SpringORM进行数据持久化编程是相对比较理想的

补充:使用SSH框架进行Java Web编程能够做到合理分层

能将业务逻辑、数据持久化和表现逻辑明确分开,思路清晰

表现逻辑层中的Struts2是MVC框架,能够进行页面导航和实现视图显示

在结构上表现为使用action进行页面导航,使用JSP作为视图界面

数据持久层中的Hibernate则是持久化ORM框架,能够自动生成SQL语句

在结构上表现为使用DAO和POJO(domain)实现数据持久化

业务逻辑层的Spring则能使用简单的封装好的JDBC进行CRUD和事务管理

在结构上表现为使用service进行业务管理

数据持久化编程学习总结,布布扣,bubuko.com

时间: 2024-12-24 00:29:19

数据持久化编程学习总结的相关文章

JavaScript数据可视化编程学习(一)Flotr2,包含简单的,柱状图,折线图,饼图,散点图

一.基础柱状图 二.基础的折线图 三.基础的饼图 四.基础的散点图 一.基础柱状图 如果你还没有想好你的数据用什么类型的图表来展示你的数据,你应该首先考虑是否可以做成柱状图.柱状图可以表示数据的变化过程或者表示多个数据之间的差异. 1.引入javascrippt 使用flotr2这个JavaScript库来创建图表.使用flotr2之前,不需要引入其他的JavaScript库(比如jquery),但是flotr2必须依赖HTML5的canvas元素的支持.canvas支持的主流浏览器有:chro

由ORM谈数据持久化

什么是ORM ORM(ObjectRelational Mapping)对象-关系映射,是随着面向对象的软件开发发展而产生的.ORM是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的"虚拟对象数据库"即将关系数据库在编程语言中以对象的形式出现. 为什么要用ORM 1:直观上来说几乎在所有的面向对象程序里面,都存在对象和关系数据库.在业务逻辑层和用户界面层中,我们是面向对象的,但是当对象信息发生改变的时候,我们需要把

Unity游戏开发学习之路——数据持久化

数据持久化 谈到数据持久化,在Unity的游戏开发中十分重要的,不管是是在本地和服务器端,数据持久化都是我们学习的难点,数据持久化的技术有很多种,这里只选取几种,目前也是我所学到的,在接下来的时间里会陆续整理到这里. Part1:PlayerPrefs类 这是unity圣典中给出的, PlayerPrefs 游戏存档 Description 描述 在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. Editor/Standalone 编辑器 / 桌面平台 Mac OS 在M

UI学习笔记---第十四天数据持久化

一.沙盒机制 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内斗放在了统一的文件夹目录下 沙盘路径的位置 1. 通过Finder查找程序沙盘相对路径 ~/Library/Application Support/iPhone Simulator 2. 通过代码查找程序沙盘相对路径 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory,NSSearc

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

IOS学习:ios中的数据持久化初级(文件、xml、json、sqlite、CoreData)

IOS学习:ios中的数据持久化初级(文件.xml.json.sqlite.CoreData) 分类: ios开发学习2013-05-30 10:03 2316人阅读 评论(2) 收藏 举报 iOSXMLJSONSQLiteCoreData 一.文件操作 1.因为应用是在沙盒(Sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件: * Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录 * tmp:存放临时文件,iTunes不会备份和恢复

iOS学习笔记-数据持久化

在iOS学习过程中,有时候需要保持用户数据,比如登录信息.用户的设置选项等,这时候就需要学习数据持久化操作,本节主要学习iOS数据持久化相关的知识. 数据持久化的方式有四种: 1).写入plist文件(属性列表) 2).偏好设置 3).归档(NSKeyedArchiver) 4).NSData 下面分别举例说明四种方式的适用场合以及用法. 1. 写入plist文件(属性列表) 1.1 plist可以存储哪些数据 属性列表是一种XML格式的文件,拓展名为plist 如果对象是NSString.NS

ios学习笔记——数据持久化

一.沙盒 沙盒目录是一种数据安全策略,很多系统都采用沙盒设计. 沙盒目录设计的原理就是只能允许自己的应用程序访问目录,而不允许其他的应用访问. 1.Documents目录:该目录用于存储非常大的文件或非常频繁更新的数据,能够进行iTunes或iCloud的备份,获取目录位置的代码如下: 1 NSString * pathArr = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) la

Docker 容器数据 持久化(系统学习Docker05)

写在前面 本来是可以将数据存储在 容器内部 的.但是存在容器内部,一旦容器被删除掉或者容器毁坏(我亲身经历的痛,当时我们的大数据平台就是运行在docker容器内,有次停电后,不管怎样容器都起不来.以前的同事也没有将数据映射到外面 .搞得最后我们重新导的数据,痛的领悟啊~~). 再就是如果不将数据映射出来 ,比如要想使用容器内部的web日志,也是比较难搞,反正不就是其它容器/服务不是很方便. 大体上来说,一般只要使用Docker都会将 重要的数据 进行持久化. 本文有任何问题,欢迎留言指正~ Do