• 数据持久化编程学习总结


    一、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进行业务管理

                





  • 相关阅读:
    第五章 运输层(UDP和TCP三次握手,四次挥手分析)
    Fluent Ribbon 第六步 StartScreen
    Fluent Ribbon 第七步 状态栏
    Fluent Ribbon 第八步 其他控件
    Avalondock 第四步 边缘停靠
    node.js开发学习一HelloWorld
    Winform应用程序实现通用遮罩层
    输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
    Navicat连接MySQL8+时出现2059报错
    win10安装MySql教程
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7066164.html
Copyright © 2020-2023  润新知