32 ORM框架的基础与应用

32 ORM框架的基础与应用

什么是ORM框架

ORM(Object-Relational Mapping)框架是一种用于将对象与数据库之间的关系进行映射的工具。通过ORM,开发者可以使用面向对象的方式来操作数据库,而无需直接编写SQL语句。ORM框架能够自动处理数据的持久化,提供更高效的开发体验。

ORM的基本概念

1. 映射(Mapping)

ORM框架通过映射将数据库中的表转化为对象。每一行数据对应一个对象,每个数据字段对应对象的属性。这种映射关系使得我们可以用对象的方法来操作数据库。

2. 实体类(Entity Class)

实体类是ORM框架中定义的与数据库表相对应的 Java 类。每个实体类的属性对应数据库表中的字段。

1
2
3
4
5
6
7
8
// 示例:User实体类
public class User {
private Long id; // 对应数据库表中的id字段
private String name; // 对应数据库表中的name字段
private String email; // 对应数据库表中的email字段

// 省略构造函数、getter和setter方法
}

3. 会话(Session)

会话是ORM框架中的一个核心概念,负责与数据库进行交互。通过会话,我们可以执行CRUD(创建、读取、更新、删除)操作。

常见的Java ORM框架

  • Hibernate:最流行的ORM框架之一,提供了广泛的特性和良好的支持。
  • MyBatis:半ORM框架,支持定制SQL,但需要手动编写SQL语句。
  • JPA(Java Persistence API):Java EE标准接口,常与Hibernate一起使用。

Hibernate的基础应用

1. Maven依赖

在使用Hibernate之前,我们需要在项目中添加Hibernate的依赖。在pom.xml中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.32.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.32.Final</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>

2. Hibernate配置

在项目根目录下创建hibernate.cfg.xml配置文件,配置数据库连接信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hbm-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/testdb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping class="com.example.User"/>
</session-factory>
</hibernate-configuration>

3. 创建SessionFactory

在Java代码中,创建一个SessionFactory实例,供后续的会话使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
private static SessionFactory sessionFactory;

static {
// 创建SessionFactory
sessionFactory = new Configuration().configure().buildSessionFactory();
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

public static void shutdown() {
getSessionFactory().close();
}
}

4. CRUD操作示例

以下代码展示了如何使用Hibernate进行基本的CRUD操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import org.hibernate.Session;
import org.hibernate.Transaction;

public class UserDao {

public void saveUser(User user) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
session.save(user); // 保存用户对象
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback(); // 回滚事务
}
e.printStackTrace();
}
}

public User getUser(Long userId) {
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
return session.get(User.class, userId); // 获取用户对象
}
}

public void updateUser(User user) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
session.update(user); // 更新用户对象
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback(); // 回滚事务
}
e.printStackTrace();
}
}

public void deleteUser(Long userId) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
User user = session.get(User.class, userId);
if (user != null) {
session.delete(user); // 删除用户对象
}
transaction.commit();
} catch (Exception e) {
if (transaction != null) {
transaction.rollback(); // 回滚事务
}
e.printStackTrace();
}
}
}

5. 使用示例

在主程序中使用UserDao进行CRUD操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Main {
public static void main(String[] args) {
UserDao userDao = new UserDao();

// 创建用户
User user = new User();
user.setName("John Doe");
user.setEmail("john@example.com");
userDao.saveUser(user);

// 获取用户
User retrievedUser = userDao.getUser(user.getId());
System.out.println("Retrieved User: " + retrievedUser.getName());

// 更新用户
retrievedUser.setEmail("john.doe@example.com");
userDao.updateUser(retrievedUser);

// 删除用户
userDao.deleteUser(retrievedUser.getId());

HibernateUtil.shutdown(); // 关闭SessionFactory
}
}

总结

在本节中,我们学习了ORM框架的基础知识

32 ORM框架的基础与应用

https://zglg.work/java-one/32/

作者

AI教程网

发布于

2024-08-08

更新于

2024-08-10

许可协议