美文网首页
Hibernate入门案例与主键策略(正向工程)

Hibernate入门案例与主键策略(正向工程)

作者: 神豪VS勇士赢 | 来源:发表于2018-08-17 22:23 被阅读17次

开发流程(手动档)
第一步:搭建环境
数据库设计:
数据库名不要加 中划线“-”,设置自动更新时无法执行修改表字段的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操作数据流程:


image.png

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底层是默认提交事物的

相关文章

  • Hibernate入门案例与主键策略(正向工程)

    开发流程(手动档)第一步:搭建环境数据库设计:数据库名不要加 中划线“-”,设置自动更新时无法执行修改表字段的sq...

  • Hibernate主键策略

    数据库维护下面三种:1.identity hibernate底层采用数据库本身自动增长列(SQLServer,My...

  • Hibernate主键生成策略

    转载:http://www.cnblogs.com/godwhisper/p/6765635.html

  • Hibernate主键生成策略

    Increment :代理主键适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2...

  • mybatis免sql插件之JpaMapper-以Jpa hib

    mybatis免sql插件之JpaMapper-以Jpa hibernate的风格写mybatis(主键赋值策略及...

  • Spring Data JPA知识 day02

    一、JPA中的主键生成策略 通过annotation(注解)来映射hibernate实体的,基于annotat...

  • Hibernate_day02

    一、hibernate中的实体规则: 1.实体类创建的注意事项 2.主键类型 3.主键生成策略 二、hiberna...

  • Hibernate的使用(二)

    第二部分 Hibernate的底层实现 (一)主键生成策略 主键分为自然主键(用一个和自身相关的属性作为数据库中...

  • HIbernate以及HQL

    主键生成策略: increment 由Hibernate自动以递增方式生成; identity 由底层数据库生...

  • Hibernate 的主键生成策略

    Hibernate 是一个 ORM 框架,它的核心作用就是建立内存中的 Java 对象和数据库表中的记录的对应关系...

网友评论

      本文标题:Hibernate入门案例与主键策略(正向工程)

      本文链接:https://www.haomeiwen.com/subject/qafxiftx.html