最近看那本深入浅出hibernate 真是很不错啊。。讲的也很细。。
刚刚小试了一把,真的很过隐。。
我用的是MYSQL数据库
表结构。
1:文章表
CREATE TABLE `t_article` (
`a_id` int ( 11 ) NOT NULL auto_increment,
`a_sort` int ( 11 ) NOT NULL default ‘ 0 ‘ ,
`a_title` varchar ( 50 ) default NULL ,
`a_body` text ,
`a_author` varchar ( 11 ) default ‘‘ ,
`a_hit` int ( 11 ) NOT NULL default ‘ 0 ‘ ,
`c_id` int ( 11 ) default ‘ 0 ‘ ,
`a_date` varchar ( 20 ) default NULL ,
PRIMARY KEY (`a_id`)
)
2:评论表
CREATE TABLE `t_remark` (
`r_id` int ( 11 ) NOT NULL auto_increment,
`a_id` int ( 11 ) NOT NULL default ‘ 0 ‘ ,
`r_name` varchar ( 20 ) NOT NULL default ‘‘ ,
`r_title` varchar ( 50 ) default ‘‘ ,
`r_body` varchar ( 100 ) default NULL ,
`r_email` varchar ( 30 ) default NULL ,
`r_date` varchar ( 30 ) default NULL ,
PRIMARY KEY (`r_id`),
KEY `a_id` (`a_id`)
)
表结构我直接导出来的。。
表建好了。接下来写vo 类了..
这是文章表的VO
package wjjcms.vo;
import java.util. * ;


