hibernate入门简单实现
hibernate属于ORM(object/relation mapping)对象关系映射数据库框架,具体解释搜索一下就知道了,orm框架还有OpenJPA,Mybatis等,但hibernate应该还是最主流的吧,毕竟做的也比较早,也是传说中SSH的一大成员之一,这么多年谈烂了还在谈的。废话就不说了,要做一个hibernate程序:
1、导jar包
发现不能传图片呀,我就打上吧
antlr.jar;c3p0.jar;commons-collections.jar;dom4j.jar;hibernate-jpa.jar;hibernate3.jar;javassist.jar;jta.jar;mysql-connector.jar;slf4j-api.jar
到这里http://www.hibernate.org/下载hibernate的jar包,以上很多jar都在里面
2、创建持久化类(pojo/bean)
对于bean对象,注意要有对应的get/set方法
要有无参数的默认的构造方法
不能用final修饰
这里代码如下
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 | package com.wf.entity; public class User { private long id; private String username; private String password; private String createtime; public long getId() { return id; } public void setId( long id) { this .id = id; } public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getPassword() { return password; } public void setPassword(String password) { this .password = password; } public String getCreatetime() { return createtime; } public void setCreatetime(String createtime) { this .createtime = createtime; } } |
3、创建映射文件(XXX.hbm.xml)
映射文件的作用就是将bean与数据库中的字段对应起来的,这里简单实现一个,还有就是这个配置文件必须与bean放到一个包中
名字为bean.hbm.xml;这里实现如下

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
5 <hibernate-mapping package="com.wf.entity">
6 <class name="User" table="t_user">
7 <id name="id" column="id">
8 <generator class="native"></generator>
9 </id>
10 <property name="username"></property>
11 <property name="password"></property>
12 <property name="createtime"></property>
13 </class>
14 </hibernate-mapping>
4、创建hibernate配置文件(hibernate.cfg.xml)
这一步的目的是连接数据库的,相当以前的JDBC连接数据库吧,这里在配置文件中实现了,这个文件要放到src下

1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
5 <hibernate-configuration>
6 <session-factory>
7 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
8 <property name="connection.url">jdbc:mysql:///testdb</property>
9 <property name="connection.username">root</property>
10 <property name="connection.password">root</property>
11 <!-- hibernate方言(确定数据库)此处为mysql -->
12 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
13 <!-- 数据库连接池,我用的是c3p0连接池 -->
14 <property name="hibernate.c3p0.max_size">2</property>
15 <property name="hibernate.c3p0.min_size">2</property>
16 <property name="hibernate.c3p0.timeout">5000</property>
17 <property name="hibernate.c3p0.max_statements">100</property>
18 <property name="hibernate.c3p0.idle_test_period">3000</property>
19 <property name="hibernate.c3p0.acquire_increment">2</property>
20 <property name="hibernate.c3p0.validate">false</property>
21 <!-- 配置是否在控制台中显示sql语句 -->
22 <property name="hibernate.show_sql">true</property>
23 <!-- 绑定session -->
24 <property name="current_session_context_class">thread</property>
25 <!-- 配置映射文件,指定到自己所配置的映射文件 -->
26 <mapping resource="com/wf/entity/user.hbm.xml"/>
27 </session-factory>
28 </hibernate-configuration>
5、测试运行
呵呵,最后一步了,可以CRUD操作了

1 package com.wf.test;
2
3 import org.hibernate.SessionFactory;
4 import org.hibernate.Transaction;
5 import org.hibernate.cfg.Configuration;
6 import org.hibernate.classic.Session;
7
8 import com.wf.entity.User;
9
10 public class test {
11
12 public static void main(String[] args) {
13 SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();;
14 Session session=sessionFactory.getCurrentSession();
15 Transaction tran = session.beginTransaction();
16 //save
17 User user=new User();
18 user.setUsername("wf");
19 user.setPassword("123");
20 tran.begin();//事物开始
21 session.save(user);
22 //update
23 /*User user2 = (User) session.load(User.class, 1);
24 user2.setUsername("wf2");
25 session.update(user2);*/
26 //delete
27 /*User user3=(User) session.load(User.class, 1);
28 session.delete(user3);*/
29 tran.commit();//事物提交
30 //query查询不用放入事物
31 /*List<User> userList = session.createQuery("from User").list();
32 for(User user4 : userList){
33 System.out.println(user4.getUsername());
34 }*/
35 }
36
37 }
现在很多参考书上好像都有session的打开与关闭,我也看到过,现在hibernate3.6之后获取的session可以不用手动关闭了
喀嚓,到此为止,睡觉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述