一.二.五 修饰日期形式 @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(); }
一.五 观察控制台日志输出
生成表:
添加约束:
插入值:
一.六 观察数据表
创建的结构正常. 没有生成password字段。
数据插入正常。
使用注解方式开发Hibernate,自动生成表正常。
二. Hibernate事务处理
具体代码形式为:
//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 来进行处理异常。
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!