public class articleVO
{
private int a_id;
private int a_sort;
private int a_hit;
private int c_id;
private String a_title;
private String a_body;
private String a_author;
private String a_date;
private Set a_remark;

public articleVO()
{
}
// 自己写上get set 方法。。我就不贴上来了
评论表的。
package wjjcms.vo;


public class remarkVO
{
private int a_id;
private int r_id;
private String r_name;
private String r_title;
private String r_body;
private String r_email;
private String r_date;

public remarkVO()
{
}
//get set 方法自己加上。。
接下来 写映射文件了..
我用的是hibernate.properties 文件连接数据库。
hibernate.query.substitutions true 1, false 0, yes ‘Y‘, no ‘N‘
## MySQL
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost:3306/wjcms
hibernate.connection.username root
hibernate.connection.password wujun
hibernate.connection.pool_size 1
hibernate.proxool.pool_alias pool1
hibernate.show_sql true
hibernate.jdbc.batch_size 0
hibernate.max_fetch_depth 1
hibernate.cache.use_query_cache true
该文件记的放在classes目录下面。。
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate./hibernate-mapping-2.0.dtd" >
< hibernate-mapping >
< class name ="wjjcms.vo.articleVO" table ="t_article" >
< id name ="a_id" column ="a_id" unsaved-value ="0" >
< generator class ="native" />
</ id >
< property name ="c_id" column ="c_id" />
< property name ="a_title" column ="a_title" />
< property name ="a_sort" column ="a_sort" />
< property name ="a_date" column ="a_date" />
< property name ="a_body" column ="a_body" />
< property name ="a_hit" column ="a_hit" />
< property name ="a_author" column ="a_author" />
< set name ="a_remark" cascade ="all" outer-join ="true" >
< key column ="a_id" />
< one-to-many class ="wjjcms.vo.remarkVO" />
</ set >
</ class >
</ hibernate-mapping >
配置文件 那些字段 属性是什么意思。。你到首页搜索一下,很多的 。
<? xml version="1.0" ?>
<! DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate./hibernate-mapping-2.0.dtd" >
< hibernate-mapping >
< class name ="wjjcms.vo.remarkVO" table ="t_remark" >
< id name ="r_id" column ="r_id" unsaved-value ="0" >
< generator class ="native" />
</ id >
< property name ="r_name" column ="r_name" />
< property name ="r_email" column ="r_email" />
< property name ="r_title" column ="r_title" />
< property name ="r_body" column ="r_body" />
< property name ="r_date" column ="r_date" />
< property name ="a_id" column ="a_id" />
</ class >
</ hibernate-mapping >
其实这些都是可以自动生成的。。你去看看http://blog.csdn.net/javamxj/category/111072.aspx
他讲的很详细。。
一切都准备好了。。该写个类来小试一下了。。
package wjjcms.test;

import junit.framework. * ;
import net.sf.hibernate.cfg. * ;
import net.sf.hibernate. * ;
import wjjcms.vo.remarkVO;
import wjjcms.vo.articleVO;
import java.sql.SQLException;
import java.util. * ;


public class TestText extends TestCase
{

private SessionFactory sessionFactory;
private Session ss = null ;

public TestText(String name)
{
super (name);
}
/**/ /*
junit中setUp方法在TestCase初试化的时候会自动调用
一般用来初试化公共资源。。
这里用来初试化Hibernate Session
*/
protected void setUp() throws Exception
{
Configuration config = new Configuration();
config.addClass(articleVO. class ).addClass(remarkVO. class );
sessionFactory = config.buildSessionFactory();
ss = sessionFactory.openSession();
}
/**/ /*
* 这个方法junit TestCase执行完毕时,会自动调用tearDown方法。
* 一般用于释放资源,我这里是关闭在setUp()方法里打开的Session
*/
protected void tearDown() throws Exception
{

try
{
ss.close();

} catch (HibernateException ex)
{
ex.printStackTrace();
}
}
// 测试添加一篇文章
public void testAddArticle() throws Exception
{

try
{
wjjcms.vo.articleVO vo = new articleVO();
vo.setA_author( " wujunjun " );
vo.setA_body( " 热爱祖国,坚决抗日! " );
vo.setA_date( " 2006-3-30 " );
vo.setA_hit( 33 );
vo.setA_sort( 1 );
vo.setA_title( " 小日本鬼子 " );
vo.setC_id( 1 );
ss.save(vo);
ss.flush();
ss.connection().commit();
ss.close();

} catch (HibernateException ex)
{
// junit.framework.Assert.
System.out.print(ex.getMessage());
}
}
// 测试添加一篇评论
public void testAddRemark() throws Exception
{

try
{
wjjcms.vo.remarkVO vo = new remarkVO();
vo.setR_body( " 有是你个小日本。。。。 " );
vo.setR_date( " 2006-1-1 " );
vo.setA_id( 1 );
vo.setR_email( " wujun1866@gmail.com " );
vo.setR_name( " wujunjun " );
vo.setR_title( " re:小日本,打的好 " );
ss.save(vo);
ss.flush();
ss.connection().commit();

} catch (HibernateException ex)
{
System.out.print(ex.getMessage());
}
}
// 测试同时添加一骗文章和5篇评论
public void testAddAll()

{
wjjcms.vo.articleVO vo = new articleVO();
vo.setA_author( " wujunjun " );
vo.setA_body( " 热爱祖国,坚决抗日! " );
vo.setA_date( " 2006-3-30 " );
vo.setA_hit( 33 );
vo.setA_sort( 1 );
vo.setA_title( " 小日本鬼子 " );
vo.setC_id( 1 );

Set remarkSet = new HashSet();
for ( int i = 0 ;i < 5 ;i ++ )

{
wjjcms.vo.remarkVO reVO = new remarkVO();
reVO.setR_body( " 有是你个小日本。。。。 " );
reVO.setR_date( " 2006-1-1 " );
reVO.setA_id( 1 );
reVO.setR_email( " wujun1866@gmail.com " );
reVO.setR_name( " wujunjun " );
reVO.setR_title( " re:小日本,打的好 " );
remarkSet.add(reVO);
}
vo.setA_remark(remarkSet);
try
{
ss.save(vo);
ss.flush();
ss.connection().commit();
}
catch (Exception ex)

{
ex.printStackTrace();
}
}
// 测试显示文章。。和评论。。
public void testShowArticle() throws SQLException, HibernateException
{
Query q = ss.createQuery( " from articleVO where c_id=? " );
q.setInteger( 0 , 1 );
List l = q.list();

for ( int i = 0 ; i < l.size(); i ++ )
{
articleVO showVO = (articleVO) l.get(i);
System.out.print(showVO.getA_author());
System.out.print(showVO.getA_title());
java.util.Iterator it = showVO.getA_remark().iterator();

while (it.hasNext())
{
remarkVO reVO = (remarkVO) it.next();
System.out.print(reVO.getR_email());
System.out.print(reVO.getR_title());
}
}
}
}
运行一下看看。

OK,,成功了。数据也已经进数据库了。。
哈。。我是菜鸟。专家多指点啊。。