zoukankan      html  css  js  c++  java
  • 数据持久化编程学习总结

    一、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-Relative Database-Mapping框架就能自己主动生成SQL语句

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

           Hibernete是ORM框架的一种,相同可以自己主动生成SQL语句

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

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

           相应于数据库的表person(使用MySQL数据库)

    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进行事务管理

                      隐藏和封装了JDBC API

           缺点: 类似于使用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语句

                      在结构上表现为使用DAOPOJOdomain)实现数据持久化

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

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

                





  • 相关阅读:
    OSPF
    【今日CS 视觉论文速览】 24 Jan 2019
    【今日CS 视觉论文速览】Wed, 23 Jan 2019
    【今日CS 视觉论文速览】 21 Jan 2019
    【Processing学习笔记】安装与入门
    【今日CS 视觉论文速览】Part2, 18 Jan 2019
    【今日CS 视觉论文速览】Fri, 18 Jan 2019
    【今日CS 视觉论文速览】Thu, 17 Jan 2019
    【今日CS 视觉论文速览】Part2, 16 Jan 2019
    【今日CS 视觉论文速览】Wed, 16 Jan 2019
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7066164.html
Copyright © 2011-2022 走看看