首先用Eclipse开发Hibernate,并确保能正常操作数据库
其次发布为WebService,步骤请参考Eclipse axis开发WebService
数据库设计:
movie_info
news_info
picture_info
其中news_id是外键
WebService工程目录(java project),包括引用的jar
源码
<span style="font-size:14px;">package com.hv2.dbutils;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
import org.hibernate.cfg.Configuration;
import com.hv2.entity.MovieInfo;
import com.hv2.entity.NewsInfo;
import com.hv2.entity.PictureInfo;
public class LinkMySQLUtils {
public Session createHibernateSession(){
Session session = null;
try{
Configuration configuration = new Configuration().configure("/hiv2.cfg.xml");//这个一定要写上!!!
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
StandardServiceRegistryImpl registry = (StandardServiceRegistryImpl) builder.build();
SessionFactory factory = configuration.buildSessionFactory(registry);
session = factory.openSession();
session.beginTransaction();
System.out.println("连接数据库成功");
}catch(Exception e){
System.err.println("连接数据库失败");
}
return session;
}
/*
* @doc 将session缓存清除,并关闭session,断开数据库连接
* @param session是Session的对象实例
* */
public void flushAndClose(Session session){
if(session == null){
System.out.println("数据库关闭错误");
return;
}
try{
session.getTransaction().commit();
session.flush();
session.close();
System.out.println("成功断开数据库连接");
}catch(Exception e){
System.err.println("数据库关闭错误");
System.err.println(e.getMessage());
}
}
/*
* @doc 根据数据表中的id查询相关信息
* @param className 数据表对应的实体类名字
* @return 返回查询结果集,如果没有查找到,则返回null
* */
public List getTableInfo(Session session, String className){
List result = null;
result = (List) session.createQuery("from " + className).list();//查询的是实体类的名字
return result;
}
/*public static void main(String[] argvs){
LinkMySQLUtils mysql = new LinkMySQLUtils();
Session session = mysql.createHibernateSession();
List<MovieInfo> movielist = mysql.getTableInfo(session, "MovieInfo");
System.out.println(movielist.get(0).getMovieName()+":"+movielist.get(0).getUpdatetime());
List<NewsInfo> Newslist = mysql.getTableInfo(session, "NewsInfo");
System.out.println(Newslist.get(0).getNewsTitle()+":"+Newslist.get(0).getUpdatetime());
List<PictureInfo> Picturelist = mysql.getTableInfo(session, "PictureInfo");
System.out.println(Picturelist.get(0).getPicName()+":"+Picturelist.get(0).getPicPath()+":"+Picturelist.get(0).getNewsInfo().getNewsId());
mysql.flushAndClose(session);
}*/
}
package com.hv2.dbutils;
import java.sql.Timestamp;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.hv2.entity.MovieInfo;
public class MovieResource extends UpdateResourceCtrl {
private LinkMySQLUtils mysql = new LinkMySQLUtils();
@Override
public List getAllResource() {
// TODO Auto-generated method stub
return null;
}
@Override
public List getUpdateResource(String lastUpdateTime) {
// TODO Auto-generated method stub
List<MovieInfo> movieList = null;
String hql = "from MovieInfo where updatetime != null and updatetime >=:time";
Timestamp time = Timestamp.valueOf(lastUpdateTime);
System.out.println(time);
Session session = mysql.createHibernateSession();
Query query = session.createQuery(hql);
query.setTimestamp("time", time);
movieList = query.list();//查询的是实体类的名字
mysql.flushAndClose(session);
return movieList;
}
@Override
public List getOutdateResource() {
// TODO Auto-generated method stub
return null;
}
}
package com.hv2.dbutils;
import java.sql.Timestamp;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import com.hv2.entity.MovieInfo;
import com.hv2.entity.NewsInfo;
import com.hv2.entity.PictureInfo;
/*
* @doc 专门处理新闻信息的类
* */
public class NewsResource extends UpdateResourceCtrl {
private LinkMySQLUtils mysql = new LinkMySQLUtils();
@Override
public List<NewsInfo> getAllResource() {
// TODO Auto-generated method stub
String hql = "from NewsInfo";//hibernate格式的sql语句
Session session = mysql.createHibernateSession();
List<NewsInfo> newsList = null;
newsList = session.createQuery(hql).list();//查询的是实体类的名字
//以上能够得到news的主体信息,在PictureResource类中能得到一个news中包含的picture信息
mysql.flushAndClose(session);
return newsList;
}
/*
* @param 传入上次更新的时间,在表中查找上次更新后,插入表中的资源
* */
@Override
public List getUpdateResource(String lastUpdateTime) {
// TODO Auto-generated method stub
List<NewsInfo> newsList = null;
String hql = "from NewsInfo where updatetime != null and updatetime >=:time";
Timestamp time = Timestamp.valueOf(lastUpdateTime);
System.out.println(time);
Session session = mysql.createHibernateSession();
Query query = session.createQuery(hql);
query.setTimestamp("time", time);
newsList = query.list();//查询的是实体类的名字
mysql.flushAndClose(session);
return newsList;
}
@Override
public List getOutdateResource() {
// TODO Auto-generated method stub
return null;
}
/*public static void main(String[] argvs){
NewsResource nr = new NewsResource();
List<NewsInfo> list = nr.getUpdateResource("2000-01-01 00:00:00");
for(int i=0; i<list.size(); i++)
System.out.println(list.get(i).getNewsTitle());
}*/
}
package com.hv2.dbutils;
import com.hv2.entity.MovieInfo;
import com.hv2.entity.NewsInfo;
import com.hv2.entity.PictureInfo;
/*
* @doc 该类是各种资源的集合,用于返回给用户
* */
public class ResourceList {
private MovieInfo movies[];
private NewsInfo news[];
private PictureInfo pics[];
public MovieInfo[] getMovies() {
return movies;
}
public void setMovies(MovieInfo[] movies) {
this.movies = movies;
}
public NewsInfo[] getNews() {
return news;
}
public void setNews(NewsInfo[] news) {
this.news = news;
}
public PictureInfo[] getPics() {
return pics;
}
public void setPics(PictureInfo[] pics) {
this.pics = pics;
}
}
package com.hv2.dbutils;
import java.util.List;
import com.hv2.entity.MovieInfo;
import com.hv2.entity.NewsInfo;
public class ResourceListHandler {
private ResourceList rl = new ResourceList();
/*
* @param type代表资源类型,news:新闻,movie:电影,picture:新闻的图片,all:全部的资源
* @param time是上次更新的时间
* */
public void setResourceList(String type, String time){
if(type.equals("movie")){
setMovieList(time);
}
if(type.equals("news")){
setNewsList(time);
}
if(type.equals("all")){
setMovieList(time);
setNewsList(time);
}
}
private void setMovieList(String time){
MovieResource mr = new MovieResource();
List<MovieInfo> list = mr.getUpdateResource(time);
if(list == null)
return ;
int size = list.size();
MovieInfo[] movies = new MovieInfo[size];
for(int i=0; i<size; i++){
movies[i] = list.get(i);
}
rl.setMovies(movies);
}
private void setNewsList(String time){
NewsResource nr = new NewsResource();
List<NewsInfo> list = nr.getUpdateResource(time);
if(list == null)
return;
int size = list.size();
NewsInfo[] news = new NewsInfo[size];
for(int i=0; i<size; i++){
news[i] = list.get(i);
}
rl.setNews(news);
}
public ResourceList getResourceList(){
return this.rl;
}
}
package com.hv2.dbutils;
import java.util.List;
/*
*@doc 负责处理数据库事务的基类,是新闻/电影等资源的父类
* 所有与数据库交互的工作,都在此类中进行
**/
public abstract class UpdateResourceCtrl {
/*
* @doc 获取新闻/电影的所有信息
* */
public abstract List getAllResource();
/*
* @doc 获取需要更新的新闻/电影信息
* */
public abstract List getUpdateResource(String lastUpdateTime);
/*
* @doc 获取已经过时的新闻/电影信息
* */
public abstract List getOutdateResource();
}
package com.hv2.entity;
// default package
// Generated 2014-7-25 20:25:20 by Hibernate Tools 3.4.0.CR1
import java.util.Date;
/**
* MovieInfo generated by hbm2java
*/
public class MovieInfo implements java.io.Serializable {
private String movieId;
private String movieName;
private String moviePath;
private Date updatetime;
public MovieInfo() {
}
public MovieInfo(String movieId, String movieName, String moviePath,
Date updatetime) {
this.movieId = movieId;
this.movieName = movieName;
this.moviePath = moviePath;
this.updatetime = updatetime;
}
public String getMovieId() {
return this.movieId;
}
public void setMovieId(String movieId) {
this.movieId = movieId;
}
public String getMovieName() {
return this.movieName;
}
public void setMovieName(String movieName) {
this.movieName = movieName;
}
public String getMoviePath() {
return this.moviePath;
}
public void setMoviePath(String moviePath) {
this.moviePath = moviePath;
}
public Date getUpdatetime() {
return this.updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
}
package com.hv2.entity;
// default package
// Generated 2014-7-25 20:25:20 by Hibernate Tools 3.4.0.CR1
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
/**
* NewsInfo generated by hbm2java
*/
public class NewsInfo implements java.io.Serializable {
private String newsId;
private String newsTitle;
private Date updatetime;
//private Set<PictureInfo> pictureInfos = new HashSet<PictureInfo>(0);//该句一定注释掉,axis2不支持HashSet!!!!!!!!!!!!!!!!!!!!!!!!!!!
public NewsInfo() {
}
public NewsInfo(String newsId, String newsTitle, Date updatetime) {
this.newsId = newsId;
this.newsTitle = newsTitle;
this.updatetime = updatetime;
}
/*public NewsInfo(String newsId, String newsTitle, Date updatetime,
Set<PictureInfo> pictureInfos) {
this.newsId = newsId;
this.newsTitle = newsTitle;
this.updatetime = updatetime;
this.pictureInfos = pictureInfos;
}*/
public String getNewsId() {
return this.newsId;
}
public void setNewsId(String newsId) {
this.newsId = newsId;
}
public String getNewsTitle() {
return this.newsTitle;
}
public void setNewsTitle(String newsTitle) {
this.newsTitle = newsTitle;
}
public Date getUpdatetime() {
return this.updatetime;
}
public void setUpdatetime(Date updatetime) {
this.updatetime = updatetime;
}
/*public Set<PictureInfo> getPictureInfos() {
return this.pictureInfos;
}
public void setPictureInfos(Set<PictureInfo> pictureInfos) {
this.pictureInfos = pictureInfos;
}*/
}
package com.hv2.entity;
// default package
// Generated 2014-7-25 20:25:20 by Hibernate Tools 3.4.0.CR1
/**
* PictureInfo generated by hbm2java
* @author yzz
* @doc 该类(表)是NewsInfo的从属表
*/
public class PictureInfo implements java.io.Serializable {
private String picId;
private NewsInfo newsInfo;
private String picName;
private String picPath;
public PictureInfo() {
}
public PictureInfo(String picId, NewsInfo newsInfo, String picName,
String picPath) {
this.picId = picId;
this.newsInfo = newsInfo;
this.picName = picName;
this.picPath = picPath;
}
public String getPicId() {
return this.picId;
}
public void setPicId(String picId) {
this.picId = picId;
}
public NewsInfo getNewsInfo() {
return this.newsInfo;
}
public void setNewsInfo(NewsInfo newsInfo) {
this.newsInfo = newsInfo;
}
public String getPicName() {
return this.picName;
}
public void setPicName(String picName) {
this.picName = picName;
}
public String getPicPath() {
return this.picPath;
}
public void setPicPath(String picPath) {
this.picPath = picPath;
}
}
package com.hv2.service;
import java.util.List;
import com.hv2.dbutils.ResourceList;
import com.hv2.dbutils.ResourceListHandler;
public class ServiceImpl {
/*
* @param type代表资源类型,news:新闻,movie:电影,picture:新闻的图片,all:全部的资源
* @param time是上次更新的时间
* */
public ResourceList getUpdateResource(String type, String time){
ResourceList rl = null;
ResourceListHandler rlh = new ResourceListHandler();
rlh.setResourceList(type, time);
rl = rlh.getResourceList();
return rl;
}
public String getTest(String test){
return "test:" + test;
}
/* public static void main(String[] argvs){
ServiceImpl si = new ServiceImpl();
ResourceList movies = si.getUpdateResource("all", "2014-07-25 00:00:00");
if((movies.getMovies() != null))
System.out.println(movies.getMovies().length);
if((movies.getNews() != null))
System.out.println(movies.getNews().length);
}*/
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-7-25 20:26:00 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hv2.entity.MovieInfo" table="MOVIE_INFO">
<id name="movieId" type="java.lang.String">
<column name="MOVIE_ID" />
<generator class="assigned" />
</id>
<property name="movieName" type="java.lang.String">
<column name="MOVIE_NAME" />
</property>
<property name="moviePath" type="java.lang.String">
<column name="MOVIE_PATH" />
</property>
<property name="updatetime" type="java.util.Date">
<column name="UPDATETIME" />
</property>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-7-25 20:26:00 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hv2.entity.NewsInfo" table="NEWS_INFO">
<id name="newsId" type="java.lang.String">
<column name="NEWS_ID" />
<generator class="assigned" />
</id>
<property name="newsTitle" type="java.lang.String">
<column name="NEWS_TITLE" />
</property>
<property name="updatetime" type="java.util.Date">
<column name="UPDATETIME" />
</property>
<!--
<set name="pictureInfos" table="PICTURE_INFO" inverse="false" lazy="false">
<key>
<column name="NEWS_ID" />
</key>
<one-to-many class="com.hv2.entity.PictureInfo" />
</set>
-->
</class>
</hibernate-mapping>
PictureInfo.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-7-25 20:26:00 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.hv2.entity.PictureInfo" table="PICTURE_INFO">
<id name="picId" type="java.lang.String">
<column name="PIC_ID" />
<generator class="assigned" />
</id>
<many-to-one name="newsInfo" class="com.hv2.entity.NewsInfo" fetch="join" lazy="false">
<column name="NEWS_ID" />
</many-to-one>
<property name="picName" type="java.lang.String">
<column name="PIC_NAME" />
</property>
<property name="picPath" type="java.lang.String">
<column name="PIC_PATH" />
</property>
</class>
</hibernate-mapping>
客户端目录