给你个以前工作的例子。。
这个是BEAN
package cn.ccnp.area
import java.io.Serializable
public class Area implements Serializable {
/**
* 区域ID
*/
private String areaId
/**
* 区域名称
*/
private String areaName
/**
* 所属区县
*/
private String areaFatherId
/**
* 所属省市
*/
private String areaGrandfatherId
/**
* 区域ID getter,setter method
*/
public String getAreaId( ){
return areaId
}
public void setAreaId( String areaId ){
this.areaId = areaId
}
/**
* 区域名称 getter,setter method
*/
public String getAreaName( ){
return areaName
}
public void setAreaName( String areaName ){
this.areaName = areaName
}
/**
* 所属区县 getter,setter method
*/
public String getAreaFatherId( ){
return areaFatherId
}
public void setAreaFatherId( String areaFatherId ){
this.areaFatherId = areaFatherId
}
/**
* 所属省市 getter,setter method
*/
public String getAreaGrandfatherId( ){
return areaGrandfatherId
}
public void setAreaGrandfatherId( String areaGrandfatherId ){
this.areaGrandfatherId = areaGrandfatherId
}
}
这个是对数据库的 *** 作。懒得挑了。。都粘过来,你自己看吧,有些是公司内部的类,不用都明白哈~~
package cn.ccnp.area
/**
* <p>Title: AreaMgrImpl</p>
* <p>Description: area implement</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: jadosoft</p>
* @author Yangyang
* @version 1.0
*/
import java.sql.ResultSet
import java.sql.SQLException
import java.util.ArrayList
import org.apache.log4j.Logger
import cn.jado.app.log.OperatorLog
import cn.jado.app.log.OperatorLogger
import cn.jado.lib.QuoteReplace
import cn.jado.lib.web.CommonDAO
import cn.jado.lib.web.Page
import cn.jado.lib.web.PageDiv
public class AreaMgrImpl {
/**
* Constructor
*/
public AreaMgrImpl(){
}
/**
* OperatorLog
*/
private OperatorLog log = null
private int rowNum = 0
/**
* OperatorLogSetter
*/
public void setLog(Object o) {
if (o instanceof OperatorLog) {
OperatorLog log = (OperatorLog) o
this.log = log
}
}
/**
* DataSource lookup jndi
*/
private String jndi = "jdbc/ccn"
private String tableName = "area"
/**
* log4j
*/
private static Logger logger= Logger.getLogger(AreaMgrImpl.class.getName())
/**
* 判断是否已经存在相同记录
* @param area 记录的值对象
* @return 是否存在另一记录与该记录相同
*/
public boolean existedArea( Area area ) {
//单引号替换
area = (Area)QuoteReplace.replace(area)
StringBuffer sqlBuf = new StringBuffer(100)
sqlBuf.append(" select count(*) from " + tableName)
/* @toDo: 要保留的行,去掉行前注释符,注:只保留主键(或联合主键的行)做是否存在的判断依据 */
sqlBuf.append(" where area_id = " + area.getAreaId()) //区域ID
//sqlBuf.append(" and area_name = '" + area.getAreaName()+ "'") //区域名称
//sqlBuf.append(" and area_father_id = '" + area.getAreaFatherId()+ "'") //所属区县
//sqlBuf.append(" and area_grandfather_id = '" + area.getAreaGrandfatherId()+ "'") //所属省市
logger.warn("---sql:existedArea---" + sqlBuf)
CommonDAO dao = null
ResultSet rs = null
boolean existed = false
try {
dao = new CommonDAO(jndi)
rs = dao.query(sqlBuf.toString())
if ( rs.next() ){
if (rs.getInt(1) != 0) {
existed = true
}
}
}
catch (Exception e) {
e.printStackTrace()
}
finally {
dao.destroy()
}
return existed
}
/**
* add a new record
* @param area 新增记录的值对象
* @return 是否添加成功
*/
public boolean addArea( Area area ){
//组合sql语句
StringBuffer sqlBuf = new StringBuffer(100)
sqlBuf
.append("insert into "+tableName)
.append("(")
.append("area_id") //区域ID
.append(",area_name") //区域名称
.append(",area_father_id") //所属区县
.append(",area_grandfather_id") //所属省市
.append(")")
.append(" values(")
StringBuffer sqlBufValues = new StringBuffer(100)
sqlBufValues
.append("" + area.getAreaId()) //区域ID
.append(",'" + area.getAreaName() + "'") //区域名称
.append(",'" + area.getAreaFatherId() + "'") //所属区县
.append(",'" + area.getAreaGrandfatherId() + "'") //所属省市
.append(")")
sqlBuf = sqlBuf.append(sqlBufValues)
logger.warn("---sql:addArea---"+sqlBuf)
//更新数据
return this.updateData( sqlBuf.toString(),"addArea" )
}
/**
* edit the specified object
* @param area 修改成的新记录的对象
* @return 修改是否成功
*/
public boolean editArea( Area area){
//组合sql语句
StringBuffer sqlBuf = new StringBuffer(100)
sqlBuf
.append("update "+tableName+" set ")
.append("area_id = " + area.getAreaId()) //区域ID
.append(",area_name = '" + area.getAreaName() + "'") //区域名称
.append(",area_father_id = '" + area.getAreaFatherId() + "'") //所属区县
.append(",area_grandfather_id = '" + area.getAreaGrandfatherId() + "'") //所属省市
.append(" where area_id = ")
.append(area.getAreaId())
logger.warn("---sql:editArea---"+sqlBuf)
//更新数据
return updateData( sqlBuf.toString(),"editArea" )
}
/**
* delete the specified object by id
* @param areaID 记录的ID值
* @return 删除记录是否成功
*/
private boolean delAreaById(String areaID) {
StringBuffer sqlBuf = new StringBuffer(100)
sqlBuf.append(" delete from "+tableName)
sqlBuf.append(" where area_id=")
sqlBuf.append(areaID)
logger.warn("---sql:delAreaById---"+sqlBuf)
boolean result = this.updateData( sqlBuf.toString(), "delAreaById" )
return result
}
/**
* delete the specified objects
* @param areaIDs 多条记录ID组成的数组
* @return boolean 删除多条是否成功
*/
public boolean delAreas(String[] areaIDs) {
if ( areaIDs != null &&areaIDs.length >0 ) {
int size = areaIDs.length
for (int i = 0i <sizei++) {
if ( !this.delAreaById( areaIDs[i]) ) {
return false
}
}
return true
}
return false
}
/**
* get the specified object
* @param areaId 记录的ID值
* @return 与该ID匹配的记录的值对象
*/
public Area getAreaByID( String areaId ){
Area area = null
//组合查询条件
StringBuffer sqlBuf = new StringBuffer()
sqlBuf
.append("select * from "+tableName+" where area_id = ")
.append(areaId)
logger.warn("---sql:getAreaByID---"+sqlBuf)
CommonDAO dao = null
ResultSet rs = null
try{
dao = new CommonDAO(jndi)
rs = dao.query(sqlBuf.toString())
//读取结果集信息
if ( rs.next() ){
area = this.readDataFromRs(rs)
}
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
dao=null
sqlBuf = null
}
return area
}
/**
* get all objects
* @param
* @return 全部记录的列表
*/
public ArrayList getAreaList(){
ArrayList arr = null
//组合查询条件
String sql = "select * from "+tableName+" order by area_id desc"
logger.warn("---sql:getAreaList---"+sql)
CommonDAO dao = null
ResultSet rs = null
try{
dao = new CommonDAO(jndi)
rs = dao.query(sql)
//读取结果集信息
arr = this.readDataListFromRs(rs)
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
dao=null
sql = null
}
return arr
}
/**
* get all objects
* @param area
* @return 满足查询条件的记录的对象组成的列表
*/
public ArrayList getAreaList(Area area ){
ArrayList arr = null
//组合查询条件
StringBuffer sqlBuf = new StringBuffer(50)
sqlBuf.append( "select * from "+tableName)
sqlBuf.append( " where 1=1 ")
/* @todo: 可以在这里加上你自己的查询条件 */
sqlBuf.append( " order by area_id desc")
logger.warn("---sql:getAreaList---"+sqlBuf)
CommonDAO dao = null
ResultSet rs = null
try{
dao = new CommonDAO(jndi)
rs = dao.query(sqlBuf.toString())
//读取结果集信息
arr = this.readDataListFromRs(rs)
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
dao=null
sqlBuf = null
}
return arr
}
/**
* get all objects by search
* 数值、日期等按指定区间查询
* @param areaSearch 查询条件的值对象
* @return 满足条件的记录组成的对象列表
*/
public ArrayList getAreaListBySearch(AreaSearch areaSearch ){
ArrayList arr = null
StringBuffer sqlBuf = new StringBuffer(50)
StringBuffer sqlWhere = this.getSqlwherBySearch(areaSearch)
sqlBuf.append( "select * from " + tableName + " where 1=1 ")
sqlBuf.append(sqlWhere)
sqlBuf.append( " order by area_id desc")
logger.warn("---sql:getAreaListSplit---"+sqlBuf)
CommonDAO dao = null
ResultSet rs = null
try{
dao = new CommonDAO(jndi)
rs = dao.query(sqlBuf.toString())
//读取结果集信息
arr = this.readDataListFromRs(rs)
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
dao=null
sqlBuf = null
}
return arr
}
/**
* 查询结果分页显示
* @param pageBean 页信息的对象
* @return 是否分页查询成功
*/
public boolean getAreaListSplit( Page pageBean ){
ArrayList arr = new ArrayList()
int pageSize = 0
int pageNo = 0
if (pageBean == null) {
return false
}
if (pageBean.getPageSize() <= 0) {
pageBean.setPageSize(50)
}
if (pageBean.getPageNo()<= 0) {
pageBean.setPageNo(1)
}
pageSize = pageBean.getPageSize()
pageNo = pageBean.getPageNo()
StringBuffer sql = new StringBuffer(" select * from "+tableName+" order by area_id desc")
StringBuffer countSql = new StringBuffer("select count(*) from "+tableName)
logger.warn("---sql:getAreaListSplit---"+sql)
logger.warn("---countSql:getAreaListSplit---"+countSql)
CommonDAO dao = null
try{
dao = new CommonDAO(jndi)
rowNum = PageDiv.getCount(countSql.toString(), dao)
pageBean.setPageInfo(rowNum, pageSize)
//执行查找
ResultSet rs = PageDiv.getResultSet(pageNo, pageSize, rowNum, sql.toString(), dao)
for (int i = 0i <pageSize &&rs.next()i++) {
//从结果集中读取数据
arr.add(readDataFromRs(rs))
}
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
}
pageBean.setList(arr)
return true
}
/**
* get objects by search ,display split
* 按值查询并分页显示,数值、日期等查指定区间
* @param pageBean 页信息对象
* @param areaSearch 查询条件对象
* @return 获得页列表是否成功
*/
public boolean getAreaListSplitBySearch( Page pageBean,AreaSearch areaSearch ){
ArrayList arr = new ArrayList()
int pageSize = 0
int pageNo = 0
if (pageBean == null) {
return false
}
if (pageBean.getPageSize() <= 0) {
pageBean.setPageSize(15)
}
if (pageBean.getPageNo()<= 0) {
pageBean.setPageNo(1)
}
pageSize = pageBean.getPageSize()
pageNo = pageBean.getPageNo()
StringBuffer sqlWhere = this.getSqlwherBySearch(areaSearch)
StringBuffer sql = new StringBuffer(" select * from " + tableName + " where 1=1 " + sqlWhere + " order by area_id desc")
StringBuffer countSql = new StringBuffer("select count(*) from " + tableName + " where 1=1 " + sqlWhere)
logger.warn("---sql:getAreaListSplit---"+sql)
logger.warn("---countSql:getAreaListSplit---"+countSql)
CommonDAO dao = null
try{
dao = new CommonDAO(jndi)
rowNum = PageDiv.getCount(countSql.toString(), dao)
pageBean.setPageInfo(rowNum, pageSize)
//执行查找
ResultSet rs = PageDiv.getResultSet(pageNo, pageSize, rowNum, sql.toString(), dao)
for (int i = 0i <pageSize &&rs.next()i++) {
//从结果集中读取数据
arr.add(readDataFromRs(rs))
}
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
}
pageBean.setList(arr)
return true
}
/**
* 读取值对象列表
* @param rs 结果集
* @return 从结果集中读取的对象列表
*/
private ArrayList readDataListFromRs(ResultSet rs) throws SQLException {
ArrayList arr = new ArrayList()
Area area = null
try{
while (rs.next()) {
area = new Area()
//将字段值set到值对象中
area.setAreaId(rs.getString("area_id"))//区域ID
area.setAreaName(rs.getString("area_name"))//区域名称
area.setAreaFatherId(rs.getString("area_father_id"))//所属区县
area.setAreaGrandfatherId(rs.getString("area_grandfather_id"))//所属省市
arr.add(area)
}
}catch( Exception ex ){
ex.printStackTrace()
}
return arr
}
/**
* 读取单个值对象
* @param rs 结果集
* @return 按某列读取的特定记录的值对象
*/
private Area readDataFromRs(ResultSet rs) throws SQLException {
Area area = new Area()
try{
//将字段值set到值对象中
area.setAreaId(rs.getString("area_id"))//区域ID
area.setAreaName(rs.getString("area_name"))//区域名称
area.setAreaFatherId(rs.getString("area_father_id"))//所属区县
area.setAreaGrandfatherId(rs.getString("area_grandfather_id"))//所属省市
}catch( Exception ex ){
ex.printStackTrace()
}
return area
}
/**
* 更新数据 用于数据更新语句 Insert,Update,Delete
* @param updateSql 数据库更新语句
* @param logtype 数据库 *** 作类型
* @return 更新成功与否
*/
private boolean updateData(String updateSql, String logtype) {
int returnInt = -1
boolean returnFlag = false
CommonDAO dao = null
try {
dao = new CommonDAO("jdbc/ccn")
returnInt = dao.excute(updateSql)
if (returnInt != -1) {
returnFlag = true
}
}
catch (Exception ex) {
ex.printStackTrace()
}
finally {
dao.destroy()
}
// 写入日志
if (log != null) {
log.setSql(updateSql)
log.setOperation(logtype)
OperatorLogger loggerUpdate = new OperatorLogger()
loggerUpdate.addLog(log)
}
return returnFlag
}
/**
* 获得按值对象查询的查询条件
* @param areaSearch 条件查询的值对象
* @return sql查询条件
*/
private StringBuffer getSqlwherBySearch(AreaSearch areaSearch ){
areaSearch = (AreaSearch)QuoteReplace.replace(areaSearch) //值对象中的单引号替换
String areaId = areaSearch.getAreaId()
String areaName = areaSearch.getAreaName()
String areaFatherId = areaSearch.getAreaFatherId()
String areaGrandfatherId = areaSearch.getAreaGrandfatherId()
StringBuffer sqlWhere = new StringBuffer(" ")
if (areaId != null &&areaId.trim().length() != 0) {
sqlWhere.append(" and area_id like '%").append(areaId).append("%' ")
}
if (areaName != null &&areaName.trim().length() != 0) {
sqlWhere.append(" and area_name like '%").append(areaName).append("%' ")
}
if (areaFatherId != null &&areaFatherId.trim().length() != 0) {
sqlWhere.append(" and area_father_id like '%").append(areaFatherId).append("%' ")
}
if (areaGrandfatherId != null &&areaGrandfatherId.trim().length() != 0) {
sqlWhere.append(" and area_grandfather_id like '%").append(areaGrandfatherId).append("%' ")
}
return sqlWhere
}
/**
* 根据不同类别得到区域名称
* @param areaSearch 条件查询的值对象,areaType 区域类别如:城市,区,县
* @return 符合条件的area集合
*/
public ArrayList getAreaInfo(AreaSearch areaSearch,String areaType){
ArrayList arr = null
StringBuffer sqlBuf = new StringBuffer(50)
String areaId = areaSearch.getAreaId()
//得到省市名称
if(areaType.equals("sheng")){
sqlBuf.append("select * from area where area_grandfather_id = area_id and area_id =area_father_id ")
}
//得到市名称
if(areaId != null &&areaType.equals("shi")){
sqlBuf.append("select * from area where area_grandfather_id = '"+areaId+"' and area_id=area_father_id and area_grandfather_id!=area_father_id")
}
//得到区县名称
if(areaId != null &&areaType.equals("qu")){
sqlBuf.append("select * from area where area_father_id = '"+areaId+"' and area_id != area_father_id" )
}
sqlBuf.append( " order by area_id ")
logger.warn("---sql:getAreaListSplit---"+sqlBuf)
CommonDAO dao = null
ResultSet rs = null
try{
dao = new CommonDAO(jndi)
rs = dao.query(sqlBuf.toString())
//读取结果集信息
arr = this.readDataListFromRs(rs)
}catch( Exception ex ){
ex.printStackTrace()
}finally{
dao.destroy()
dao=null
sqlBuf = null
}
return arr
}
}
你如何用实体框架,象HIBERNATE这样的ORM的时候,首先考虑的肯定是BEAN实体类,也就是面向对象编程,面向对象 *** 作数据库了.
但是考虑到关联关系的时候,情况就复杂些了.
比如一对多的情况:
拿博客系统来说吧
一篇文章BLOG,肯定有一个BLOGID,这个BLOGID肯定是唯一的
BLOG(BLOGID,USERID,TITLE,CONTENT,MSGS)(博客ID,用户ID,标题,内容,评论)
现在有人对这个BLOG进行评论
评论MSG(MSGID,USERID,BLOG,MESSAGE)(评论ID,用户ID,博客,评论内容)
这有两个实体类,BLOG和MSG是一对多双向关联关系.
也就是说,根据这个BLOG可以知道这个BLOG下面所有的评论.
而某个MSG,肯定是对某一个BLOG进行评论的.
BLOG里面保存着评论的信息MSGS,MSGS肯定是个集合.
其中MSG里面保存着BLOG的信息.
实体类大概是上面那样.
下面就要建立关联关系的映射了.
一对多的关联关系的映射,主要体现在多的这一端,而多的这一端在数据库中体现就是外键.
也就是说,BLOG类中的MSGS是帖MSG来决定的,而数据库中,BLOG表肯定是没有MSG的任何字段信息.
但是MSG中肯定有BLOG实体类BLOGID.
有时候多个表也可以设计成一个BEAN.看情况设计喽.
建立楼主去研究下HIBERNATE里面的关联关系及其映射,
看实体类和数据库中表的详细情况.
要看你这个List的属性跟数据库的表的字段是怎么映射的呢?根据你的业务需求进行存储就好了啊。如果理不清楚,说明你的数据结构设计有问题。先设计好数据库的结构,再设计java bean,二者的映射关系要弄清楚才好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)