private Set<Service> services = new HashSet<Service>();
<set name="关联属性名">
<key column="关联字段名"/>
<one-to-many class="关联表的实体类名"/>
</set>
--实现
<set name="services">
<key column="account_id"/>
<one-to-many class="com.*.entity.Service"/>
</set>
<span style="font-size:14px;">public void testFind() {
Session session = HibernateUtil.getSession();
Account a = (Account) session.load(Account.class, 1010);
System.out.println("---显示Account账号信息---");
System.out.println(a.getId() + " " + a.getRealName() + " " + a.getIdcardNo());
System.out.println("---显示当前账号下的业务账号---");
Set<Service> services = a.getServices();
for (Service s : services) {
System.out.println(s.getId() + " " + s.getOsUserName() + " " + s.getUnixHost());
}
System.out.println(a.toString());
}</span>
<span style="font-size:14px;">public void testFind() {
Session session = HibernateUtil.getSession();
Service s = (Service) session.get(Service.class, 2002);
System.out.println("----显示业务账号信息---");
System.out.println(s.getId() + " " + s.getOsUserName() + " " + s.getUnixHost());
System.out.println("----显示相关账务账号信息---");
System.out.println(s.getAccount().getId() + " " + s.getAccount().getRealName());
}</span>
<span style="font-size:14px;">public void testFind() {
Session session = HibernateUtil.getSession();
// Account a = (Account) session.load(Account.class, 1010);
String hql = "from Account a join fetch a.services where a.id=?";
Query query = session.createQuery(hql);
query.setInteger(0, 1010);// ?从0开始
Account a = (Account) query.uniqueResult();// 单行查询可采用
System.out.println("---显示Account账号信息---");
System.out.println(a.getId() + " " + a.getRealName() + " " + a.getIdcardNo());
System.out.println("---显示当前账号下的业务账号---");
Set<Service> services = a.getServices();
for (Service s : services) {
System.out.println(s.getId() + " " + s.getOsUserName() + " " + s.getUnixHost());
}
System.out.println(a.toString());
}</span>
--语法
<set name="关联属性名" table="中间表名">
<key column="Admin的关联字段名"/>
<many-to-many class="关联表的实体类名"
column="关联表的关系字段名"/>
</set>
--代码
<set name="roles" table="admin_role">
<key column="admin_id"/>
<many-to-many class="com.*.entity.Role"
column="role_id"/>
</set>
<span style="font-size:14px;"> // 移除角色
@Test
public void testDeleteRole() {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
Admin a = (Admin) session.load(Admin.class, 1);
Role r1 = (Role) session.load(Role.class, 1);
a.getRoles().remove(r1);
session.update(a);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
// 追加角色
@Test
public void testAddRole() {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
Admin a = (Admin) session.load(Admin.class, 1);
Role r1 = (Role) session.load(Role.class, 1);
Role r2 = (Role) session.load(Role.class, 43);
Role r3 = (Role) session.load(Role.class, 44);
a.getRoles().add(r1);
a.getRoles().add(r2);
a.getRoles().add(r3);
session.update(a);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}
@Test
public void testFind() {
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
Admin a = (Admin) session.load(Admin.class, 1);
System.out.println("----显示管理员信息---");
System.out.println(a.getId() + " " + a.getName() + " "
+ a.getTelephone());
System.out.println("----显示管理员角色信息---");
for (Role role : a.getRoles()) {
System.out.println(role.getName() + " ");
}
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
} finally {
session.close();
}
}</span>
<joined-subclass
name="类型名" table="表名"
extends="父类名称">
<key column="关联字段名"/>
<property name="" type="" column=""/>
...
</joined-subclass>
<span style="font-size:14px;"> // 测试按非主键做条件查询
@Test
public void testFind1() {
String hql = "from Service where account.id=? and unixHost=?";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
query.setInteger(0, 1011);
query.setString(1, "192.168.0.23");
List<Service> list = query.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}
// 等价于testFind1,采用“:标识符”替代
@Test
public void testFind2() {
String hql = "from Service where account.id=:aid and unixHost=:host";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
query.setInteger("aid", 1011);
query.setString("host", "192.168.0.23");
List<Service> list = query.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}</span>
<span style="font-size:14px;"> // 获取部分字段结果,默认采用Object[]封装数据
@Test
public void testFind3() {
String hql = "select s.id,s.unixHost,s.osUserName from Service s where s.account.id=?";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
query.setInteger(0, 1011);
List<Object[]> list = query.list();
for (Object[] objs : list) {
System.out.println(objs[0] + " " + objs[1] + " " + objs[2] + " ");
}
session.close();
}
// 等价于testFind3,需要添加对应的构造方法
@Test
public void testFind4() {
String hql = "select new Service(s.id,s.unixHost,s.osUserName) from Service s where s.account.id=?";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
query.setInteger(0, 1011);
List<Service> list = query.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}</span>
<span style="font-size:14px;"><query name="findAll"><!-- CDATA内包括纯文本字段,防止出现特殊字符 -->
<![CDATA[
from Service
]]>
</query></span>
<span style="font-size:14px;"> // 将HQL定义到hbm.xml中(只适用静态HQL语句结构)
@Test
public void testFind5() {
Session session = HibernateUtil.getSession();
// 获取hbm.xml中<query>定义的hql语句
Query query = session.getNamedQuery("findAll");
List<Service> list = query.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}</span>
<span style="font-size:14px;"> // 测试分页查询
@Test
public void testFind6() {
int page = 2;
String hql = "from Service order by id";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
// 追加分页参数设置
query.setFirstResult((page - 1) * 3);// 设置抓起记录的起点,从0开始
query.setMaxResults(3);// 设置最大抓取数量
List<Service> list = query.list();// 执行查询,如果没有分页设置就查所有值
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}
// select count(*) from SERVICE
@Test
public void testFind7() {
String hql = "select count(*) from Service";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
Long size = (Long) query.uniqueResult();
System.out.println("记录总数:" + size);
session.close();
}</span>
<span style="font-size:14px;"> // 使用Hibernate的API来拼一个HQL
@Test
public void testFind1() {
Session session = HibernateUtil.getSession();
Criteria c = session.createCriteria(Service.class);
c.add(Restrictions.and(Restrictions.like("osUserName", "huang%"),
Restrictions.eq("unixHost", "192.168.0.26")));// 追加查询条件
List<Service> list = c.list();// 执行查询,如果没有分页设置就查所有值
c.addOrder(Order.desc("id"));// 追加排序
// c.setFirstResult(arg0);//分页
// c.setMaxResults(arg0);
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName() + " "
+ s.getUnixHost());
}
session.close();
}</span>
<span style="font-size:14px;"> @Test
public void testFind1() {
String sql = "select * from Service";
Session session = HibernateUtil.getSession();
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setFirstResult(0);// 分页
sqlQuery.setMaxResults(3);
// 默认采用数组封装一条记录
List<Object[]> list = sqlQuery.list();
for (Object[] objs : list) {
System.out.println(objs[0] + " " + objs[2]);
}
session.close();
}
//同testFind1(),指定封装记录的实体
@Test
public void testFind2() {
String sql = "select * from Service";
Session session = HibernateUtil.getSession();
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.setFirstResult(0);// 分页
sqlQuery.setMaxResults(3);
// 指定封装记录的实体类
sqlQuery.addEntity(Service.class);
// 采用指定的Service类型封装一条记录
List<Service> list = sqlQuery.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName());
}
session.close();
}</span>
<span style="font-size:14px;"><!-- 使用二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 指定二级缓存组件的驱动类ehcache.jar --> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property></span>
<span style="font-size:14px;"><span style="font-size:14px;"> @Test
public void testFind1() {
// 第一次查询,使用session1
Session session1 = HibernateUtil.getSession();
Service s1 = (Service) session1.get(Service.class, 2002);
System.out.println(s1.getOsUserName() + " " + s1.getUnixHost());
session1.close();
// 第二次查询,使用session2(配置二级缓存后,两次查询均到二级缓存中取数据)
// HibernateUtil.getSessionFactory().evict(Service.class);// 移除后则还是查询两次
Session session2 = HibernateUtil.getSession();
Service s2 = (Service) session2.get(Service.class, 2002);
System.out.println(s2.getOsUserName() + " " + s2.getUnixHost());
}</span></span>
<span style="font-size:14px;"><!-- 开启查询缓存 --> <property name="hibernate.cache.use_query_cache">true</property></span>
<span style="font-size:14px;"><span style="font-size:14px;"> @Test
public void testFind() {
find();
System.out.println("-------");
find();
}
private void find() {
String hql = "from Service where account.id=?";
Session session = HibernateUtil.getSession();
Query query = session.createQuery(hql);
query.setInteger(0, 1011);
// 启用查询缓存执行
query.setCacheable(true);
List<Service> list = query.list();
for (Service s : list) {
System.out.println(s.getId() + " " + s.getOsUserName());
}
}</span></span>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有