开发流程(手动档)
第一步:搭建环境
数据库设计:
数据库名不要加 中划线“-”,设置自动更新时无法执行修改表字段的sql语句。
CREATE TABLE user
(
id
bigint(20) NOT NULL AUTO_INCREMENT,
username
varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
password
varchar(255) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
创建Maven项目,加入Hibernate,MySQL依赖。指定JDK编译版本。
导入 Hibernate 依赖包 以及 mysql 依赖以及JDK 编译版本
第二步:创建Hibernate的核心配置文件
配置文件hibernate.cfg.xml
完整的核心配置文件如下:
<!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/testmybatis01?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">zyh</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping resource="com/zyh/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
在这里强调一个内容:
数据库模式定义语言DDL(Data Definition Language)(CREATE、ALTER、DROP)
数据操纵语言DML(SELECT、UPDATE、INSERT、DELETE)
更新配置:
<property name="hbm2ddl.auto">update</property>
在启动时根据配置更新数据库,没有表的时候创建表,有表的时候不创建,字段有更新会增加新字段,不删除原有字段 .
第三步:创建ORM映射文件和对应的实体类
public class User {
private Long id;
private String username;
private String password;
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 User() {
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.zyh.User" table="user">
<id name="id" column="id">
<generator class="identity"></generator>
</id>
<property name="username" column="username"></property>
<property name="password" column="password"></property>
</class>
</hibernate-mapping>
必须注册到核心配置:
<mapping resource="com/zyh/User.hbm.xml"></mapping>
需要在POM中加入资源拷贝 加入此配置主要的功能是可以在实体目录中知道xml配置
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>/.properties</include>
<include>/.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
测试生成表:
注意导包:org.hibernate.cfg.Configuration;
第四步:操作数据
JDBC操作数据流程:
Hibernate操作数据流程:
1,加载hibernate核心配置文件
Configuration configuration= new Configuration().configure("hibernate.cfg.xml")
2,得到操作数据库对象
SessionFactory sessionFactory = configuration.buildSessionFactory();
3,创建一个session 对象
Session session = sessionFactory.openSession();//从会话工厂获取一个session
4,开启事物(查询不需要)
Transaction transaction = session.beginTransaction();
5,执行
Userinfo user = new Userinfo(“qf”,”qf”);
session.save(user);
System.out.println(user.getId());//新生成的id
6.提交事务
transaction.commit();
7.关闭
session.close();
容器关闭:sessionFactory.close();
测试方法如下:
/**
-
这里需要注意一个问题 当我们在增删改的时候 我们必须提交事物 要不然是不起作用的
*/
public class HbTest {
@Test
public void testAdd(){
User user =new User();
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
user.setUsername("张颖豪啊");
user.setPassword("魏雪啊");
session.save(user);
transaction.commit();
session.close();
}
@Test
public void testDeleteByUser(){
User user=new User();
user.setId(4L);
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
session.delete(user);
transaction.commit();
session.close();
}@Test
public void testDeleteByFindUser(){
Session session = HibernateUtils.getSession();
Transaction transaction = session.beginTransaction();
User user = session.get(User.class, 5L);
session.delete(user);
/**
* 必须提交事物 不然是不能起到增删改的效果
*/
// transaction.commit();
}
@Test
public void testFindUser(){Session session = HibernateUtils.getSession(); User user = session.get(User.class, 6L); System.out.println(user);
}
}
Hibernate底层默认不提交事物 所以我们在怎删改的时候需要自己添加事物
JDBC底层是默认提交事物的