我用了action->service->dao->javabean来实现一个简单新闻分类,用的是mysql数据库;
类型表是type,有两个属性:id和typeName;
新闻表是news,有id,typeId(对应type表中的id字段),title,content字段;
现在我实现了单独对type和news的增删改查,部分代码如下:javabean层:
public class Type {
private int id;
private String typeName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
}public class News {
private int id;
private int typeId;
private String title;
private String content;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}

public int getTypeId() {
return typeId;
}
public void setTypeId(int typeId) {
this.typeId = typeId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
DAO层:public class TypeDAOImpl extends HibernateDaoSupport implements TypeDAO{ @SuppressWarnings("unchecked")
@Override
public List<Type> findAllType() {
String hql="from Type type order by type.id desc";
return (List<Type>)this.getHibernateTemplate().find(hql);
} @Override
public Type findTypeById(int id) {
Type type=(Type)this.getHibernateTemplate().get(Type.class, id);
return type;
} @Override
public void removeType(Type type) {
this.getHibernateTemplate().delete(type);

} @Override
public void saveType(Type type) {
this.getHibernateTemplate().save(type);

} @Override
public void updateType(Type type) {
this.getHibernateTemplate().update(type);

}}public class NewsDAOImpl extends HibernateDaoSupport implements NewsDAO{ @SuppressWarnings("unchecked")
@Override
public List<News> findAllNews() {
String hql="from News news order by news.id desc";
return (List<News>)this.getHibernateTemplate().find(hql);
} @Override
public News findNewsById(int id) {
News news=(News)this.getHibernateTemplate().get(News.class, id);
return news;
} @Override
public void removeNews(News news) {
this.getHibernateTemplate().delete(news);

} @Override
public void saveNews(News news) {
this.getHibernateTemplate().save(news);

} @Override
public void updateNews(News news) {
this.getHibernateTemplate().update(news);

}}service层:public class TypeServiceImpl implements TypeService{

private TypeDAO typeDAO;
public TypeDAO getTypeDAO() {
return typeDAO;
} public void setTypeDAO(TypeDAO typeDAO) {
this.typeDAO = typeDAO;
} @Override
public void delete(Type type) {
this.typeDAO.removeType(type);

} @Override
public List<Type> findAll() {

return this.typeDAO.findAllType();
} @Override
public Type findById(int id) {
return this.typeDAO.findTypeById(id);
} @Override
public void save(Type type) {
this.typeDAO.saveType(type);

} @Override
public void update(Type type) {
this.typeDAO.updateType(type);

}}public class NewsServiceImpl implements NewsService{

private NewsDAO newsDAO;
public NewsDAO getNewsDAO() {
return newsDAO;
} public void setNewsDAO(NewsDAO newsDAO) {
this.newsDAO = newsDAO;
} @Override
public void delete(News news) {
this.newsDAO.removeNews(news);

} @Override
public List<News> findAll() {

return this.newsDAO.findAllNews();
} @Override
public News findById(int id) {

return this.newsDAO.findNewsById(id);
} @Override
public void save(News news) {
this.newsDAO.saveNews(news);

} @Override
public void update(News news) {
this.newsDAO.updateNews(news);

}}hbm.xml配置如下:type.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
<class name="com.test.bean.Type" table="type">
<id name="id" type="int" column="id">
<generator class="increment"></generator>
</id> <property name="typeName" type="string" column="typeName"
length="50">
</property>
</class>
</hibernate-mapping>news.hbm.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.test.bean.News" table="news">
<id name="id" type="int" column="id">
<generator class="increment"></generator>
</id> <property name="typeId" type="int" column="typeId">
</property>
<property name="title" type="string" column="title">
</property>
<property name="content" type="string" column="content">
</property>
</class>
</hibernate-mapping>
我想法是在News javabean类中增加个字段private Type type;这样是不是就能把这两者关联起来了,那配置文件要怎么修改,dao层的类哪里需要改下,请指教个思路 

解决方案 »

  1.   

    以前我用的都是直接在news bean里面引用了type这个类对象,然后在news.hbm.xml文件中配一下<many-to-one name="type" class="Type" lasy="fase"/>这样就可以直接用type这个类对象了。。
      

  2.   

    我按楼上的说法,把news中原先的private int  typeId去掉,改为了private Type type属性,在我得增加新闻页面中
    我改为了<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>Save news</title>
    </head>
    <body>
    <center>
    <h1>
    <font color="red">增加信息</font>
    </h1>
    <s:form action="saveNews">
        <s:textfield name="news.type" label="类别">
    </s:textfield>//我这样写提交时出现了Invalid field value for field "news.type" 
    错误,请问是什么原因
    <s:textfield name="news.title" label="标题"></s:textfield>
    <s:textfield name="news.content" label="内容"></s:textfield>

    <s:submit></s:submit>
    </s:form>
    </center>
    </body>
    </html>
      

  3.   

    没人知道原因吗,是不是因为对象.对象的形式不行(news.type),只有对象.属性(news.title)的才行