hibernate 03

使用HQL查询所有记录

预见结果集

多个就用list处理 

单个就用 uniqueResult

        @Test
	public void fun1() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		
		String hql = "from com.lanou3g.User";
		Query<User> query = session.createQuery(hql);
		List<User> list = query.list();
		System.out.println(list);
		transaction.commit();
		session.close();
	}
        @Test
	public void fun2() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		String hql = "from com.lanou3g.User where id = 2";
		Query<User> query = session.createQuery(hql);
		User user = query.uniqueResult();
		System.out.println(user);
		transaction.commit();
		session.close();
	}

使用问号占位符替代 

?从0开始

        @Test
	public void fun3() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		String hql = "from com.lanou3g.User where id = ?";
		Query<User> query = session.createQuery(hql);
		query.setParameter(0, 2);
		User user = query.uniqueResult();
		System.out.println(user);
		transaction.commit();
		session.close();
	}

使用冒号占位符

冒号后面是占位符的名字

注意 冒号后面不要加空格

替换时 直接使用名字即可

        @Test
	public void fun4() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		String hql = "from com.lanou3g.User where username = :username and password = :password";
		Query<User> query = session.createQuery(hql);
		query.setParameter("username", "wanglong");
		query.setParameter("password", "123");
		User user = query.uniqueResult();
		System.out.println(user);
		transaction.commit();
		session.close();
	}

分页

        @Test
	public void fun5() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		String hql = "from User";
		Query<User> query = session.createQuery(hql, User.class);
		query.setFirstResult(0);
		query.setMaxResults(2);
		List<User> list = query.list();
		System.out.println(list);
		transaction.commit();
		session.close();
	}

测试1对多

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lanou3g">
	<class name="Customer" table="cst_customer">
		<id name="cust_id" column="cust_id">
			<generator class="native"></generator>
		</id>
		<property name="cust_name" column="cust_name"></property>
		<property name="cust_source" column="cust_source"></property>
		<property name="cust_industry" column="cust_industry"></property>
		<property name="cust_level" column="cust_level"></property>
		<property name="cust_linkman" column="cust_linkman"></property>
		<property name="cust_phone" column="cust_phone"></property>
		<property name="cust_mobile" column="cust_mobile"></property>
		<!-- 配置一对多关系 
			name表示实体类对象属性名
			column:两张表联系的外键
			注意:外键名要一致 否则会多建一个外键
			class 与哪个类进行一对多
		-->
		<!-- 级联操作
			作用:简化代码
			cascade 
			sava-update 级联保存和更新
			delete 级联删除
			all		sava-update+delete
			建议 最多使用sava-update
		 -->
		 <!--inverse反转
		 	默认值是false
		 	不放弃维护外键
		 	作用:提高效率的
		 	一对多的表关系
		 	如果要放弃维护外键关系
		 	只能是一的一方放弃
		   -->
		<set name="linkmans" cascade="save-update" inverse="true">
			<key column="lkm_cust_id"></key>
			<one-to-many class="Linkman"/>
		</set>	
	</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lanou3g">
	<class name="Linkman" table="cst_linkman">
		<id name="lkm_id" column="lkm_id">
			<generator class="native"></generator>
		</id>
		<property name="lkm_name" column="lkm_name"></property>
		
		<property name="lkm_gender" column="lkm_gender"></property>
		<property name="lkm_phone" column="lkm_phone"></property>
		<property name="lkm_mobile" column="lkm_mobile"></property>
		<property name="lkm_email" column="lkm_email"></property>
		<property name="lkm_qq" column="lkm_qq"></property>
		<property name="lkm_position" column="lkm_position"></property>
		<property name="lkm_memo" column="lkm_memo"></property>
		<!-- 配置多对一的关系
			name表示多对一对象的属性名
			class表示的是多对一对象的类
			column表示的是外键
			注意:上面在配置properties时不要重复配置外键
		 -->
		<many-to-one name="customer" class="Customer" column="lkm_cust_id"></many-to-one>
	</class>
