如何在Java中实现表单数据的持久化和持久化层管理?

1. 概述

在Web应用程序中,后端使用数据库来存储和管理数据非常常见。当表单数据来自用户提交时,我们需要将数据保存到数据库中以便于查询和使用。这种将数据保存在数据库中的方式称为持久化,在Java中实现表单数据的持久化需要使用一些持久化技术,比如JDBC和ORM框架。本文主要介绍如何使用JDBC和Hibernate来实现Java中表单数据的持久化。

2. JDBC实现表单数据的持久化(基础版)

2.1 准备工作

在使用JDBC之前,我们需要在项目中引入JDBC驱动器。这里我们以MySQL为例,先去MySQL官网下载合适的驱动器。

public class JDBCTest {

private static final String URL = "jdbc:mysql://localhost:3306/test";

private static final String USERNAME = "root";

private static final String PASSWORD = "root";

private static Connection conn;

static {

try {

// 加载驱动

Class.forName("com.mysql.jdbc.Driver");

// 建立连接

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

} catch (ClassNotFoundException | SQLException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

// 关闭连接资源

try {

if (conn != null && !conn.isClosed()) {

conn.close();

}

} catch (SQLException e) {

e.printStackTrace();

}

}

}

其中URL格式为:jdbc:mysql://主机地址:端口号/数据库名,USERNAME和PASSWORD为连接数据库的用户名和密码。

2.2 插入数据

下面我们演示如何使用JDBC实现表单数据的持久化。这里以向用户表中插入数据为例子。首先,我们需要创建一个包含用户信息的JavaBean:

public class User {

private int id;

private String name;

private String email;

public User(String name, String email) {

this.name = name;

this.email = email;

}

// getter和setter省略

}

然后,我们创建一个UserDao类,该类包含向用户表中插入数据的方法:

public class UserDao {

private Connection conn;

public UserDao(Connection conn) {

this.conn = conn;

}

public void addUser(User user) {

String sql = "insert into user(name, email) values(?, ?)";

try (PreparedStatement pstmt = conn.prepareStatement(sql)) {

pstmt.setString(1, user.getName());

pstmt.setString(2, user.getEmail());

pstmt.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

在这个方法中,我们使用PreparedStatement来向用户表中插入数据。这里使用了try-with-resources语句,可以避免手动关闭资源。

最后,在主函数中执行插入数据的代码:

public static void main(String[] args) {

User user = new User("小明", "xiaoming@test.com");

UserDao userDao = new UserDao(conn);

userDao.addUser(user);

}

以上代码完成了向用户表中插入数据的操作。当我们查看数据库中的user表时,会发现该表中多了一条记录。

2.3 查询数据

除了插入数据,我们也需要能够查询数据库中的数据。下面我们演示如何使用JDBC来查询用户表中的数据。首先,我们在UserDao中添加查询用户表中所有数据的方法:

public List<User> getAllUser() {

String sql = "select id, name, email from user";

try (PreparedStatement pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.executeQuery()) {

List<User> userList = new ArrayList<>();

while (rs.next()) {

int id = rs.getInt("id");

String name = rs.getString("name");

String email = rs.getString("email");

User user = new User(name, email);

user.setId(id);

userList.add(user);

}

return userList;

} catch (SQLException e) {

e.printStackTrace();

}

return null;

}

在该方法中,我们使用PreparedStatement查询用户表中的所有数据,并且将查询结果映射到User实体类中的属性。最后,该方法返回一个包含所有User对象的List集合。

然后,在主函数中调用查询数据的代码:

public static void main(String[] args) {

UserDao userDao = new UserDao(conn);

List<User> userList = userDao.getAllUser();

for (User user : userList) {

System.out.println(user.getName() + " " + user.getEmail());

}

}

以上代码完成了查询用户表中所有数据的操作。当我们运行该程序时,会输出所有用户的名称和邮箱。

3. Hibernate实现表单数据的持久化(进阶版)

3.1 准备工作

在使用Hibernate之前,我们需要在项目中引入Hibernate依赖。这里我们使用Maven来管理依赖,并且以MySQL为例:

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>5.4.30.Final</version>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>8.0.23</version>

</dependency>

创建一个Hibernate的配置文件hibernate.cfg.xml:

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">root</property>

<property name="hibernate.dialect">org.hibernate.dialect.MySQL8Dialect</property>

<property name="hbm2ddl.auto">update</property>

<property name="show_sql">true</property>

<mapping class="User"/>

</session-factory>

</hibernate-configuration>

其中,hibernate.connection.url,hibernate.connection.username和hibernate.connection.password为连接MySQL数据库所需的URL、用户名和密码。hibernate.dialect为MySQL数据库的方言,hbm2ddl.auto为自动生成数据库表结构,show_sql为输出执行的SQL语句,mapping class为映射实体类。

3.2 插入数据

使用Hibernate时,我们需要定义持久化实体类,并使用Hibernate的API操作实体类。首先,我们创建一个实体类User,它与JDBC中的User实体类相同:

@Entity

@Table(name = "user")

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private int id;

private String name;

private String email;

public User(String name, String email) {

this.name = name;

this.email = email;

}

// getter和setter省略

}

然后,我们创建一个UserDao类,该类包含向用户表中插入数据的方法:

public class UserDao {

private SessionFactory sessionFactory;

private Session session;

public UserDao(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

public void addUser(User user) {

session = sessionFactory.getCurrentSession();

session.beginTransaction();

session.save(user);

session.getTransaction().commit();

}

}

在该方法中,我们使用Session对象的save方法保存用户信息,session.beginTransaction()开启事务,session.getTransaction().commit()提交事务。

最后,在主函数中执行插入数据的代码:

public static void main(String[] args) {

Configuration configuration = new Configuration().configure();

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()

.applySettings(configuration.getProperties()).build();

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

UserDao userDao = new UserDao(sessionFactory);

User user = new User("小红", "xiaohong@test.com");

userDao.addUser(user);

}

以上代码完成了向用户表中插入数据的操作。当我们查看数据库中的user表时,会发现该表中多了一条记录。

3.3 查询数据

除了插入数据,我们也需要能够查询数据库中的数据。下面我们演示如何使用Hibernate来查询用户表中的数据。首先,我们在UserDao中添加查询用户表中所有数据的方法:

public List<User> getAllUser() {

session = sessionFactory.getCurrentSession();

session.beginTransaction();

List<User> userList = session.createQuery("from User").getResultList();

session.getTransaction().commit();

return userList;

}

在该方法中,我们使用Session对象的createQuery方法查询用户表中的所有数据,然后返回一个包含所有User对象的List集合。

然后,在主函数中调用查询数据的代码:

public static void main(String[] args) {

Configuration configuration = new Configuration().configure();

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()

.applySettings(configuration.getProperties()).build();

SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

UserDao userDao = new UserDao(sessionFactory);

List<User> userList = userDao.getAllUser();

for (User user : userList) {

System.out.println(user.getName() + " " + user.getEmail());

}

}

以上代码完成了查询用户表中所有数据的操作。当我们运行该程序时,会输出所有用户的名称和邮箱。

4. 结论

本文主要介绍了如何使用JDBC和Hibernate来实现Java中表单数据的持久化。JDBC是一种基础的持久化技术,使用较为灵活。而Hibernate是一种ORM框架,使用更加方便,可以帮助我们实现更多的持久化操作。不同情况下选择不同的技术,既要考虑开发效率,又要考虑性能等因素。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签