hibernate使用注解简化开发
简述 
在编写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"/> -->
        //改变这里
         <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使用注解简化开发的更多相关文章
- Hibernate 使用MyEclipse简化开发
		在平时开发中写配置文件比较繁琐,在这里写一下如何使用myEclipse简化开发. 1.打开MyEclipse,创建数据库连接 单机测试连接按钮,如果出现成功建立连接,则连接成功. 然后Finish 2 ... 
- Annotation(二)——Hibernate中注解的开发
		在利用注解开发数据库持久层以前,需要学习一个规范JPA(Java Persistence API),这也是SUN公司提出的数据库的持久化规范.就类似于JDBC,Servlet,JSP等规范一样.而Hi ... 
- Hibernate中注解的开发
		转自:https://blog.csdn.net/liujiahan629629/article/details/22335563 在利用注解开发数据库持久层以前,需要学习一个规范JPA(JavaPe ... 
- 批量产生ssh2项目中hibernate带注解的pojo类的快捷方法
		近几个月一直在忙于项目组的ios应用项目的开发,没有太多时间去研究web应用方面的问题了.刚好,昨天有网友问到如何批量产生hibernate带注解的pojo类的快捷方法,所谓批量就是指将当前数据库中所 ... 
- 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错
		原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ... 
- SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
		SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分 辞职待业青年就是有很多时间来写博客,以前在传统行业技术强度相对不大,不处理大数据,也不弄高并发 ... 
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
		 1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ... 
- JAVA框架  Spring 调用jdbcsuport简化开发
		一)使用DAO的jdbcsuport来简化开发 首先来清楚一个概念: 我们在进行配置文件来进行依赖注入的时候,主要是通过set方法来进行设置的. 正常我们使用spring的jdbctemplate的时 ... 
- Hibernate5笔记9--Hibernate注解式开发
		Hibernate注解式开发: (1)注解式开发的注意点: Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射. JPA提供了一套功能强大的注解.Hibernat ... 
随机推荐
- 201521123004《Java程序设计》第5周学习总结
			1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 接口 接口(interface)就是方法声明和常量值的集合 实现接口的类叫接口的 ... 
- 201521123008《Java程序设计》第10周学习总结
			1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 只要t ... 
- 视频转GIF图
			1.工具 PS6.0(其他版本也可以) 视频一个(具体格式应该无所谓) 2.步骤 (1)打开PS,点击导入->视频帧到图层 (2)选择视频打开 (3)进行范围选择.由于每隔2帧导入一张图片,每秒 ... 
- 看懂类图——UML类图基础
			类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ... 
- linux文件截取前几行,后几行,中间几行命令
			1. 如果你只想看文件的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想查看文件的后10行,可以使用tail命令,如: tail -2 /etc/passwd ... 
- Python爬虫总结
			Python爬虫的原理:1通过URLopen()来获取到url页面, 这个过程可以加代理 2这个页面上都是字符串,所以我们而通过字符串查找的方法来获取到目标字符串,用到了正则来匹配目标re.finda ... 
- Cheat sheet for Jupyter Notebook
			近期,DataCamp发布了jupyter notebook的 cheat sheet,[Python数据之道]第一时间与大家一起来分享下该cheat sheet的内容. 以下是该cheat shee ... 
- angular 如何获取使用filter过滤后的ng-repeat的数据长度
			在做项目的过程中,被产品要求在内容为空的过程中显示提示信息,然哦户内容使用ng-repeat循环输出的,并且使用了filter过滤.后在谷歌上找到解决方案,如下: 之前代码如下显示: <ul& ... 
- DialogFragment的应用
			一.DialogFragment简单介绍: 1.基本概念 DialogFrament 指一个与fragment建立了关联的Dialog, 随fragment生, 随fragment死, 即Dialog ... 
- Dom4J生成xml和包含CDATA问题
			在 java注解生成xml和包含CDATA问题里面做了介绍,这里直接贴代码. 1:生成xml的java文件 package com.dufy.test.xml; import java.io.File ... 
