使用注解的配置:
Hibernate注解
Hibernate注解
Hibernate注解

Hibernate注解

-------------------------------------------------------------------------
使用基本注解保存无关联实体:
Hibernate注解

Hibernate注解
public class Test_1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//使用基本注解保存无关联实体
Author author=new Author("19号","123");
try {
session.save(author);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
tx.rollback();
}
// 4.关闭session
session.close();
}

}

使用注解方式保存关联实体:
Hibernate注解
Hibernate注解

public class Test_2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
// 使用注解方式保存关联实体
Author author = new Author("龟仙人", "123");
Blog blog = new Blog("好色");
blog.setAuthor(author);
try {
session.save(blog);
tx.commit();
} catch (Exception e) {
// TODO: handle exception
tx.rollback();
}
// 4.关闭session
session.close();

}

}

注解的方式是把配置文件写在实体里了,其它基本类似


-------------------------------------------------------------------------------------------------

@Id——声明了该实体的标识属性,该属性对应表中的主键
@Id
private Long id;

@Column——声明了属性到列的映射
@Column(name="addr")
private String address
name 可选,列名(默认值是属性名)
unique 可选,是否在该列上设置唯一约束(默认值false)
nullable 可选,是否设置该列的值可以为空(默认值false)
insertable 可选,该列是否作为生成的insert语句中的一个列(默认值true)
updatable 可选,该列是否作为生成的update语句中的一个列(默认值true)
@GeneratedValue——声明了主键的生成策略,该注解的strategy属性指定了主键生成策略,默认值为GenerationType.AUTO
GenerationType.AUTO ,自动选择最适合底层数据库的主键生成策略
GenerationType.IDENTITY, 对于MySQL、SQL Server这样的数据库选择自增长的注解生成策略
GenerationType.SEQUENCE,对于Oracle这样的数据库,选择使用基于sequence的主键生成策略,它与@SequenceGenerator共同使用

@ManyToOne属性说明

属 性 是否必需 说 明
cascade 指定对关联实体所采用的级联策略,该级联策略支持如下五个属性值:
CascadeType.ALL:将所有的持久化操作都级联到关联实体
CascadeType.PERSIST:将persist操作级联到关联实体
CascadeType.MERGE:将merge操作级联到关联实体
CascadeType.REFRESH:将refresh操作级联到关联实体
CascadeType.REMOVE:将remove操作级联到关联实体
fetch 指定抓取关联实体时的抓取策略,该属性支持以下两个属性值:
FetchType.EAGER:抓取实体时,立即抓取关联实体,这是默认值
FetchType.LAZY:抓取实体时,延迟抓取关联实体,等到真正用到关联实体时才去抓取
targetEntity 该属性指定关联实体的类名。在默认情况下,系统将通过反射来判断关联实体的类名。


@JoinColumn属性说明

属 性 是否必需 说 明
name 指定该外键列的列名
inserttable 指定该列是否包含在insert语句的列表中,默认值为true
updatetable 指定该列是否包含在update语句的列表中,默认值为true
nulltable 指定该列是否允许为null,默认值为true
unique 指定是否为该列增加唯一约束


@JoinTable属性说明
属 性 是否必需 说 明
name 指定连接表的表名
joinColumns 该属性可以接受多个@JoinColumn,用于配置连接表中外键列的列信息,这些外键列参照当前实体的主键列
inverseJoinColumns 该属性可以接受多个@JoinColumn,用于配置连接表中外键列的列信息,这些外键列参照当前实体的关联实体的主键列

--------------------------------------------------------------------------------


HQL支持的运算符
运算类型 HQL运算符 含 义
比较运算 = 等于
<> 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
is null 为空
is not null 不为空
范围运算 in 等于列表中的某一个值
not in 不等于列表中的任意一个值
between 值1 and 值2 大于等于值1且小于等于值2
not between值1 and 值2 小于值1或大于值2
字符串模式匹配 like 字符串模式匹配
逻辑运算 and 逻辑与
or 逻辑或
not 逻辑非


HQL查询:
public class Test_3 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL查询
String hql=" from Blog b where b.id=:id ";
Query query=session.createQuery(hql);
query.setInteger("id", 1);
List<Blog> list= query.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getTitle());
}
// 4.关闭session
session.close();
}

}


HQL删除:
public class Test_4 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL删除
String hql=" delete Blog b where b.id=42 ";
Query query=session.createQuery(hql);
query.executeUpdate();
tx.commit();
System.out.println("删除完成");
// 4.关闭session
session.close();
}

}

HQL更新:
public class Test_5 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL更新
String hql=" update Blog b set b.type='动漫' where b.title='美食论' ";
Query query=session.createQuery(hql);
query.executeUpdate();
tx.commit();
System.out.println("更新完成");
// 4.关闭session
session.close();

}

}

HQL排序:
public class Test_6 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL排序
String hql=" from Blog b order by author_id";
Query query=session.createQuery(hql);
List<Blog> list= query.list();
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getTitle());
};
// 4.关闭session
session.close();

}

}


HQL分组:

public class Test_7 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL分组
String hql="select type,count(*) from Blog b group by b.type";
Query query=session.createQuery(hql);
List<Object[]> list= query.list();
for (int i = 0; i < list.size(); i++) {
Object[] obj=list.get(i);
System.out.println("类型:"+obj[0]);
System.out.println("数量:"+obj[1]);
};
// 4.关闭session
session.close();

}

}


public class Test_8 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL分组 查询作者的博客数量
String hql="select author,count(*) from Blog b group by b.author";
Query query=session.createQuery(hql);
List<Object[]> list= query.list();
for (int i = 0; i < list.size(); i++) {
Object[] obj=list.get(i);
System.out.println("作者:"+((Author)obj[0]).getUsername());
System.out.println("数量:"+obj[1]);
};
// 4.关闭session
session.close();

}

}
分页:
public class Test_9 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
// HQL分页
// int page=1; //当前页数
int count = 3; // 数量
String hql = " from Blog ";
Query query = session.createQuery(hql);
for (int page = 1; page <= 4; page++) {
System.out.println("第" + page + "页:");
List<Blog> list = query.setFirstResult((page - 1) * count)
.setMaxResults(count).list();
for (int i = 0; i < list.size(); i++) {
System.out.println("作者:" + list.get(i).getTitle());
};
}
// 4.关闭session
session.close();
}

}

联合查询:

public class Test_1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL联合查询
String hql=" from Author a inner join a.blogs";
Query query=session.createQuery(hql);
List<Object[]> obj= query.list();
for (int i = 0; i < obj.size(); i++) {
System.out.print("作者:"+((Author)obj.get(i)[0]).getUsername());
System.out.print("博客:"+((Blog)obj.get(i)[1]).getTitle()+"\n");
};
// 4.关闭session
session.close();
}

}

子查询:

public class Test_2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1.创建session
Session session = HibernateSessionFactory.getSession();
// 2.创建事务
Transaction tx = session.beginTransaction();
// 3.进行操作
//HQL子查询
String hql=" from Author a where (select count(*) from a.blogs )=2 ";
Query query=session.createQuery(hql);
List<Author> obj= query.list();
for (int i = 0; i < obj.size(); i++) {
System.out.println("作者:"+obj.get(i).getUsername());
};
// 4.关闭session
session.close();

}

}

相关文章: