zoukankan      html  css  js  c++  java
  • Hibernate 最简单例子

    Hibernate 最简单例子

    guoqiang-vip@hotmail.com

    开发环境

    Windows XP Pack 2

    MyEclipse 5.5.1 GA

    jdk1.5.0_07

    Tomcat 5.0

    MySQL Server 5.0

    MySQL Tools for 5.0

     

    开发代码

    1 创建数据库,sql语句如下:

    DROP TABLE IF EXISTS `test`.`user`;

    CREATE TABLE  `test`.`user` (

      `id` int(10) unsigned NOT NULL auto_increment,

      `username` varchar(64) NOT NULL,

      `password` varchar(64) NOT NULL,

      `first_name` varchar(128) NOT NULL,

      `last_name` varchar(128) NOT NULL,

      `date_created` bigint(20) unsigned NOT NULL,

      PRIMARY KEY  (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

     

    2 程序代码:

    1hibernate.cfg.xml

    package com.guoqiang.hibernate;

     

    import org.hibernate.HibernateException;

    import org.hibernate.Session;

    import org.hibernate.cfg.Configuration;

     

    /**

     * Configures and provides access to Hibernate sessions, tied to the

     * current thread of execution.  Follows the Thread Local Session

     * pattern, see {@link http://hibernate.org/42.html }.

     */

    public class HibernateSessionFactory {

     

        /**

         * Location of hibernate.cfg.xml file.

         * Location should be on the classpath as Hibernate uses 

         * #resourceAsStream style lookup for its configuration file.

         * The default classpath location of the hibernate config file is

         * in the default package. Use #setConfigFile() to update

         * the location of the configuration file for the current session.  

         */

        private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

        private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

        private  static Configuration configuration = new Configuration();

        private static org.hibernate.SessionFactory sessionFactory;

        private static String configFile = CONFIG_FILE_LOCATION;

     

        static {

        try {

               configuration.configure(configFile);

               sessionFactory = configuration.buildSessionFactory();

            } catch (Exception e) {

               System.err

                      .println("%%%% Error Creating SessionFactory %%%%");

               e.printStackTrace();

           }

        }

        private HibernateSessionFactory() {

        }

       

        /**

         * Returns the ThreadLocal Session instance.  Lazy initialize

         * the <code>SessionFactory</code> if needed.

         *

         *  @return Session

         *  @throws HibernateException

         */

        public static Session getSession() throws HibernateException {

            Session session = (Session) threadLocal.get();

     

           if (session == null || !session.isOpen()) {

               if (sessionFactory == null) {

                  rebuildSessionFactory();

               }

               session = (sessionFactory != null) ? sessionFactory.openSession()

                      : null;

               threadLocal.set(session);

           }

     

            return session;

        }

     

        /**

         *  Rebuild hibernate session factory

         *

         */

        public static void rebuildSessionFactory() {

           try {

               configuration.configure(configFile);

               sessionFactory = configuration.buildSessionFactory();

           } catch (Exception e) {

               System.err

                      .println("%%%% Error Creating SessionFactory %%%%");

               e.printStackTrace();

           }

        }

     

        /**

         *  Close the single hibernate session instance.

         *

         *  @throws HibernateException

         */

        public static void closeSession() throws HibernateException {

            Session session = (Session) threadLocal.get();

            threadLocal.set(null);

     

            if (session != null) {

                session.close();

            }

        }

     

        /**

         *  return session factory

         *

         */

        public static org.hibernate.SessionFactory getSessionFactory() {

           return sessionFactory;

        }

     

        /**

         *  return session factory

         *

         *  session factory will be rebuilded in the next call

         */

        public static void setConfigFile(String configFile) {

           HibernateSessionFactory.configFile = configFile;

           sessionFactory = null;

        }

     

        /**

         *  return hibernate configuration

         *

         */

        public static Configuration getConfiguration() {

           return configuration;

        }

     

    }

     

    2User.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">

    <!--

        Mapping file autogenerated by MyEclipse Persistence Tools

    -->

    <hibernate-mapping>

        <class name="com.guoqiang.hibernate.User" table="user" catalog="test">

            <id name="id" type="java.lang.Integer">

                <column name="id" />

                <generator class="assigned" />

            </id>

            <property name="username" type="java.lang.String">

                <column name="username" length="64" not-null="true" />

            </property>

            <property name="password" type="java.lang.String">

                <column name="password" length="64" not-null="true" />

            </property>

            <property name="firstName" type="java.lang.String">

                <column name="first_name" length="128" not-null="true" />

            </property>

            <property name="lastName" type="java.lang.String">

                <column name="last_name" length="128" not-null="true" />

            </property>

            <property name="dateCreated" type="java.lang.Long">

                <column name="date_created" not-null="true" />

            </property>

        </class>

    </hibernate-mapping>

     

    3AbstractUser.java

    package com.guoqiang.hibernate;

     

    /**

     * AbstractUser generated by MyEclipse Persistence Tools

     */

     

    public abstract class AbstractUser implements java.io.Serializable {

     

        // Fields

     

        private Integer id;

     

        private String username;

     

        private String password;

     

        private String firstName;

     

        private String lastName;

     

        private Long dateCreated;

     

        // Constructors

     

        /** default constructor */

        public AbstractUser() {

        }

     

        /** full constructor */

        public AbstractUser(Integer id, String username, String password,

               String firstName, String lastName, Long dateCreated) {

           this.id = id;

           this.username = username;

           this.password = password;

           this.firstName = firstName;

           this.lastName = lastName;

           this.dateCreated = dateCreated;

        }

     

        // Property accessors

     

        public Integer getId() {

           return this.id;

        }

     

        public void setId(Integer id) {

           this.id = id;

        }

     

        public String getUsername() {

           return this.username;

        }

     

        public void setUsername(String username) {

           this.username = username;

        }

     

        public String getPassword() {

           return this.password;

        }

     

        public void setPassword(String password) {

           this.password = password;

        }

     

        public String getFirstName() {

           return this.firstName;

        }

     

        public void setFirstName(String firstName) {

           this.firstName = firstName;

        }

     

        public String getLastName() {

           return this.lastName;

        }

     

        public void setLastName(String lastName) {

           this.lastName = lastName;

        }

     

        public Long getDateCreated() {

           return this.dateCreated;

        }

     

        public void setDateCreated(Long dateCreated) {

           this.dateCreated = dateCreated;

        }

     

    }

     

    (4)User.java

    package com.guoqiang.hibernate;

     

    // Generated by MyEclipse Persistence Tools

     

    /**

     * User generated by MyEclipse Persistence Tools

     */

    public class User extends AbstractUser implements java.io.Serializable {

     

        // Constructors

     

        /** default constructor */

        public User() {

        }

     

        /** full constructor */

        public User(Integer id, String username, String password, String firstName,

               String lastName, Long dateCreated) {

           super(id, username, password, firstName, lastName, dateCreated);

        }

     

    }

     

    5DemoHibernateTest.java

    package com.guoqiang.hibernate;

     

    import org.hibernate.Transaction;

     

    public class DemoHibernateTest {

     

        /**

         * @param args

         */

        public static void main(String[] args) {

           // TODO Auto-generated method stub

           addUser();

           listUser();

           changeUser();

        }

     

        private static void printUser(String extraText, User user) {

           System.out.println(extraText

                  + "User[Username: "

                  + user.getUsername()

                  + ", Password:"

                  + user.getPassword()

                  + ",First Name: "

                  + user.getFirstName()

                  + ",Last Name: "

                  + user.getLastName()

                  + "]");

        }

     

        private static void addUser() {

           // Create user

           User user = new User();

           user.setId(1);

           user.setUsername("guoqiang");

           user.setFirstName("guo");

           user.setLastName("qiang");

           user.setPassword("guoqiang");

           user.setDateCreated(System.currentTimeMillis());

           // Create DAO

           UserDAO dao = new UserDAO();

           // Start the transaction

           Transaction tx = dao.getSession().beginTransaction();

           // Add user

           dao.save(user);

           // Commit the transaction

           tx.commit();

           // Close the session

           dao.getSession().close();

     

        }

     

        private static void listUser() {

           UserDAO dao = new UserDAO();

           User user = dao.findById(1);

           printUser("Pringting User, ", user);

           dao.getSession().close();

        }

     

        private static void changeUser() {

           UserDAO dao = new UserDAO();

           User user = dao.findById(1);

           user.setUsername("test");

           user.setPassword("test");

           user.setFirstName("demo");

           user.setLastName("demo");

     

           Transaction tx = dao.getSession().beginTransaction();

           // Add user

           dao.save(user);

           // Commit the transaction

           tx.commit();

     

           User updateUser = dao.findById(1);

           printUser("Pringting Updated User, ", updateUser);

           dao.getSession().close();

        }

     

    }

     

    运行结果如下:

    Pringting User, User[Username: guoqiang, Password:guoqiang,First Name: guo,Last Name: qiang]

    Pringting Updated User, User[Username: test, Password:test,First Name: demo,Last Name: demo]

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

    log4j:WARN Please initialize the log4j system properly.

     

    存在问题和解决

    问题1hibernate.cfg.xml文件找不到 如下:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).

    log4j:WARN Please initialize the log4j system properly.

    org.hibernate.HibernateException: /hibernate.cfg.xml not found

        at org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:147)

        at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1287)

        at org.hibernate.cfg.Configuration.configure(Configuration.java:1309)

        at org.hibernate.cfg.Configuration.configure(Configuration.java:1296)

        at com.hibernate.DemoHibernateTest.main(DemoHibernateTest.java:15)

    解决:1 Create a Java project时,一定要选Project layout中的Create separate source and output foldedrs 解决找不到hibernate.cfg.xml

         2 src下在创建log4j.properties 解决log4j:WARN

    内容为:

    log4j.rootLogger=debug, A1 , R

    log4j.appender.A1=org.apache.log4j.ConsoleAppender

    log4j.appender.A1.layout=org.apache.log4j.PatternLayout

    log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m -(:%L)%n

     

    log4j.appender.R=org.apache.log4j.RollingFileAppender

    log4j.appender.R.File=D:/workspace/DemoHibernate/HibernateDemoLog.log

    log4j.appender.R.MaxFileSize=100KB

    log4j.appender.R.MaxBackupIndex=1

    log4j.appender.R.layout=org.apache.log4j.PatternLayout

    log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m -(:%L)%n

     

    修改DemoHibernateTest.java如下:

    public class DemoHibernateTest {

        private static Logger log =Logger.getLogger(DemoHibernateTest.class);

     

        /**

         * @param args

         */

        public static void main(String[] args) {

           // TODO Auto-generated method stub

             log.debug("------测试!----");

           //addUser();

           listUser();

           changeUser();

        }

    //省略

    }

    运行就会在Console输出log,选中工程DemoHibernate刷新就会看到HibernateDemoLog.log 内容如下(节选):

    2007-06-16 11:25:33 [com.guoqiang.hibernate.DemoHibernateTest]-[DEBUG] ------测试!---- -(:14)

    //省略

    2007-06-16 11:41:31 [org.hibernate.impl.SessionImpl]-[DEBUG] after transaction completion -(:417)

    Pringting Updated User, User[Username: test, Password:test,First Name: demo,Last Name: demo]//输出内容!!!!

    2007-06-16 11:41:31 [org.hibernate.impl.SessionImpl]-[DEBUG] closing session -(:268)

    2007-06-16 11:41:31 [org.hibernate.jdbc.ConnectionManager]-[DEBUG] connection already null in cleanup : no action -(:369)

     

    参考资料

    1 Introduction to Hibernate Tutorial

    http://www.myeclipseide.com/images/tutorials/quickstarts/introduction_to_hibernate/tutorial.html

    2 《最简单的Log4j使用》

    3 First Hibernate example

    http://www.laliluna.de/download/first-hibernate-example-tutorialen.pdf 
    作者:深潭
    出处:http://www.cnblogs.com/dbasys/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Maven部署构件至远程仓库
    Maven远程仓库的认证
    Maven远程仓库的配置
    Maven实战系列文章
    使用Maven私服的好处
    使用Mavne生成可以执行的jar文件
    Visual Studio for Mac 简介
    HTTP 2.0与HTTP 1.1区别
    使用Microsoft的IoC框架:Unity来对.NET应用进行解耦
    围绕央行系统升级所产生的常见问题
  • 原文地址:https://www.cnblogs.com/dbasys/p/2127615.html
Copyright © 2011-2022 走看看