服务接口的Hibernate实现
系统需要一个额外的jar支持    
antlr-2.XXX.jar    


hibernate.cfg.xml    
查看复制到剪切板打印
<?xml version='1.0' encoding='utf-8'?>    
<!DOCTYPE hibernate-configuration PUBLIC        
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
<hibernate-configuration>    
    <session-factory>    
    
                <!-- 数据库连接设置 -->    
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/notepad?useUnicode=true&characterEncoding=UTF-8</property>    
        <property name="connection.username">notepad</property>    
        <property name="connection.password">notepad</property>    
    
                <!-- 默认的JDBC 连接池配置,我们测试用1个就行了 -->    
        <property name="connection.pool_size">1</property>    
    
                <!-- SQL 方言 -->    
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    
    
                <!-- 启用自动的session上下文管理 -->    
        <property name="current_session_context_class">thread</property>    
    
                <!-- 不使用二级缓冲    -->    
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>    
    
                <!-- 显示执行的SQL -->    
        <property name="show_sql">true</property>    
    
        <mapping resource="net/java2000/notepad/User.hbm.xml" />    
        <mapping resource="net/java2000/notepad/Post.hbm.xml" />    
    </session-factory>    
</hibernate-configuration>    

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>

                <!-- 数据库连接设置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/notepad?useUnicode=true&characterEncoding=UTF-8</property>
        <property name="connection.username">notepad</property>
        <property name="connection.password">notepad</property>

                <!-- 默认的JDBC 连接池配置,我们测试用1个就行了 -->
        <property name="connection.pool_size">1</property>

                <!-- SQL 方言 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

                <!-- 启用自动的session上下文管理 -->
        <property name="current_session_context_class">thread</property>

                <!-- 不使用二级缓冲    -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

                <!-- 显示执行的SQL -->
        <property name="show_sql">true</property>

        <mapping resource="net/java2000/notepad/User.hbm.xml" />
        <mapping resource="net/java2000/notepad/Post.hbm.xml" />
    </session-factory>
</hibernate-configuration>

User.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">    
<hibernate-mapping>    
    <class name="net.java2000.notepad.User" table="T_User">    
        <id name="id" column="Id">    
            <generator class="identity" />    
        </id>    
        <property name="username" />    
        <property name="password" />    
    </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">
<hibernate-mapping>
    <class name="net.java2000.notepad.User" table="T_User">
        <id name="id" column="Id">
            <generator class="identity" />
        </id>
        <property name="username" />
        <property name="password" />
    </class>
</hibernate-mapping>


Post.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">    
<hibernate-mapping>    
    <class name="net.java2000.notepad.Post" table="T_Post">    
        <id name="id" column="Id">    
            <generator class="identity" />    
        </id>    
        <property name="idParent" />    
        <many-to-one name="user">    
            <column name="userId" />    
        </many-to-one>    
        <property name="title" />    
        <property name="content" />    
        <property name="datetime" type="timestamp" />    
    </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">
<hibernate-mapping>
    <class name="net.java2000.notepad.Post" table="T_Post">
        <id name="id" column="Id">
            <generator class="identity" />
        </id>
        <property name="idParent" />
        <many-to-one name="user">
            <column name="userId" />
        </many-to-one>
        <property name="title" />
        <property name="content" />
        <property name="datetime" type="timestamp" />
    </class>
</hibernate-mapping>

HibernateUtil.java    
查看复制到剪切板打印
package net.java2000.notepad;        
    
import org.hibernate.*;        
import org.hibernate.cfg.*;        
    
/**    
* 辅助类。    
*        
* @author 赵学庆,Java世纪网(<A href="http://www.java2000.net" target=_blank>[url]http://www.java2000.net</A>[/url])    
*        
*/
    
public class HibernateUtil {        
    
    private static final SessionFactory sessionFactory;        
    
    static {        
        try {        
            // 从 hibernate.cfg.xml 创建 SessionFactory        
            sessionFactory = new Configuration().configure().buildSessionFactory();        
        } catch (Throwable ex) {        
            // 如果创建异常,则报错        
            System.err.println("创建 SessionFactory 失败." + ex);        
            throw new ExceptionInInitializerError(ex);        
        }        
    }        
    
    public static SessionFactory getSessionFactory() {        
        return sessionFactory;        
    }        
    
}    

package net.java2000.notepad;

import org.hibernate.*;
import org.hibernate.cfg.*;

/**
* 辅助类。
*    
* @author 赵学庆,Java世纪网([url]http://www.java2000.net[/url])
*    
*/

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // 从 hibernate.cfg.xml 创建 SessionFactory
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // 如果创建异常,则报错
            System.err.println("创建 SessionFactory 失败." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

}

UserServiceHibernateImpl.java    
查看复制到剪切板打印
package net.java2000.notepad.service.impl.hibernate;        
    
import java.util.List;        
    
import net.java2000.notepad.HibernateUtil;        
import net.java2000.notepad.User;        
import net.java2000.notepad.service.UserService;        
    
import org.hibernate.Query;        
import org.hibernate.Session;        
    
