Hibernate简单注解开发和事务处理(四)下

简介: Hibernate简单注解开发和事务处理(四)

一.二.五 修饰日期形式 @Temporal


如果是日期Date,Time,Timestamp 等形式,不能用普通的@Column 注解了,要用一个@Temporal 注解 。 中文意思是时间。


      @Temporal(TemporalType.TIMESTAMP)
  private Date birthday;


其中Temporal 注解:


@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD})
@Retention(value=RetentionPolicy.RUNTIME)
public @interface Temporal
{
  TemporalType value();
}
而TemporalType是枚举,取值是:
public enum TemporalType
{
  DATE,  TIME,  TIMESTAMP;  //对应的是数据库中的日期,时间,时间戳
  private TemporalType() {}
}


常用的值是TIMESTAMP. 其中value 可以省略。


一.二.六 指定类型 @Type


修饰列的类型,要用@Type 注解 。这个注解不像其他注解位于javax.persistence 包下


而是位于org.hibernate.annotations,与GenericGenerator 注解位于的包下相同。


@Type(type = "string")
  private String description;


其中Type为:


@Target({java.lang.annotation.ElementType.FIELD, java.lang.annotation.ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Type
{
  String type();
  Parameter[] parameters() default {};
}


type=“类型名称”,与Hibernate中XML中的type 值相同,可以取double,int,long,string等常见的类型。 如果是Date,使用上面的@Temporal注解。


一.二.七 忽略注解@Transien


如果不想让User中的某个属性生成为表中的字段,可以在这个上面添加一个@Transien, 这样就可以避免生成表中的字段了。 如常见的User中的可能多余的属性,如确认密码,验证码等。


一.二.八 综合后的注解User.java


package com.yjl.pojo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
/**
 @author: 两个蝴蝶飞
 @date: 2018年10月9日 下午8:53:39
 @Description Hibernate操作时相应的实体类,实现序列化
*/
@Entity
@Table(name="user")
public class User implements Serializable{
  private static final long serialVersionUID = 1L;
  /**
   * @param 主键id 用Integer包装类
   * @param userName 用户名
   * @param password 密码
   * @param sex 性别
   * @param age 年龄
   * @param description 相关描述
   */
  /**
   * 主键生成策略为native
   */
  @Id
  @GeneratedValue(generator="_native") 
  @GenericGenerator(name="_native",strategy="native")
  private Integer id;
  /**
   * 类名为userName,长度是20,表示唯一
   */
  @Column(name="userName",length=20,unique=true)
  private String userName;
  /**
   * 去除password的生成
   */
  @Transient
  private String password;
  /*
   * 设置性别不为空,默认属性值为sex
   */
  @Column(nullable=false)
  private String sex;
  /*
   * int 类型,默认生成列属性值为age
   */
  @Type(type="int")
  private Integer age;
  @Temporal(TemporalType.TIMESTAMP)
  private Date birthday;
  @Type(type = "string")
  @Column(name="description",length=100)
  private String description;
  public Integer getId() {
    return id;
  }
  public void setId(Integer 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 getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  public Date getBirthday() {
    return birthday;
  }
  public void setBirthday(Date birthday) {
    this.birthday = birthday;
  }
  public String getDescription() {
    return description;
  }
  public void setDescription(String description) {
    this.description = description;
  }
}


一.三. hibernate.cfg.xml中配置引入.java注解文件


<?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/hibernate?characterEncoding=utf8</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">abc123</property>
    <!-- 关于Hibernate的相应配置 -->
    <!-- 引入方言 -->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="hibernate.format_sql">true</property>
    <!-- 引入相应的约束文件  ctrl点击时可以正确进入-->
    <mapping class="com.yjl.pojo.User"/>
  </session-factory>
</hibernate-configuration>


一.四 测试运行


运行第三章的saveTest()方法


@Test
  public void saveTest(){
    //1  得到Session对象
    Session session=HibernateUtil.getSession();
    //2 打开事务
    Transaction tran=session.beginTransaction();
    //3 实例化对象
    User user=new User();
    user.setUserName("两个蝴蝶飞");
    user.setSex("男");
    user.setAge(24);
    user.setPassword("123456");
    user.setDescription("一个有梦想的程序员");
    //4利用save()方法进行相应的保存
    session.save(user);
    //5 提交事务
    tran.commit();
    //6 关闭session
    session.close();
  }


一.五 观察控制台日志输出


生成表:


20200615102642723.png


添加约束:


20200615102653565.png


插入值:


20200615102703408.png


一.六 观察数据表


20200615102712753.png


创建的结构正常. 没有生成password字段。


20200615102721500.png


数据插入正常。


使用注解方式开发Hibernate,自动生成表正常。


二. Hibernate事务处理


20200615102731334.png


具体代码形式为:


//1  得到Session对象
    Session session=HibernateUtil.getSession();
    //2 打开事务
    Transaction tran=session.beginTransaction();
    try{
      //3 实例化对象
      User user=new User();
      user.setUserName("两个蝴蝶飞");
      user.setSex("男");
      user.setAge(24);
      user.setPassword("123456");
      user.setDescription("一个有梦想的程序员");
      //4利用save()方法进行相应的保存
      session.save(user);
      //5 提交事务
      tran.commit();
    }catch(Exception e){
      //出错了,进行回滚事务.
      tran.rollback();
    }finally{
      //6 关闭session
      session.close();
    }


利用try … catch …finally 来进行处理异常。


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

相关文章
|
7月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
|
3月前
|
Java 数据库连接 API
解锁高效开发秘籍:深入探究 Hibernate 如何优雅处理一对多与多对多关系,让数据映射再无烦恼!
【9月更文挑战第3天】Hibernate 是 Java 领域中最流行的 ORM 框架之一,广泛用于处理实体对象与数据库表之间的映射。尤其在处理复杂关系如一对多和多对多时,Hibernate 提供了丰富的 API 和配置选项。本文通过具体代码示例,展示如何使用 `@OneToMany`、`@JoinColumn`、`@ManyToMany` 和 `@JoinTable` 等注解优雅地实现这些关系,帮助开发者保持代码简洁的同时确保数据一致性。
66 4
|
3月前
|
SQL Java 数据库连接
Hibernate 批量操作来袭!掌握最佳实践,轻松应对数据洪流,开启高效开发新时代
【9月更文挑战第3天】在软件开发中,高效数据操作至关重要。作为流行的Java持久化框架,Hibernate提供了强大的数据库操作功能。本文探讨了Hibernate批量操作,包括批量插入、更新和删除的最佳实践,通过使用原生SQL和`Session`的`createNativeQuery()`方法,结合`addBatch()`及`executeBatch()`方法实现高效批量操作。合理设置批量大小、事务管理和性能测试是优化的关键。在实际开发中,应根据业务需求和性能要求选择合适的方法,以提升程序性能和可维护性。
241 3
|
4月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
65 1
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
128 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
4月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
293 0
|
4月前
|
数据库 开发者 Java
Hibernate映射注解的魔力:实体类配置的革命,让你的代码量瞬间蒸发!
【8月更文挑战第31天】Hibernate 是一款出色的对象关系映射框架,简化了 Java 应用与数据库的交互。其映射注解让实体类配置变得直观简洁。本文深入剖析核心概念与使用技巧,通过示例展示如何简化配置。
57 0
|
6月前
|
JSON Java 数据库连接
Hibernate中使用@Lob 注解保存String[] 问题
Hibernate中使用@Lob 注解保存String[] 问题
39 2
|
7月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)