一、ORM简介
对象关系映射(英语:Object Relational Mapping,简称ORM,或 O/R mapping)是一种为了解决面向对象语言与关系数据库存在的 互不匹配的现象。
二、实体类
实体类就是一个定义了属性,拥有getter、setter、无参构造方法 (基本必备)的一个类。实体类可以在数据传输过程中对数据进行封装,相当于一个“工具”、“容器”、“载体”,能存储、传输数据,能管理数据。
特点:
- 实体类名,尽量和数据库中的表名一一对应
- 实体类中的属性对应数据库表中的字段,相关的命名最好也一一对应
- 实体类内方法主要有,getter、setter方法,用于设置、获取数据
- 实体类属性一般为private类型,方法为public类型
- 实体类应该有,无参、有参构造方法
三、应用程序分层
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(); } } } } }