`
lihengzkj
  • 浏览: 44178 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JPA初探03--特殊类型的注解(时间,枚举,大数据)

 
阅读更多
create table t_user(
	id int primary key auto_increment,
	user_name varchar(50),
	birthday date,
	infor longtext,
	gender varchar(10)
);

【Java类:】

package bean;

import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Query;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import util.JPAManagerFactory;
/**
 * 用户类
 * @author 青山
 * @date 2014年10月18日
 * @file name: UserBean.java
 * 
 * 注意:
 * 	一般在属性或者是get方法的前面没有配置column注解,有可能是应为
 *  属性名和字段名是相同的,省略了。
 *  
 */
@Entity
@Table(name="t_user")
public class UserBean {
	@Id
	//@GeneratedValue  //不能使用默认,必须要指定值,要不然就自己指定主键 否则:org.hibernate.PersistentObjectException: detached entity passed to persist: bean.UserBean
	//@GeneratedValue(strategy=GenerationType.AUTO)
	private int id ;
	
	@Column(name="user_name")
	private String name;
	
	/*
	 * 1985-8-23  --> Date 日期
	 * 12:30 --> Time 时间
	 * 1985-8-23 12:30 --> Timestamp 时间戳
	 */
	//这里的生日是一个日期类型,素以需要使用时间方面的注解:Temporal
	@Temporal(TemporalType.DATE)
	@Column(nullable=false)//不允许为空
	private Date birthday;
	
	/**
	 * 性别的枚举类型:Gender.java
	 * EnumType.ORDINAL:保存枚举的索引值
	 * EnumType.STRING:保存枚举的字符串
	 * 作为枚举值,在这里只有两种情况,male和female,没有空,所有需要有注解说明不能为空
	 */
	//这里Gender是一个枚举类型
	@Enumerated(EnumType.STRING)
	@Column(nullable=false)
	private Gender gender;
	
	//一般来说字符串在数据库中最常只有255个字节,但是如果长度太大,就没有办法存储
	//解决办法:使用大文本数据的注解
	@Lob
	@Column(name="infor")
	//basic注解一般和大数据的字段配合使用
	@Basic(fetch=FetchType.LAZY) //设置抓取策略为延迟加载,如果不访问get方法,就不会加载该属性的值
	private String introduce;
	
	//如果不希望属性成为持久化字段的话,就需要使用注解Transient(该注解表示字段不和表字段映射)
	@Transient
	private String imgPath;
	
	//保存二进制数据 这个也是大数据,也是用Lob注解 一般需要延迟加载
	@Lob
	@Basic(fetch=FetchType.LAZY)
	@Transient  //这里这个字段只是练习,所以不需要持久化到数据库
	private byte[] file;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	
	public String toString(){
		return this.id+" "+this.name+" "+this.birthday;
	}
	public String getIntroduce() {
		return introduce;
	}
	public void setIntroduce(String introduce) {
		this.introduce = introduce;
	}
	public String getImgPath() {
		return imgPath;
	}
	public void setImgPath(String imgPath) {
		this.imgPath = imgPath;
	}
	
	public byte[] getFile() {
		return file;
	}
	public void setFile(byte[] file) {
		this.file = file;
	}
	public Gender getGender() {
		return gender;
	}
	public void setGender(Gender gender) {
		this.gender = gender;
	}
	
	public static void main(String[] args) {
		EntityManager manager = JPAManagerFactory.getMFInstance().getManager();
		EntityTransaction t = manager.getTransaction();
		t.begin();
//		UserBean user = new UserBean();
//		user.setId(2);
//		user.setBirthday(new Date());
//		user.setGender(Gender.FEMAIL);
//		user.setName("天意");
//		String info = "聚焦经典案例!主委会在设置深圳站议程的时候更加突出了经典案例的演讲比例,不论是服务号还是企业号的开发、功能设计、高级应用案例。例如,我们邀请了获微信官网推荐、被原微信产品总监曾鸣(现产品部助理总经理)称为,腾讯眼中微信公众平台上七个经典案例的南航微信服务号、招商银行信用卡服务号,他们的开发商或信息技术团队负责人都将带来精彩演讲。"
//+"作为招商银行信用卡微信服务号的开发商,深圳云软还做过中国电信、广东联通、民生银行、华泰证券等行业领先案例,是国内首屈一指的能承建千万级用户的微信第三方开发商。深圳云软联合创始人/技术副总裁黄榕振将带来《以招行为例 微信公众帐号企业应用开发高级篇》 的主题演讲。"
//+"演讲议题不仅将围绕企业应用微信公众帐号的几个阶段、细谈CRM绑定、分离式CRM、交互设计的核心、系统安全性的几个问题、功能设计与用户痛点、某银行功能使用频度分析、多客服高级应用、分层次的软件架构设计、高性能和高可用设计、多公众号分权分域管理、分组群发高级应用几个主题展来深入演讲。黄榕振的演讲中还将融入微信平台的最新接口功能和应用。"
//+"而作为南航微信服务号实际操盘手的郑炜旸(南方航空资深架构师/微信项目产品经理 ),不仅将带来南航在微信平台上开发服务号过程的三个阶段,重点内容涵盖了南航微信服务号的平台规划、功能点设计、用户痛点、安全问题、高级应用等内容。另外,作为首批微信企业号的尝鲜者,在企业号的开发和使用上,南航也有自己的独到之处。"
//+"说到企业号,除了郑炜旸演讲中讲涉及企业号的开发与运营之外,来自于长安汽车股份有限公司管理创新与IT中心总工程师、原南航信息中心CTO 龙庚将带来《长安汽车微信企业号是如何炼成》的专场主题演讲。"
//+"本着对所有参会者负责的原则,主委会要求演讲嘉宾观点明确,从实践出发,拒绝泛谈大概念/大趋势、空洞理论。";
//		System.out.println(info.length());//760+
//		user.setIntroduce(info);
//		manager.persist(user);
		
//		/**
//		 * 当对象处于托管状态的时候调用set方法就能够同步到数据库
//		 * 这里,我们开启了事务,然后通过find方法获取对象,这个对象就处于托管的状态
//		 * 
//		 * manager.clear();//将manager管理的所有托管状态的对象变为游离状态
//		 * 在游离状态的对象调用set方法,改变属性的值,是不能同步到数据库的,只有托管状态的对象能同步到数据库
//		 * 
//		 * manager.merge(user); //该方法是将游离状态的实体对象同步到数据库(类似于从游离状态转换为托管状态,这样就可以直接更新到数据库)
//		 */
//		UserBean user = manager.find(UserBean.class, 2);
//		user.setName("龙天狼");
		
		Query query = manager.createQuery("select user from UserBean user where user.id=?11");//采用位置参数的设置方法
		query.setParameter(11, 1);
		List<UserBean> list = query.getResultList();
		for(UserBean user : list){
			System.out.println(user.toString());
		}
//		UserBean user = (UserBean)query.getSingleResult();
//		System.out.println(user.getName());
		t.commit();
		manager.close();
	}
	
	
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics