hibernate使用注解简化开发
2017-05-01 12:23
411 查看
简述
在编写hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml)。从JAVA5.0之后,可以利用注解来简化配置。简单来说就是不再需要映射文件了,hibernate需要的元数据(metadata)通过注解实体类就行了。
结构
实体bean
操作类
这里也可以 封装一个工厂类来进行控制
并且现在版本对 annotationconfigration 进行的改变
只需要configuration
hibernate.cfg.xml
注解说明
@GeneratedValue(strategy=GenerationType.AUTO) 相当于Hibernate框架的native主键生成策略
@GeneratedValue(strategy=GenerationType.IDENTITY) 相当于Hibernate框架的identity主键生成策略,适用于MySQL,SQL Server
@GeneratedValue(strategy=GenerationType.SEQUENCE) 相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2
@GeneratedValue(strategy=GenerationType.TABLE) 使用一张单表管理主键值。
默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用,需要我们进行增加主键生成器,如下:
@GenericGenerator(name=”hibernate-uuid”,strategy=”uuid”)
@GeneratedValue(generator=”hibernate-uuid”)
错误重点
注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。
(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。
(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。
(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))
(5):表名称可以在实体类前进行注解。
(6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。
新版本注意事项
在hibernate4。0以后建议这样做
在编写hibernate的时候,需要将实体类映射到数据库中的表。通常需要一个配置文件(hibernate.cfg.xml),一个实体类(XX.Java),还有一个映射文件(XX.hbm.xml)。从JAVA5.0之后,可以利用注解来简化配置。简单来说就是不再需要映射文件了,hibernate需要的元数据(metadata)通过注解实体类就行了。
结构
实体bean
package beans; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import javax.swing.JTextField; import org.hibernate.annotations.Columns; import org.hibernate.annotations.GenericGenerator; /** * @author DGW * @date 2017 2017年4月30日 下午11:23:26 * @filename user.java */ @Entity @Table(name = "userinfo")//对应表名 public class user { /* * 通过注解来跑hibernate */ @Id // 表示主键 @GenericGenerator(name = "generator", strategy = "assigned") @GeneratedValue(generator = "generator") private int id; @Column(name = "username") private String username; @Column(name = "password") private String password; @Column(name = "qqnumber") private int qqnumber; public int getId() { return id; } public void setId(int 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 int getQqnumber() { return qqnumber; } public void setQqnumber(int qqnumber) { this.qqnumber = qqnumber; } }
操作类
这里也可以 封装一个工厂类来进行控制
并且现在版本对 annotationconfigration 进行的改变
只需要configuration
public static void main( String[] args ) { SessionFactory factory = new Configuration().configure().buildSessionFactory(); Session session = factory.openSession(); session.beginTransaction(); // 开启事务 try{ Person p = new Person(); p.setName("Benson"); p.setAge(22); p.setBirth(new Date()); session.save(p); } catch(Exception e) { e.printStackTrace(); session.getTransaction().rollback(); // 回滚事务 } session.getTransaction().commit(); // 提交事务 }
hibernate.cfg.xml
<?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="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/wsy_student</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- <mapping resource="beans/user.hbm.xml"/> -- 4000 > //改变这里 <mapping class="beans.user"/> </session-factory> </hibernate-configuration>
注解说明
1,@Entity : 表示当前的类为实体类,声明在类的前面。可以将当前类和数据库的表和字段进行关联映射。 2,@Table:表示映射的表,声明在类的前面 3,@Id:表示主键的映射,声明在主键的get方法前边,默认情况下主键利用assigned(用户提供)生成策略。如果想要设置API规范提供了四种主键生成策略:
@GeneratedValue(strategy=GenerationType.AUTO) 相当于Hibernate框架的native主键生成策略
@GeneratedValue(strategy=GenerationType.IDENTITY) 相当于Hibernate框架的identity主键生成策略,适用于MySQL,SQL Server
@GeneratedValue(strategy=GenerationType.SEQUENCE) 相当于Hibernate框架的sequence主键生成策略,适用于Oracle,DB2
@GeneratedValue(strategy=GenerationType.TABLE) 使用一张单表管理主键值。
默认情况下API规范是不支持Hibernate框架中的uuid的主键生成策略,假如我们想要使用,需要我们进行增加主键生成器,如下:
@GenericGenerator(name=”hibernate-uuid”,strategy=”uuid”)
@GeneratedValue(generator=”hibernate-uuid”)
4,@Column : 表示映射属性,和表的字段进行关联 5,@ManyToOne : 表示映射关系中的多对一 6,@JoinColumn : 表示外键映射属性,和表的外键字段进行关联 7,@OneToMany : 表示映射关系中的一对多,这里需要注意,一对多时,外键的维护需要翻转交给多的一方进行维护,需要配置反转属性mappedBy,属性取值为多的一方的映射属性名称。相当于xml配置文件中的Inverse="true"。 8,@OrderBy : 表示排序字段 9,@Transient : 表示声明瞬时属性,不和数据库的字段发生关联,也就是没有表中列与之映射。
错误重点
注意:(1):如果实体类属性名与表字段名不一致的时候,要么都注解在属性前,要么都注解在get方法前。不能部分注解在属性前,部分注解在方法前。
(2):如果实体类属性名与表字段名一致的时候,可以部分注解在属性前,部分注解在方法前。
(3):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。
(4):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))
(5):表名称可以在实体类前进行注解。
(6):所有这些注解在:javax.persistence包下。而不是在hibernate包中。
新版本注意事项
Configuration con = new Configuration().configure(); StandardServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(con.getProperties()) .build(); SessionFactory factory = con.buildSessionFactory(registry); Session session = factory.openSession();
在hibernate4。0以后建议这样做
相关文章推荐
- hibernate使用注解简化开发
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- 使用注解简化Java开发中的样板代码——Lombok框架
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- 使用MyEclipse简化hibernate开发
- 使用MyEclipse简化Hibernate开发
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- Hibernate4注解开发,使用hbm2ddl生成表时,不生成外键的解决方法
- hibernate使用myeclise简化开发----根据数据库及表反向生成代码信息
- 使用Hibernate Tool简化hibernate程序开发
- 使用MyEclipse工具简化Hibernate数据库开发
- android 使用AndroidAnnotations注解简化安卓开发
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- [注解的力量]Spring 2.5 JPA hibernate 使用方法的点滴整理(五):使用@Component 来简化bean的配置
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置
- 使用eclipse开发struts+spring+hibernate免费插件套装
- 使用FactoryBean接口简化工厂Bean开发