使用注解的配置:
-------------------------------------------------------------------------
使用基本注解保存无关联实体:
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();
}
}
使用注解方式保存关联实体:
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();
}
}