5–Jersey+MySQL5.6+Hibernate4.3

最后更新于:2022-04-01 20:01:31

## 一、总体说明 本例运行演示了用Jersey构建RESTful服务中,如何同过Hibernate将数据持久化进MySQL的过程 ## 二、环境 1.上文的项目RestDemo 2.MySQL5.6下载[http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.16-win32.zip](http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.4.Final/hibernate-release-4.3.4.Final.zip) 3.Hibernate4.3.4下载[http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.4.Final/hibernate-release-4.3.4.Final.zip](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](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; ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-24_56cd25fd5e5c0.png) ps:   userId 非自增长类型,需要在业务添加 ## 四、引入Hibernate 1.解压Hibernate的包,在lib\required文件夹下所有jar引入进项目 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-24_56cd25fd7da61.png) 2.解压mysql-connector-java-5.1.29.zip,将mysql-connector-java-5.1.29-bin.jar引入进项目 3.在项目的根目录创建hibernate的配置文件hibernate.cfg.xml,内容如下: ~~~ com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/RestDemo root 1 org.hibernate.dialect.MySQLDialect thread org.hibernate.cache.internal.NoCacheProvider true update ~~~ 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客户端,可以看到数据库已经实现增删改查 完整项目架构如下: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-02-24_56cd25fd9a14e.png) ================完整项目代码已经上传====== https://github.com/waylau/Restdemo
';