什么是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
| public class User { private Long id; private String name; private String email;
}
|
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 = 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(); } }
|
总结
在本节中,我们学习了ORM框架的基础知识