☰
ORM 编程思想及应用程序分层
2026/11/5 5:07:57 网站建设 项目流程

一、ORM简介

对象关系映射(英语:Object Relational Mapping,简称ORM,或 O/R mapping)是一种为了解决面向对象语言与关系数据库存在的 互不匹配的现象。

二、实体类

实体类就是一个定义了属性,拥有getter、setter、无参构造方法 (基本必备)的一个类。实体类可以在数据传输过程中对数据进行封装,相当于一个“工具”、“容器”、“载体”,能存储、传输数据,能管理数据。

特点:

  1. 实体类名,尽量和数据库中的表名一一对应
  2. 实体类中的属性对应数据库表中的字段,相关的命名最好也一一对应
  3. 实体类内方法主要有,getter、setter方法,用于设置、获取数据
  4. 实体类属性一般为private类型,方法为public类型
  5. 实体类应该有,无参、有参构造方法

三、应用程序分层

3.1 应用程序分层简介

应用程序分层是指通过创建不同的包来实现项目的分层,将项目中的代码根据功能做具体划分,并存放在不同的包下。

3.2 三层结构

三层结构就是将整个业务应用划分为:表述层、业务逻辑层、数据访问层。区分层次的目的即为了“高内聚 低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。

分层优点

3.3 分层命名

3.4 应用程序分层实现

3.4.1在分层项目中实现查询业务

①dao

UserDao接口

UserDaoImpl接口实现类



②service

UserService接口

UserServiceImpl接口实现类

③web

3.4.2封装通用的BaseDao

封装通用的DML操作

BaseDao接口

BaseDaoImpl接口实现类


UsersDao接口

UsersDaoImpl接口实现类



封装通用的查询操作

BaseDao接口

BaseDaoImpl接口实现类






UsersDao接口

UsersDaoImpl接口实现类




四、对象的关联关系

4.1 关联关系简介

关联关系(Association),是一种拥有的关系,它使一个对象知道另一个对象的属性和方法。关联可以是双向的,也可以是单向的。在 Java语言中,关联关系一般使用成员变量来实现。

4.2 对象的关联关系解决了什么问题

在多表查询时,使用对象关联关系能够更合理的存放查询到的结果集数据。

4.3 关联关系的方向性

4.4 实例

对象的关联关系

Users对象



Orders对象


五、封装JDBCUtils类

import java.io.InputStream; import java.sql.*; import java.util.Properties; public class JDBCUtils { private static String url =null; private static String name =null; private static String pwd =null; static { try{ Properties prop = new Properties(); InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); prop.load(in); url = prop.getProperty("url"); name = prop.getProperty("name"); pwd = prop.getProperty("pwd"); }catch(Exception e){ e.printStackTrace(); } } //获取数据库连接对象 public static Connection getConnection() { Connection connection = null; try { connection = DriverManager.getConnection(url,name,pwd); } catch (SQLException throwables) { throwables.printStackTrace(); } return connection; } //关闭连接对象 public static void closeConnection(Connection connection){ try { connection.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //提交事务 public static void commit(Connection connection){ try { connection.commit(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //事务回滚 public static void rollback(Connection connection){ try { connection.rollback(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //关闭Statement对象 public static void closeStatement(Statement statement){ try { statement.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //关闭ResultSet public static void closeResultSet(ResultSet resultSet) { try { resultSet.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } //DML操作时关闭资源 public static void closeResource(Statement statement,Connection connection){ //先关闭Statement对象 closeStatement(statement); //在关闭Connection对象 closeConnection(connection); } //查询时关闭资源 public static void closeResource(ResultSet resultSet,Statement statement,Connection connection){ //先关闭ResultSet closeResultSet(resultSet); //在闭Statement对象 closeStatement(statement); //最后关闭Connection对象 closeConnection(connection); } }
url=jdbc:mysql://localhost:3306/db1 name=root pwd=123456

六、通过druid重构JDBCUtils

import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; public class JDBCUtilsDruid { private static DataSource ds = null; static{ try { InputStream is = JDBCUtilsDruid.class.getClassLoader().getResourceAsStream("druid.properties"); Properties prop = new Properties(); prop.load(is); ds = DruidDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() throws Exception { Connection conn = null; conn = ds.getConnection(); return conn; } public static void close(Connection conn, Statement statement) throws Exception { try { if (statement != null) { statement.close(); } } catch (SQLException e) { e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询