</hibernate-mapping>
public class Demo02 {
	@Test
	public void fun1() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		//创建一个客户两个联系人
		//表示客户和联系人的关系
		//将以上添加到数据库中
		Customer customer = new Customer();
		customer.setCust_name("蓝鸥科技");
		Linkman l1 = new Linkman();
		l1.setLkm_name("欣姐");
		Linkman l2 = new Linkman();
		l2.setLkm_name("韦姐");
		Set<Linkman> linkmans = customer.getLinkmans();
		linkmans.add(l1);
		linkmans.add(l2);
		l1.setCustomer(customer);
		l2.setCustomer(customer);
		session.save(customer);
		//session.save(l1);
		//session.save(l2);
		transaction.commit();
		session.close();
		
	}
	//为id为1的客户添加一个联系人
	@Test
	public void fun2() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		
		Customer customer = session.get(Customer.class, 1);
		Linkman l1 = new Linkman();
		l1.setLkm_name("hh");
		Set<Linkman> linkmans = customer.getLinkmans();
		linkmans.add(l1);
		l1.setCustomer(customer);
		session.save(l1);
		
		
		transaction.commit();
		session.close();
	}
	//删除id为1的客户的id为1的联系人
	@Test
	public void fun3() {
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		
		Customer customer = session.get(Customer.class, 1);
		Linkman linkman = session.get(Linkman.class, 1);
		
		Set<Linkman> linkmans = customer.getLinkmans();
		linkmans.remove(linkman);
		linkman.setCustomer(null);
		
		
		
		transaction.commit();
		session.close();
		
	}
}
测试多对多
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lanou3g">
<!--配置表与实体类的关系 
	name:实体类全类名
	table:表名
	package:填包名 填上后 底下再写全类名 可以省略包名
 -->
	<class name="User" table="sys_user">
		<id name="user_id" column="user_id">
			<generator class="native"></generator>
		</id>
		<property name="user_code" column="user_code"></property>
		<property name="user_name" column="user_name"></property>
		<property name="user_password" column="user_password"></property>
		<property name="user_state" column="user_state"></property>
		<!-- 配置多对多关系 
			name 容器名字
			table 中间表的名字
			column 中间表引用我的id
		many-to-many class 对应的那个表的类名 
		column  对应那个表外键
		-->
		<!-- 多对多时必须要有一方放弃对外键的维护 -->
		<set name="roles" table="sys_user_role" inverse="true">
			<key column="user_id"></key>
			<many-to-many class="Role" column="role_id"></many-to-many>
		</set>
		
	</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.lanou3g">
	<class name="Role" table="sys_role">
		<id name="role_id" column="role_id">
			<generator class="native"></generator>
		</id>
		<property name="role_name" column="role_name"></property>
		<property name="role_memo" column="role_memo"></property>
		
		<!-- 配置多对多关系 
			name 容器名字
			table 中间表的名字
			column 中间表引用我的id
		many-to-many class 对应的那个表的类名 
		column  对应那个表外键
		-->
		<set name="users" table="sys_user_role">
			<key column="role_id"></key>
			<many-to-many class="User" column="user_id"></many-to-many>
		</set>
		
	</class>
</hibernate-mapping>
        @Test
	public void fun1() {
		//创建两个员工
		//创建两个角色 保姆 保镖
		//这两员工 都是保姆也是保镖
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		User u1 = new User();
		u1.setUser_name("王龙");
		User u2 = new User();
		u2.setUser_name("王一鸣");
		Role r1 = new Role();
		r1.setRole_name("保姆");
		Role r2 = new Role();
		r2.setRole_name("保镖");
		Set<Role> roles1 = u1.getRoles();
		roles1.add(r1);
		roles1.add(r2);
		Set<Role> roles2 = u2.getRoles();
		roles2.add(r2);
		roles2.add(r2);
		r1.getUsers().add(u1);
		r1.getUsers().add(u2);
		r2.getUsers().add(u1);
		r2.getUsers().add(u1);
		session.save(u1);
		session.save(u2);
		session.save(r1);
		session.save(r2);
		
		transaction.commit();
		session.close();
	}
	//为王龙添加一个新角色
	@Test
	public void fun2() {
		
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		User user = session.get(User.class, 1);
		Role role = new Role();
		role.setRole_name("讲师");
		Set<Role> roles = user.getRoles();
		roles.add(role);
		role.getUsers().add(user);
		session.save(user);
		session.save(role);
		
		transaction.commit();
		session.close();
	}
	
	//为王龙删除一个id为3的角色
	@Test
	public void fun3() {
		
		Session session = HibernateUtil.getOpensession();
		Transaction transaction = session.beginTransaction();
		User user = session.get(User.class, 1);
		Role role = session.get(Role.class, 3);
		user.getRoles().remove(role);
		role.getUsers().remove(user);
		
		
		
		transaction.commit();
		session.close();
	}











  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值