在线访问意味着设备或用户在连接网络的状态下,能够即时与远程服务器或云端资源进行交互。在当今数字化时代,大多数基于网络的应用和服务都依赖在线访问来实现其功能。
Data Access Object(DAO)是一种设计模式,它的主要作用是将数据访问逻辑从业务逻辑中分离出来。通过使用 DAO,业务逻辑代码可以专注于处理业务规则,而无需关心数据的存储和检索细节。
ProductDAO
类可以负责将产品信息存储到数据库中,并从数据库中查询产品信息。4.示例代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
// 产品数据传输对象
class ProductDTO {
private int id;
private String name;
private double price;
public ProductDTO(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
// Getters 和 Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
// 产品数据访问对象
class ProductDAO {
private static final String DB_URL = "jdbc:sqlite:products.db";
public void createTable() {
String sql = "CREATE TABLE IF NOT EXISTS products ("
+ "id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ "name TEXT NOT NULL,"
+ "price REAL NOT NULL"
+ ")";
try (Connection conn = DriverManager.getConnection(DB_URL);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.execute();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public void addProduct(ProductDTO product) {
String sql = "INSERT INTO products(name, price) VALUES(?,?)";
try (Connection conn = DriverManager.getConnection(DB_URL);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, product.getName());
pstmt.setDouble(2, product.getPrice());
pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public List getAllProducts() {
List products = new ArrayList<>();
String sql = "SELECT * FROM products";
try (Connection conn = DriverManager.getConnection(DB_URL);
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
double price = rs.getDouble("price");
products.add(new ProductDTO(id, name, price));
}
} catch (SQLException e) {
System.out.println(e.getMessage());
}
return products;
}
}
Data Transfer Object(DTO)是一种用于在不同层(如表示层和业务层、业务层和数据访问层)之间传输数据的对象。它通常是一个简单的 JavaBean 或 POJO(Plain Old Java Object),只包含数据和对应的 getter 和 setter 方法,不包含任何业务逻辑。
UserDTO
对象中,然后将该对象传输到前端页面进行显示。UserDTO
对象中进行传输。UserDTO
和 OrderDTO
来传输用户和订单的相关信息。UserDTO
对象,并以 JSON 格式返回给前端,前端可以直接使用这些数据进行页面渲染。// 用户数据传输对象
class UserDTO {
private int id;
private String name;
private String email;
public UserDTO(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters 和 Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "UserDTO{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
离线数据模式指的是应用程序在没有网络连接的情况下,仍然能够访问和处理数据。为了实现这一模式,应用程序通常会在本地存储数据,如使用本地数据库(如 SQLite)、文件系统或缓存等。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
// 离线数据存储类
class OfflineDataStorage {
private static final String FILE_NAME = "offline_data.ser";
public static void saveData(List data) {
try (FileOutputStream fos = new FileOutputStream(FILE_NAME);
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(data);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static List loadData() {
List data = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(FILE_NAME);
ObjectInputStream ois = new ObjectInputStream(fis)) {
data = (List) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
System.out.println(e.getMessage());
}
return data;
}
}
对象 / 关系映射(ORM)是一种编程技术,用于将面向对象编程语言中的对象模型与关系型数据库中的数据模型进行映射。通过 ORM,开发人员可以使用面向对象的方式操作数据库,而无需编写复杂的 SQL 语句。
User
类,ORM 框架会将 User
类映射到数据库中的 users
表,User
类的属性(如 id
、name
、email
等)映射到 users
表的列。user.save()
方法时,ORM 框架会将其转换为 INSERT
或 UPDATE
SQL 语句,将对象的数据保存到数据库中。pom.xml
中添加 Hibernate 依赖:
org.hibernate
hibernate-core
5.4.32.Final
com.h2database
h2
1.4.200
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.util.List;
// 用户实体类
class User {
private int id;
private String name;
private String email;
public User() {
}
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getters 和 Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}';
}
}
// Hibernate 配置和操作示例
public class HibernateExample {
public static void main(String[] args) {
// 创建配置对象
Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
config.addAnnotatedClass(User.class);
// 创建会话工厂
SessionFactory sessionFactory = config.buildSessionFactory();
// 创建会话
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
// 开始事务
transaction = session.beginTransaction();
// 创建用户对象
User user = new User("John Doe", "[email protected]");
// 保存用户对象
session.save(user);
// 提交事务
transaction.commit();
// 查询所有用户
List users = session.createQuery("FROM User", User.class).getResultList();
for (User u : users) {
System.out.println(u);
}
} catch (Exception e) {
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
} finally {
// 关闭会话
session.close();
// 关闭会话工厂
sessionFactory.close();
}
}
}
hibernate.cfg.xml
配置文件示例:
org.h2.Driver
jdbc:h2:mem:testdb
sa
org.hibernate.dialect.H2Dialect
true
create-drop
上述代码涵盖了 DAO、DTO、离线数据模式和 ORM 的 Java 实现。其中 DAO 负责数据的增删改查操作;DTO 用于在不同层之间传输数据;离线数据模式通过文件存储和读取实现;ORM 借助 Hibernate 框架实现对象和数据库表的映射。