http://blog.csdn.net/kkkloveyou/article/details/21888283
一、总体说明
本例运行演示了用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,内容如下:
- <?xml version='1.0' encoding='utf-8'?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <!-- Database connection settings -->
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <property name="connection.url">jdbc:mysql://127.0.0.1:3306/RestDemo</property>
- <property name="connection.username">root</property>
- <property name="connection.password"></property>
- <!-- JDBC connection pool (use the built-in) -->
- <property name="connection.pool_size">1</property>
- <!-- SQL dialect -->
- <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- Enable Hibernate's automatic session context management -->
- <property name="current_session_context_class">thread</property>
- <!-- Disable the second-level cache -->
- <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
- <!-- Echo all executed SQL to stdout -->
- <property name="show_sql">true</property>
- <!-- Drop and re-create the database schema on startup -->
- <property name="hbm2ddl.auto">update</property>
- <mapping resource="com/waylau/rest/bean/User.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
4.在项目User.java 的同个目录下,创建该类的映射文件User.hbm.xml
- <?xml version="1.0"?>
- <!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.waylau.rest.bean">
- <class name="User" table="T_USER">
- <id name="userId" column="USERID" type="string" >
- <generator class="assigned"/>
- </id>
- <property name="userName" type="string" />
- <property name="age" type="string" />
- </class>
- </hibernate-mapping>
- 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<User> 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<User> getAllUsers() {
- SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
- Session s = null;
- Transaction t = null;
- List<User> 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<User> getAllUsers(){
- List<User> users = new ArrayList<User>();
- users = userDaoImpl.getAllUsers();
- return users;
- }
- }
五、运行
1.将服务端运行后
2.运行UserClient客户端,可以看到数据库已经实现增删改查
完整项目架构如下:
=====================完整项目代码已经上传===================
https://github.com/waylau/Restdemo