通过度娘可以知道,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
所谓ORM(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping)是指对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。对象-关系映射系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。简单的说,我们使用ORM可以将我们的对象(POJO)去进行映射,使得我们可以去操作对象就能够完成对表的CRUD操作。
怎么使用Hibernate
开始使用Hibernate
通过一个实例来更直观的了解Hibernate框架。
使用Maven直接引用依赖:
1 2 3 4 5
| <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.4.2.Final</version> </dependency>
|
再导入mysql数据库的驱动包。
创建一个user表
1 2 3 4 5 6 7
| create table h_user( id int primary key auto_increment, name varchar(20), password varchar(20), phone varchar(20), address varchar(50) );
|
创建实体类
创建一个实体类当做user表的映射。
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
| public class User { private int id; private String name; private String password; private String phone; private String address;
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 getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; } }
|
配置Hibernate相关文件
- ***.hbm.xml:**它主要用于描述类与数据库中的表的映射关系。
- **hibernate.cfg.xml:**它是Hibernate框架的核心配置文件。
User.hbm.xml
详细看注释.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="model">
<class name="User" table="h_user" catalog="hibernateTest"> <id name="id" column="id"> <generator class="native"></generator> </id> <property name="name" column="name" length="20"></property> <property name="password" column="password" length="20"></property> <property name="phone" column="phone" length="20"></property> <property name="address" column="address" length="20"></property> </class> </hibernate-mapping>
|
hibernate.cfg.xml
详细看注释。如果使用的是IDEA Maven的项目结构,记得把配置文件放到resources文件夹里,不然找不到相应的xml文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernateTest</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">987654zmd</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="model/User.hbm.xml"/> </session-factory> </hibernate-configuration>
|
测试
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| public class HibernateTest { static SessionFactory sessionFactory; static Configuration config; static Session session;
public void init(){ config=new Configuration().configure(); sessionFactory=config.buildSessionFactory(); session=sessionFactory.openSession(); session.beginTransaction(); }
@Test public void saveTest(){ User u=new User(); User u1=new User(); u.setName("小东"); u.setPassword("987654zmd"); u.setPhone("10086"); u.setAddress("广西"); u1.setName("小明"); u1.setPassword("987654"); u1.setPhone("10010"); u1.setAddress("广东"); init(); session.save(u); session.save(u1); session.getTransaction().commit(); session.close(); sessionFactory.close(); }
@Test public void findUserIdTest(){ init(); User u=(User) session.load(User.class,1); System.out.println(u.getName()+" "+u.getPassword()+" "+u.getPhone()); session.getTransaction().commit(); session.close(); sessionFactory.close(); }
@Test public void updateUserTest(){ init(); User u=(User)session.load(User.class,1); u.setName("狗剩"); session.update(u); session.getTransaction().commit(); session.close(); sessionFactory.close(); }
@Test public void deleteUserTest(){ init(); User u=(User) session.load(User.class,2); session.delete(u); session.getTransaction().commit(); session.close(); sessionFactory.close(); }
@Test public void findAllUserTest(){ init();
Query query1=session.createQuery("from User");
List<User> list=query1.list(); for(User user:list) System.out.println(user.getName()+" "+user.getPassword()); session.getTransaction().commit(); session.close(); sessionFactory.close(); }
}
|
使用单元测试需要引用依赖:
1 2 3 4 5
| <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
|
测试存储功能
控制台输出:
数据库:
剩下的功能测试如都无问题,那么我们就算简单入门Hibernate了。