数据层: /*一定要有工具给你自动生成的session工厂(如果你用的IDE是MyEclipse那么在添Hibernate *将会给你自动生成)。 */ Session sess = HibernateSessionFactory.getSession(); User u = new User(); u.setName("张三"); u.setAge("18"); .....给属性赋值 sess.save(u); //添加 sess.update(u); //在保存的时候、一定要给User的Id属性赋值更新跟添加的区别就在Id(主键)属性 sess.detele(u); //删除的时候、也要Id属性。 //sess.get()方法返回一个Object对象 User user = sess.get(User.class,u.getId); //根据编号获取一条记录(User.class要查询的类)。
//其中User类名开头字母要大写(就是跟你的javaBean名称一样)——查询全部记录 Query query = sess.CreateQuery("你的hql语句如:from User"); List list = query.list(); //query.list()返回一个list集合 //如果有参数 //String hql = "from User where name = :name "; //Query query = sess.CreateQuery(hql); //query.setString("name","张三"); //还有很多中设值参数的方法、自己下去google一下。 //List list = query.list(); 值得注意的是当你只要查询某张表中的某几个字段的时候、Hibernate会根据你要查询的字段的个数给你返回不同的类型(虽然qeury.list方法返回的都是list但是list中存储的类型不同) 如: String hql ="select u.name,u.age from User u"; List list = query.list(); //当你用对象去接收list集合中的值的时候...嘿嘿!!! for(int i = 0 ; i <list.size(); i++){ User u = list.get(i); //这句会出错,因为你list集合中存储的是数组不是对象 } 那么什么时候是对象、什么时候是数组呢! 好像、只查询一个字段的时候、返回的是Object、查询俩个、或者两个以上字段的都是数组(当然、我不确定哈~~~好想是这样的、LZ自己试一下! 我也试一下) 我也只记得个大概、希望大侠们给说说、!其实呢!LZ最好还是买一本Hibernate的书好好啃啃!!!
感觉有点头大,我的写法是这样的public class UserAction extends ActionSupport{
HttpServletRequest request = ServletActionContext.getRequest(); private static SessionFactory sf; public static void beforeClass() { sf = new AnnotationConfiguration().configure().buildSessionFactory(); } public static void afterClass() { sf.close(); }
public String getUserList(){ Session s = sf.getCurrentSession(); s.beginTransaction(); List list = s.createSQLQuery("select * from user_register").list() ; request.setAttribute("register",list); s.getTransaction().commit(); return "getList"; }
*将会给你自动生成)。
*/
Session sess = HibernateSessionFactory.getSession();
User u = new User();
u.setName("张三");
u.setAge("18");
.....给属性赋值
sess.save(u); //添加
sess.update(u); //在保存的时候、一定要给User的Id属性赋值更新跟添加的区别就在Id(主键)属性
sess.detele(u); //删除的时候、也要Id属性。 //sess.get()方法返回一个Object对象
User user = sess.get(User.class,u.getId); //根据编号获取一条记录(User.class要查询的类)。
//其中User类名开头字母要大写(就是跟你的javaBean名称一样)——查询全部记录
Query query = sess.CreateQuery("你的hql语句如:from User");
List list = query.list(); //query.list()返回一个list集合
//如果有参数
//String hql = "from User where name = :name ";
//Query query = sess.CreateQuery(hql);
//query.setString("name","张三"); //还有很多中设值参数的方法、自己下去google一下。
//List list = query.list();
值得注意的是当你只要查询某张表中的某几个字段的时候、Hibernate会根据你要查询的字段的个数给你返回不同的类型(虽然qeury.list方法返回的都是list但是list中存储的类型不同)
如: String hql ="select u.name,u.age from User u";
List list = query.list();
//当你用对象去接收list集合中的值的时候...嘿嘿!!!
for(int i = 0 ; i <list.size(); i++){
User u = list.get(i); //这句会出错,因为你list集合中存储的是数组不是对象
} 那么什么时候是对象、什么时候是数组呢!
好像、只查询一个字段的时候、返回的是Object、查询俩个、或者两个以上字段的都是数组(当然、我不确定哈~~~好想是这样的、LZ自己试一下! 我也试一下)
我也只记得个大概、希望大侠们给说说、!其实呢!LZ最好还是买一本Hibernate的书好好啃啃!!!
query.createSqlQuery(); 用这个方法就行了!!!
HttpServletRequest request = ServletActionContext.getRequest(); private static SessionFactory sf; public static void beforeClass() {
sf = new AnnotationConfiguration().configure().buildSessionFactory();
} public static void afterClass() {
sf.close();
}
public String getUserList(){
Session s = sf.getCurrentSession();
s.beginTransaction();
List list = s.createSQLQuery("select * from user_register").list() ;
request.setAttribute("register",list);
s.getTransaction().commit();
return "getList";
}
}
然后在JSP页面,利用EL表达式,遍历一下就可以了吧 <c:forEach var="register" items="${register}">
<tr>
<td>${register.id}</td>
<td>${register.username}</td>
<td>${register.email}</td>
<td>${register.phone}</td>
<td>${register.home}</td>
<td><a href="${pageContext.request.contextPath}/user/register!delUser?user.id=${register.id}">删除</a></td>
<td><a href="${pageContext.request.contextPath}/user/register!updateUser?user.id=${register.id}">修改</a></td>
</tr>
</c:forEach>这样不就显示了吗??但想的很简单,做起来才知道可能是错的,最少现在是在new Session()的时候报空指针,我明明new了工厂了呀,怎么会是空指针呢!!!