用jersey构建restful服务5--jersey+mysql5.6+hibernate4.3 一、总体说明 本例运行演示了用jersey构建restful服务中,如何同过hibernate将数据持久化进mysql的过程 二、环境 1.上文的项目restdemo 2.mysql5.6下载http://dev.mysql.com/get/downloads/mysql-5.6
用jersey构建restful服务5--jersey+mysql5.6+hibernate4.3
一、总体说明
本例运行演示了用jersey构建restful服务中,如何同过hibernate将数据持久化进mysql的过程
二、环境
1.上文的项目restdemo
2.mysql5.6下载http://dev.mysql.com/get/downloads/mysql-5.6/mysql-5.6.16-win32.zip
3.hibernate4.3.4下载http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.4.final/hibernate-release-4.3.4.final.zip
4.java程序连接mysql的驱动mysql-connector-java-5.1.29-bin.jar下载
http://dev.mysql.com/get/downloads/connector-j/mysql-connector-java-5.1.29.zip
三、数据库准备
1.搭建mysql数据库
2.创建数据库restdemo ,及数据表t_user,结构如下
drop table if exists `t_user`;
create table `t_user` (
`userid` varchar(50) not null,
`username` varchar(50) not null,
`age` varchar(50) not null,
primary key (`userid`)
) engine=innodb default charset=utf8;
ps: userid 非自增长类型,需要在业务添加
四、引入hibernate
1.解压hibernate的包,在lib\required文件夹下所有jar引入进项目
2.解压mysql-connector-java-5.1.29.zip,将mysql-connector-java-5.1.29-bin.jar引入进项目
3.在项目的根目录创建hibernate的配置文件hibernate.cfg.xml,内容如下:
com.mysql.jdbc.driverjdbc:mysql://127.0.0.1:3306/restdemoroot1org.hibernate.dialect.mysqldialectthreadorg.hibernate.cache.internal.nocacheprovidertrueupdate
4.在项目user.java 的同个目录下,创建该类的映射文件user.hbm.xml
5.创建包com.waylau.rest.util,在该包下创建hibernateutil.java
package com.waylau.rest.util;import org.hibernate.sessionfactory;import org.hibernate.boot.registry.standardserviceregistry;import org.hibernate.boot.registry.standardserviceregistrybuilder;import org.hibernate.cfg.configuration;/** * hibernate 初始化配置工具类 * @author waylau.com * 2014-3-23 */public class hibernateutil { private static configuration configuration; private static sessionfactory sessionfactory; private static standardserviceregistry standardserviceregistry; static { try { //第一步:读取hibernate的配置文件 hibernamte.cfg.xml文件 configuration = new configuration().configure(hibernate.cfg.xml); //第二步:创建服务注册构建器对象,通过配置对象中加载所有的配置信息 standardserviceregistrybuilder sb = new standardserviceregistrybuilder(); sb.applysettings(configuration.getproperties()); //创建注册服务 standardserviceregistry = sb.build(); //第三步:创建会话工厂 sessionfactory = configuration.buildsessionfactory(standardserviceregistry); } catch (throwable ex) { // make sure you log the exception, as it might be swallowed system.err.println(initial sessionfactory creation failed. + ex); throw new exceptionininitializererror(ex); } } public static sessionfactory getsessionfactory() { return sessionfactory; }}
6.在项目中建com.waylau.rest.dao包,在该包下建立user操作的接口userdao.java
package com.waylau.rest.dao;import java.util.list;import com.waylau.rest.bean.user; /** * user dao 接口 * @author waylau.com * 2014-3-18 */public interface userdao { public user getuserbyid(string id); public boolean deleteuserbyid(string id); public boolean createuser(user user); public boolean updateuser(user user); public list getallusers();}
7.在项目中建com.waylau.rest.dao.impl包,在该包下建立user操作接口的实现userdaoimpl.java
package com.waylau.rest.dao.impl;import java.util.list;import org.hibernate.query;import org.hibernate.session;import org.hibernate.sessionfactory;import org.hibernate.transaction;import com.waylau.rest.bean.user;import com.waylau.rest.dao.userdao;import com.waylau.rest.util.hibernateutil;/** * 用户dao实现 * @author waylau.com * 2014-3-23 */public class userdaoimpl implements userdao { @override public user getuserbyid(string id) { sessionfactory sessionfactory = hibernateutil.getsessionfactory(); session s = null; transaction t = null; user user = null; try{ s = sessionfactory.opensession(); t = s.begintransaction(); string hql = from user where userid=+id; query query = s.createquery(hql); user = (user) query.uniqueresult(); t.commit(); }catch(exception err){ t.rollback(); err.printstacktrace(); }finally{ s.close(); } return user; } @override public boolean deleteuserbyid(string id) { sessionfactory sessionfactory = hibernateutil.getsessionfactory(); session s = null; transaction t = null; boolean flag = false; try{ s = sessionfactory.opensession(); t = s.begintransaction(); user user = new user(); user.setuserid(id); s.delete(user); t.commit(); flag = true; }catch(exception err){ t.rollback(); err.printstacktrace(); }finally{ s.close(); } return flag; } @override public boolean createuser(user user) { sessionfactory sessionfactory = hibernateutil.getsessionfactory(); session s = null; transaction t = null; boolean flag = false; try{ s = sessionfactory.opensession(); t = s.begintransaction(); s.save(user); t.commit(); flag = true; }catch(exception err){ t.rollback(); err.printstacktrace(); }finally{ s.close(); } return flag; } @override public boolean updateuser(user user) { sessionfactory sessionfactory = hibernateutil.getsessionfactory(); session s = null; transaction t = null; boolean flag = false; try{ s = sessionfactory.opensession(); t = s.begintransaction(); s.update(user); t.commit(); flag = true; }catch(exception err){ t.rollback(); err.printstacktrace(); }finally{ s.close(); } return flag; } @override public list getallusers() { sessionfactory sessionfactory = hibernateutil.getsessionfactory(); session s = null; transaction t = null; list uesrs = null; try{ s = sessionfactory.opensession(); t = s.begintransaction(); string hql = select * from t_user; query query = s.createsqlquery(hql).addentity(user.class); query.setcacheable(true); // 设置缓存 uesrs = query.list(); t.commit(); }catch(exception err){ t.rollback(); err.printstacktrace(); }finally{ s.close(); } return uesrs; }}
8.修改项目中 com.waylau.rest.resources包下的userresource.java,使之前在内存中模拟curd转为在数据库中实现
package com.waylau.rest.resources;import java.util.arraylist;import java.util.list;import javax.ws.rs.path;import javax.ws.rs.produces;import javax.ws.rs.consumes;import javax.ws.rs.pathparam;import javax.ws.rs.core.mediatype;import javax.ws.rs.delete;import javax.ws.rs.get;import javax.ws.rs.post;import javax.ws.rs.put;import com.waylau.rest.bean.user;import com.waylau.rest.dao.impl.userdaoimpl;/** * 用户资源 * @author waylau.com * 2014-3-19 */@path(/users)public class userresource { private userdaoimpl userdaoimpl = new userdaoimpl(); /** * 增加 * @param user */ @post @consumes({mediatype.application_xml, mediatype.application_json}) public void createuser(user user) { userdaoimpl.createuser(user); } /** * 删除 * @param id */ @delete @path({id}) public void deleteuser(@pathparam(id)string id){ userdaoimpl.deleteuserbyid(id); } /** * 修改 * @param user */ @put @consumes(mediatype.application_xml) public void updateuser(user user){ userdaoimpl.updateuser(user); } /** * 根据id查询 * @param id * @return */ @get @path({id}) @produces({mediatype.application_xml, mediatype.application_json}) public user getuserbyid(@pathparam(id) string id){ user u = userdaoimpl.getuserbyid(id); return u; } /** * 查询所有 * @return */ @get @produces({mediatype.application_xml, mediatype.application_json}) public list getallusers(){ list users = new arraylist(); users = userdaoimpl.getallusers(); return users; } }
五、运行
1.将服务端运行后
2.运行userclient客户端,可以看到数据库已经实现增删改查
完整项目架构如下: