Hibernate (开放源代码的对象关系映射框架)
http://www.cnblogs.com/wenwen123/p/5658625.html
一、
1.新建
2.配置
<!-- hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.12.Final</version> </dependency> <!-- mysql-connector-java 当前最新测试版本:8.0.8-dmr 当前最新版稳定版本:6.0.6 上一代的稳步版本:5.1.44 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.8-dmr</version> </dependency>
3.Test.java,配置类
public static void main(String[] args) { //第一步:需要一个配置类 Configuration config = new Configuration(); //第二步:对配置类加载一个配置文件 config.configure("/hibernate.cfg.xml"); //非常慢 SessionFactory factory = config.buildSessionFactory(); System.out.println("factory:"+factory); }
4.hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- JDBC中数据库的URL地址 mysql5:jdbc:mysql://localhost:3306/pyq mysql6:jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC --> <property name="connection.url">jdbc:mysql://localhost:3306/pyq?serverTimezone=UTC</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- 老版本mysql5.0是:com.mysql.jdbc.Driver 新版mysql6.0是:com.mysql.cj.jdbc.Driver --> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property> <!--此属性留给以后再说--> <property name="hbm2ddl.auto">update</property> <!--指定一种数据库方言--> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--SQL语句是否格式化,仅仅影响调试信息是否好看,不影响程序运行--> <property name="format_sql">true</property> <!--verifyServerCertificate--> </session-factory> </hibernate-configuration>
Test.java右键(ps:要先把)数据库启动
地址:https://gitee.com/MuNianShi/Hibernate001.git
二、数据库的链接,这里用的是MySQL
Mysql里有一个数据库pyq,在数据库pyq里建表
1.先写一个实体类
2.在桌面上建立一个文件夹com.nf.entity在里面建Student.hbm.xml,再把它复制到resources里面
3.在测试类的第二步里
//第二步:对配置类加载一个配置文件 config.configure("/hibernate.cfg.xml");//这里要删掉
4.在hibernate.cfg.xml文件里添加
<mapping resource="com.nf.entity/Student.hbm.xml"></mapping>
5.编写Student.hbm.xml
<?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="com.nf.entity"> <!-- private Integer id; private String name; private String sex; --> <class name="Student" table="t_student"> <id name="id" column="id888"> <!--generator生成的意思 mysql:native --> <generator class="native"></generator> </id> <property name="name" type="java.lang.String" column="name888" length="20" not-null="true"></property> <property name="sex" type="java.lang.String" column="sex888" length="4"></property> </class> </hibernate-mapping>
地址:https://gitee.com/MuNianShi/Hibernate002.git
三、增删改查,事务
一、下载相关jar包
(POM.xml hibernate-core,mysql-connector-java)
二、配置数据库相关信息hibernate.cfg.xml
(driver,url,username,password,dialect)
目的:获得一个SessionFactory实例
【后期:合并到spring】
三、ORM技术,通过Xxx.hbm.xml
实现java类的属性跟表的字段要一一对应
四、通过Session的API,实现增删改查
3.主要处理测试类Test.java,在其中添加方法。
首先先修改这个文件
修改Test.java
增
package com.nf; import com.nf.entity.Student; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class Test { public static void main(String[] args) { //第一步:需要一个配置类 Configuration config = new Configuration(); //第二步:对配置类加载一个配置文件 config.configure("/hibernate.cfg.xml"); //非常慢 SessionFactory factory = config.buildSessionFactory(); //System.out.println("factory:"+factory); //第三步:通过Session的API,实现增删改查 Session session = factory.openSession(); //1.增 //这是我们学习Mysql使用的增加:"insert into Student(name,sex) values(?,?);" Student s1 = new Student(); s1.setName("奶妈"); s1.setSex("女"); session.save(s1); //这里是关闭 session.close(); factory.close(); } }
删:其它不变
//4.删 //要先查到,然后删除 Student ss = session.get(Student.class,3); session.beginTransaction(); session.delete(ss); session.getTransaction().commit();
改:其它不变
//3.改 //要先查到,然后修改 Student ss = session.get(Student.class,3); ss.setName("剑魔"); session.beginTransaction(); session.update(ss); session.getTransaction().commit();
查:其它不变
//2.查询 Query query = session.createQuery("from Student "); //查询分2种: // 1.按HQL查询(n条记录)(没写) // 2.直接过ID指定获取一个实例:select * from t_student where id=3 Student ss = session.get(Student.class,3); System.out.println( ss.getName() ); //这里是关闭 session.close(); factory.close();
事务:故意让他发生异常,但不修改内容
//5.感受一下事务的回滚 session.beginTransaction(); try { Student s1 = session.get(Student.class,1); Student s2 = session.get(Student.class,2); s1.setSex("女"); s2.setSex("美颜后的女性"); session.update(s1); session.update(s2); //如果全部成功,提交事务 session.getTransaction().commit(); }catch (Exception e){ System.out.println("发生异常:"+e.getMessage()); //如果有异常,事务回滚 session.getTransaction().rollback(); }