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();
}
}