您的位置:首页 > 编程语言 > ASP

关于学习VB和ASP关系问题

2005-11-21 18:02 525 查看
今天有时间大体看了一下Hibernate Annotations,决定放弃xdoclet生成hbm的想法,开始学习annotation.

首先大体的来看一下:

一:Class Level:
1:通过@Entity声明当前pojo为实体Bean
2:通过@Table定义对应数据库表的属性
   name:表名,默认实体类名
   uniqueConstraints:定义表的唯一性约束

例:定义表名为tb_user,并且用户名唯一,不能重复


@Entity


@Table(


        name = "tb_user",


        uniqueConstraints =




                

{@UniqueConstraint(columnNames = "userName")}


)




public class User implements Serializable 

{


    private Integer id;


    private String userName;


}
二:Method Level:
@Basic
@Transient
@Column
所有非static非transient都会被持久化,也就是说所有加@Transient是不会被保存到数据库中的,所有没有加注的默认为@Basic,通过Column我们可以更一步的定义列名,是否为空,长度,是否可更新等等属性值,

例:


    @Column(name = "userName", nullable = false, length = 80, unique = true)




    public String getUserName() 

{


        return userName;


    }






    public void setUserName(String userName) 

{


        this.userName = userName;


    }




    @Transient




    public String getPassword() 

{


        return password;


    }默认的列名就是属性名,上面的name="userName"只是演示而已。
password加注为@Transient,所以通过SchemaExport导入Schema,查看表结构是没有这个字段的。

@Temporal
日期类型,分三种,Time,Date,Timestamp
例:


    @Temporal(TemporalType.TIMESTAMP)




    public Date getBirthday() 

{


        return birthday;


    }
@Lob
1:所有的Clob,Character,char,String都会被转为Clob
2:所有的Blob,Byte[],byte[],serializable都会被转为Blob
例:


    @Lob




    public Clob getResume() 

{


        return resume;


    }




    @Lob




    public Blob getImage() 

{


        return image;


    }
@Id
就是标识了,暂时还没有详读文档,看了一下test
最简单方式如下:


    @Id


    @GeneratedValue




    public String getId() 

{


        return id;


    }
我看了一下mysql生成的sql
 


id integer not null auto_increment,


primary key (id),
应该是hibernate根据数据库类型自动选择的(说了一句废话

),我猜是生成方式native
当然我们可以根据我们需要选择其他的生成方式,例如常用的uuid


    @Id


    @GeneratedValue(generator = "system-uuid")


    @GenericGenerator(name = "system-uuid", strategy = "uuid")




    public Integer getId() 

{


        return id;


    }
@Version
乐观锁

三:跑起来
和Hibernate官方网站一样,来个HibernateUtil


/**
 * @author martin
 */
public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        AnnotationConfiguration cfg =
                new AnnotationConfiguration().addAnnotatedClass(User.class);
        new SchemaExport(cfg).execute(true, true, false, true);
        sessionFactory = cfg.buildSessionFactory();
    }

    public static Session getSession() {
        return sessionFactory.openSession();
    }
}
注意这里的 new AnnotationConfiguration()!

Test:

/**
 * @author martin
 */
public class HibernateUtilTest extends TestCase {
    public void testAddUser() {
        User user = new User();
        user.setUserName("martin");
        save(user);
        assertNotNull(user.getId());
    }

    public void testUpdateUser() {
        Session session = HibernateUtil.getSession();
        Query query =
                session.createQuery("from User as user where user.userName=:name");
        query.setParameter("name", "martin");
        List list = query.list();
        session.close();
        assertEquals(1, list.size());

        User user = (User) list.get(0);
        user.setUserName("martin xus");
        save(user);
        assertEquals(new Integer(1), user.getVersion());
    }

    private void save(User user) {
        Session session = HibernateUtil.getSession();
        Transaction tx = session.beginTransaction();
        session.saveOrUpdate(user);
        session.flush();
        tx.commit();
        session.close();
    }
}
创建的表结构为:


   create table tb_user (


        id varchar(32) not null,


        birthday datetime,


        resume text,


        image blob,


        optlock integer,


        password varchar(255),


        userName varchar(80) not null unique,


        primary key (id),


        unique (userName)


    )

完整User代码(省掉了所有属性的setter):


import org.hibernate.annotations.GenericGenerator;




import javax.persistence.*;


import java.io.Serializable;


import java.util.Date;


import java.sql.Clob;


import java.sql.Blob;






/** *//**


 * @author martin


 */


@Entity


@Table(


        name = "tb_user",


        uniqueConstraints =




                

{@UniqueConstraint(columnNames = "userName")}


)




public class User implements Serializable 

{


    private String id;


    private String userName;


    private String password;


    private Date birthday;


    private Clob resume;


    private Blob image;


    private Integer version;




    @Id


    @GeneratedValue(generator = "system-uuid")


    @GenericGenerator(name = "system-uuid", strategy = "uuid")


    @Column(length = 32)




    public String getId() 

{


        return id;


    }




    @Column(nullable = false, length = 80, unique = true)




    public String getUserName() 

{


        return userName;


    }








    public String getPassword() 

{


        return password;


    }






    @Temporal(TemporalType.TIMESTAMP)




    public Date getBirthday() 

{


        return birthday;


    }






    @Version


    @Column(name = "optlock")




    public Integer getVersion() 

{


        return version;


    }






    @Lob




    public Clob getResume() 

{


        return resume;


    }




    @Lob




    public Blob getImage() 

{


        return image;


    }


     


    //setter


}
四:next,明天的学习计划.

参考
    Hibernate Annotations Refrence
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