/**    
* 用户服务的Hibernate实现版本    
*        
* @author 赵学庆,Java世纪网(<A href="http://www.java2000.net" target=_blank>[url]http://www.java2000.net</A>[/url])    
*        
*/
    
public class UserServiceHibernateImpl implements UserService {        
    
    @Override    
    public boolean checkLogin(String username, String password) {        
        User user = findByUsername(username);        
        return user == null ? false : user.getPassword().equals(password);        
    }        
    
    @SuppressWarnings("unchecked")        
    @Override    
    public User findByUsername(String username) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        session.beginTransaction();        
        Query query = session.createQuery("from User where username=?")        
                .setParameter(0, username);        
        List<User> list = query.list();        
        session.getTransaction().commit();        
        if (list != null && list.size() > 0) {        
            return list.get(0);        
        }        
        return null;        
    
    }        
    
    @Override    
    public User get(long id) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        return (User) session.get(User.class, id);        
    }        
    
    @Override    
    public User save(User user) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        session.beginTransaction();        
        session.saveOrUpdate(user);        
        session.getTransaction().commit();        
        return user;        
    }        
}    

package net.java2000.notepad.service.impl.hibernate;

import java.util.List;

import net.java2000.notepad.HibernateUtil;
import net.java2000.notepad.User;
import net.java2000.notepad.service.UserService;

import org.hibernate.Query;
import org.hibernate.Session;

/**
* 用户服务的Hibernate实现版本
*    
* @author 赵学庆,Java世纪网([url]http://www.java2000.net[/url])
*    
*/

public class UserServiceHibernateImpl implements UserService {

    @Override
    public boolean checkLogin(String username, String password) {
        User user = findByUsername(username);
        return user == null ? false : user.getPassword().equals(password);
    }

    @SuppressWarnings("unchecked")
    @Override
    public User findByUsername(String username) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        Query query = session.createQuery("from User where username=?")
                .setParameter(0, username);
        List<User> list = query.list();
        session.getTransaction().commit();
        if (list != null && list.size() > 0) {
            return list.get(0);
        }
        return null;

    }

    @Override
    public User get(long id) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        return (User) session.get(User.class, id);
    }

    @Override
    public User save(User user) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.saveOrUpdate(user);
        session.getTransaction().commit();
        return user;
    }
}

PostServiceHibernateImpl.java    
查看复制到剪切板打印
package net.java2000.notepad.service.impl.hibernate;        
    
import java.util.List;        
    
import net.java2000.notepad.HibernateUtil;        
import net.java2000.notepad.Post;        
import net.java2000.notepad.service.PostService;        
    
import org.hibernate.Session;        
    
/**    
* 留言服务的Hibernate实现版本    
*        
* @author 赵学庆,Java世纪网(<A href="http://www.java2000.net" target=_blank>[url]http://www.java2000.net</A>[/url])    
*        
*/
    
public class PostServiceHibernateImpl implements PostService {        
    
    @Override    
    public int countAllSubject() {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        session.beginTransaction();        
        return ((Long) session.createQuery(        
                "select count(*) from Post where idParent=0").iterate().next())        
                .intValue();        
    }        
    
    @SuppressWarnings("unchecked")        
    @Override    
    public List<Post> findReplyOfSubject(long postId) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        session.beginTransaction();        
        return session.createQuery("from Post where idParent=?").setParameter(0,        
                postId).list();        
    }        
    
    @SuppressWarnings("unchecked")        
    @Override    
    public List<Post> findSubject(int begin, int number) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        return session.createQuery("from Post where idParent=0").setFirstResult(        
                begin).setMaxResults(number).list();        
    }        
    
    @Override    
    public Post get(long id) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        return (Post) session.get(Post.class, id);        
    }        
    
    @Override    
    public Post save(Post post) {        
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();        
        session.beginTransaction();        
        session.saveOrUpdate(post);        
        session.getTransaction().commit();        
        return post;        
    }        
}    

package net.java2000.notepad.service.impl.hibernate;

import java.util.List;

import net.java2000.notepad.HibernateUtil;
import net.java2000.notepad.Post;
import net.java2000.notepad.service.PostService;

import org.hibernate.Session;

/**
* 留言服务的Hibernate实现版本
*    
* @author 赵学庆,Java世纪网([url]http://www.java2000.net[/url])
*    
*/

public class PostServiceHibernateImpl implements PostService {

    @Override
    public int countAllSubject() {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        return ((Long) session.createQuery(
                "select count(*) from Post where idParent=0").iterate().next())
                .intValue();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Post> findReplyOfSubject(long postId) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        return session.createQuery("from Post where idParent=?").setParameter(0,
                postId).list();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<Post> findSubject(int begin, int number) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        return session.createQuery("from Post where idParent=0").setFirstResult(
                begin).setMaxResults(number).list();
    }

    @Override
    public Post get(long id) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        return (Post) session.get(Post.class, id);
    }

    @Override
    public Post save(Post post) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        session.saveOrUpdate(post);
        session.getTransaction().commit();
        return post;
    }
}