Hibernate5-动态参数绑定

1.创建项目,项目名称hibernatedemo5,目录结构如图所示

2.在项目中创建lib目录存储jar文件,目录结构如图所示

3.在src目录中创建实体Bean Forum,包名(com.mycompany.demo.bean),如图所示

4.实体Bean Forum的内容如下

package com.mycompany.demo.bean;

public class Forum {
	private int fid;
	private String name;

	public Forum() {
		super();
	}
	public Forum(String name) {
		super();
		this.name = name;
	}
	public int getFid() {
		return fid;
	}
	public void setFid(int fid) {
		this.fid = fid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + fid;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Forum other = (Forum) obj;
		if (fid != other.fid)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

5.在src目录中创建实体Bean Forum的映射文件Forum.hbm.xml,包名(com.mycompany.demo.bean),如图所示

6.映射文件Forum.hbm.xml的内容如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<!--
	package:指定<class/>所在的包 
 -->
<hibernate-mapping package="com.mycompany.demo.bean">
	<!--
		name:类名
		table:表名 
		catalog:数据库名称,默认为hibernate.cfg.xml中配置的数据库名称
	 -->
   <class name="Forum" table="hnsq_forum" catalog="b_shequ_two">
      <meta attribute="class-description">
         This class contains the forum detail. 
      </meta>
      <!--
      	name:属性名
      	colum:列名 
       -->
      <id name="fid" type="int" column="fid">
      		<!--
      			increment:hibernate维护主键值
      			identity:数据库自增长
      			sequence:序列
      			native:根据不同的数据库选择生成策略
      			uuid:通过UUID算法生成,实际使用较多
      			assigned:手工设置
      		 -->
         <generator class="native"/>
      </id>
      
      <!--
      	length:字节长度
      	type:字段类型,支持java和hibernate类型
      	not-null:非空约束
      	unique:唯一性约束
       -->
      <property name="name" column="name" type="string" length="50" not-null="true" unique="false"/>
   </class>
</hibernate-mapping>

7.在src目录中创建工具类 HbnUtil,包名(com.mycompany.demo.util),如图所示

8.工具类 HbnUtil的内容如下

package com.mycompany.demo.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HbnUtil {
	private static SessionFactory sessionFactory;

	public static Session getSession(){
		if(sessionFactory == null || sessionFactory.isClosed()){
			sessionFactory = new Configuration().configure().buildSessionFactory();
		}

		return sessionFactory.getCurrentSession();
	}
}

9.在src目录中创建Hibernate的配置文件hibernate.cfg.xml,如图所示

10.Hibernate的配置文件hibernate.cfg.xml的内容如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
   <session-factory>
   	<!-- 方言,可以从Hibernate核心jar(hibernate-core-x.x.x.Finall.jar)
   	文件中的or.hibernate.dialect包中找到相应的类,类的全名就是 -->
	   <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
	   <!-- 驱动 -->
	   <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

	   <!-- 数据库连接地址 -->
	   <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/b_shequ_two</property>
	   <!-- 用户名 -->
	   <property name="hibernate.connection.username">
	      root
	   </property>
	   <!-- 密码 -->
	   <property name="hibernate.connection.password"></property>
	   <!--
	   		create:每次都新创建,如果存在就删除
	   		create-drop:创建新表,sessionFactory关闭,表会删除
	   		update :表字段增加,会同步,字段减少不同步,数据改变会同步修改
	    -->
	   <property name="hibernate.hbm2ddl.auto">update</property>
	   <!-- 输出sql -->
	   <property name="hibernate.show_sql">true</property>
	   <!-- 格式化sql -->
	   <property name="hibernate.format_sql">true</property>
	   <!-- 事务环境一个线程对一个事务
	   		thread:本地事务环境
	   		jta:分布式事务环境
	   		SpringSessionContext:用于ssh整合
	    -->
	   <property name="hibernate.current_session_context_class">thread</property>	  
	   
	   <!-- 使用c3p0数据源 -->
	   <property name="hibernate.connection.provider_class">
	       org.hibernate.c3p0.internal.C3P0ConnectionProvider
	   </property> 

	   <!-- List of XML mapping files -->
	   <mapping resource="com/mycompany/demo/bean/Forum.hbm.xml"/>
</session-factory>
</hibernate-configuration>

11.在项目中创建test目录存储测试文件,文件名称ManageForum,包名(com.mycompany.demo.bean),目录结构如图所示

12.ManageForum测试类的内容如下

package com.mycompany.demo.bean;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.junit.Before;
import org.junit.Test;

import com.mycompany.demo.util.HbnUtil;

public class ManageForum {

	private Session session;

	@Before
	public void init(){
		session = HbnUtil.getSession();
	}

	/*
	 * 动态参数绑定查询-SQL-"?"号占位方式-setXxx(int position,Object value)方法绑定参数
	 */
	@Test
	public void testSetXxxForSQL(){
		try {
			session.beginTransaction();
			String sql = "SELECT * FROM hnsq_forum where fid > ? AND fid < ?";
			List<Forum> forums = session.createSQLQuery(sql).addEntity(Forum.class)
					.setInteger(0, 20).setInteger(1, 50).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定查询-SQL-"?"号占位方式-setParamter(int position,Object value)
	 */
	@Test
	public void testSetParamterForSQL(){
		try {
			session.beginTransaction();
			String sql = "SELECT * FROM hnsq_forum where fid > ? AND fid < ?";
			List<Forum> forums = session.createSQLQuery(sql).addEntity(Forum.class)
					.setParameter(0, 20)
					.setParameter(1, 50)
					.list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定-SQL-":别名"占位-setParamter(String name,Object value)
	 */
	@Test
	public void testAliasForSQL(){
		try {
			session.beginTransaction();
			String sql = "SELECT * FROM hnsq_forum WHERE fid > :lfid AND fid < :gfid";
			List<Forum> forums = session.createSQLQuery(sql).addEntity(Forum.class)
					.setParameter("lfid", 20)
					.setParameter("gfid", 50)
					.list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定-HQL-"?"号占位方式-setParamter(int position,Object value)
	 */
	@Test
	public void testSetXxxForHQL(){
		try {
			session.beginTransaction();
			String sql = "FROM Forum WHERE fid > ? AND fid < ?";
			List<Forum> forums = session.createQuery(sql)
					.setInteger(0, 20).setInteger(1, 50).list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定查询-HQL-"?"号占位方式-setParamter(int position,Object value)
	 */
	@Test
	public void testSetParamterForHQL(){
		try {
			session.beginTransaction();
			String sql = "FROM Forum WHERE fid > ? AND fid < ?";
			List<Forum> forums = session.createQuery(sql)
					.setParameter(0, 20)
					.setParameter(1, 50)
					.list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定-HQL-":别名"占位-setParamter(String name,Object value)
	 */
	@Test
	public void testAliasForHQL(){
		try {
			session.beginTransaction();
			String sql = "FROM Forum WHERE fid > :lfid AND fid < :gfid";
			List<Forum> forums = session.createQuery(sql)
					.setParameter("lfid", 20)
					.setParameter("gfid", 50)
					.list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}

	/*
	 * 动态参数绑定-QBC-Restrictions
	 */
	@Test
	public void testParamterQBC(){
		try {
			session.beginTransaction();
			List<Forum> forums = session.createCriteria(Forum.class)
					.add(Restrictions.gt("fid", 20))
					.add(Restrictions.lt("fid", 50))
					.list();
			for (Forum forum : forums) {
				System.out.println(forum.getName());
			}
			session.getTransaction().commit();
		} catch (HibernateException e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		}
	}
}

时间: 2024-10-12 23:09:22

Hibernate5-动态参数绑定的相关文章

编程开发之--Oracle数据库--存储过程使用动态参数绑定(3)

1.动态参数绑定,可以实现动态的执行不同的sql --创建包 create or replace PACKAGE MYPACKAGE AS type empcursor is ref cursor; procedure queryEmpList(dno in number,empList out empcursor); END MYPACKAGE; --创建包体 create or replace PACKAGE BODY MYPACKAGE AS procedure queryEmpList(

[Spring MVC] - SpringMVC的各种参数绑定方式

SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input name="count" value="10" ty

Java前期(静态)绑定和后期(动态)绑定

Java前期(静态)绑定和后期(动态)绑定 程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定. 静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类中的方法),此时由编译器或其它连接程序实现.例如:C.针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定:后期绑

Spring MVC (二 ) ---- 各种参数绑定方式

转载自:http://www.cnblogs.com/HD/p/4107674.html SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <input n

springMVC参数绑定

默认支持的参数类型 处理器形参中添加如下类型的参数处理注解适配器会默认识别并进行赋值.1 HttpServletRequest通过request对象获取请求信息2 HttpServletResponse通过response处理响应信息3 HttpSession通过session对象得到session中存放的对象4 Model通过model向页面传递数据,如下://调用service查询商品信息Items item = itemService.findItemById(id);model.addA

23SpringMvc_各种参数绑定方式-就是&lt;input那种

本篇博文转载自http://www.cnblogs.com/HD/p/4107674.html: SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") public void test(int count) { } 表单代码: <form action="saysth.do" method="post"> <inp

HQL参数绑定

hibernate HQL查询的参数绑定 (2010-07-15 09:20:16) 转载▼ 标签: 杂谈 分类: JAVA  参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.

hibernate HQL查询的参数绑定

参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: PrepareStatement pre=connection.prepare(“select * from User where user.name=?”); pre.setString(1,”zhaoxin”); ResultSet rs=pre.executeQuery(); 在Hibern

JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别

1. 学习计划   第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) SpringMVC默认支持的类型 b) 简单数据类型 c) Pojo类型 d) Pojo包装类型 e) 自定义参数绑定 6.SpringMVC和Struts2的区别   第二天 1.高级参数绑定 a) 数组类型的参数绑定 b) List类型的绑定 2.@RequestMapping注解的使用 3.Con