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 来进行处理异常。


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

相关文章
|
1月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
13 1
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Dept.java)
Hibernate中使用Criteria查询及注解——(Dept.java)
14 1
|
1月前
|
Java 数据库连接
hibernate注解实体类(Emp.java)
hibernate注解实体类(Emp.java)
14 1
|
1月前
|
Java 数据库连接
hibernate注解的测试
hibernate注解的测试
11 1
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——( EmpCondition)
Hibernate中使用Criteria查询及注解——( EmpCondition)
14 1
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(DeptTest.java)
Hibernate中使用Criteria查询及注解——(DeptTest.java)
8 1
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
11 2
|
1月前
|
Java 数据库连接
Hibernate中使用Criteria查询及注解——(Emp.java)
Hibernate中使用Criteria查询及注解——(Emp.java)
9 0
|
11月前
|
Java 数据库连接
hibernate注解实体类(Emp.java)
hibernate注解实体类(Emp.java)
48 0
|
11月前
|
Java 数据库连接
hibernate注解实体类(Dept.java)
hibernate注解实体类(Dept.java)
44 0