首页 > 数据库 >用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3

用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3

时间:2023-01-15 10:38:38浏览次数:71  
标签:-- MySQL5.6 User import waylau com public Jersey user


一、总体说明

本例运行演示了用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;

用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3_hibernate

ps:   userId 非自增长类型,需要在业务添加

四、引入Hibernate

1.解压Hibernate的包,在lib\required文件夹下所有jar引入进项目

用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3_MySQL_02

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>

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<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客户端,可以看到数据库已经实现增删改查

完整项目架构如下:

用Jersey构建RESTful服务5--Jersey+MySQL5.6+Hibernate4.3_数据库_03



=====================完整项目代码已经上传===================

​https://github.com/waylau/Restdemo​


标签:--,MySQL5.6,User,import,waylau,com,public,Jersey,user
From: https://blog.51cto.com/u_9427273/6008278

相关文章

  • Flex项目release后图片资源不见了–图片资源采用嵌入与不嵌入的区别
    ​近期项目发现,在使用release发布项目包,图片找不到了,而debug下面又有图片。后来发现,原来图片被另外一个组件嵌入了。下面例子展示了组件嵌入和不嵌入图片的区别<?xmlversi......
  • Flex4 Label文本换行
    图标中的文本如果太长就显示不全了。查API,Label继承了TextBase,而 TextBase有maxDisplayedLines属性,表述如下: 确定是否截断文本以及在何处截断文本的整数。 截断文本......
  • golang实现的一个小游戏–猜数字
    随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了,代码如下:packagemainimport("bufio""fmt""math/rand""os""strconv""time")var......
  • flex 4.6 自定义Datagrid添加checkbox\图片等功能
    flex4.6中的 spark 的Datagrid相比于之前的mx有很大不同实现自定义<s:itemRenderer>详见代码~<s:DataGridid="dg"left="14"right="10"top="35"bottom="9"d......
  • Flex4分模块下样式动态加载步骤及相关问题的解决
    1.     给应用程序编写CSS文件(1)         在项目下创建CSS文件(任意路径,可以多个)。本例在src下创建了5个样式文件(2)         Flex支持的CSS文件定义......
  • 关于Flex Cairngorm中command层与View层的通信及耦合度高的问题的解决
    在Cairngorm框架中,view层发送自定义事件,command层再根据事件做相应的处理,View层中的数据通过绑定ModelLocator中的属性实现自动更新。现有的问题是,有时除了更新数据意外,用户......
  • “笔记本无线网络搜索不到自家信号,却能搜到其他公司的信号”解决方法
    “笔记本无线网络搜索不到自家信号,却能搜到其他公司的信号”解决方法症状:自己的笔记本无线网络搜索不到自家信号,却能搜到其他公司的信号,并能连上网;其他台式机却能通过无......
  • Web安全入门与靶场实战(6)- 利用nmap进行主机发现
    下载靶机接下来我们将结合具体的靶机,通过实战来了解shentou测试的每个环节,并对其中所涉及的知识点进行详细介绍。课程中所使用的靶机主要来自VulnHub,这是一个全球知名的开源......
  • Flash游戏开发性能优化
    (1)数据存储方式的选择使用如下几种存取数据方式进行存取100万次运算,所花时间依次为(单位为毫秒,ms):如下几种存取数据方式100万次存取运算效率依次为:类定义中的属性(如publi......
  • 强化反复
    概述强化反复是一种随机化思想。具体来讲,有时题目中的限制过于复杂,无法处理或处理的复杂度不可接受。此时可以考虑通过随机化地加强限制获得一个较可做的条件,然后......