Hibernate4.3.10開發實例

pm45e 9年前發布 | 38K 次閱讀 Hibernate 持久層框架 Hibernate4

1、首先還是引入所需要的包


2、然后是配置hibernate.cfg.xml配置文件,連接mysql數據庫信息,以及引入其他子模塊的映射文件


<hibernate-configuration>
<session-factory>
    <!-- 數據庫連接信息 -->
    <property name="show_sql">true</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hbm2ddl.auto">update</property>

    <mapping resource="/hibernateConfig/Login.hbm.xml" />
</session-factory>
</hibernate-configuration>

3、編寫子模塊的映射文件,這里是一個簡單的登錄信息表,Login.hbm.xml



<hibernate-mapping package="com.demo.model">

    <class name="Login" table="login">
        <id name="id" column="id">
            <generator class="increment"/>
        </id>
        <property name="username" column="username" length="20"/>
        <property name="password" column="password" length="20"/>
    </class>

</hibernate-mapping>

4、編寫model層的對象映射javabean,和普通的javabean沒有什么大的區別,只是加了一些構造函數,屬性和數據庫表的字段對應



public class Login {
    private int id;
    private String username;
    private String password;

    (getter/setter)

    public Login() {
    }

    public Login(int id, String username, String password) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
    }
}

5、編寫DAO層,DAO負責底層的數據庫的一些操作,這里需要實現一個DAO接口,使得業務邏輯組件依賴DAO接口而不是具體實現類,將系統各組件之間的依賴提升到接口層次,避免類層次直接耦合(假如系統有所改變,只要接口層次沒有改變,那么依賴該組件的上層組件也不需要改變,從而提供了良好的復用)


LoginDao接口:


public interface LoginDao {
    public void saveLogin(Login login);

    public void deleteLogin(Login login);

    public void updateLogin(Login login);

    public Login findLogin(int id);

    public Login findLogin(String name);
}
LoginDaoImpl實現類:



public class LoginDaoImpl implements LoginDao {
    public void deleteLogin(Login login) {
        HibernateUtil.delete(login);
    }

    public Login findLogin(int id) {
        return (Login) HibernateUtil.findById(Login.class, id);
    }

    public Login findLogin(String name) {
        return (Login) HibernateUtil.findByName(name);
    }

    public void saveLogin(Login login) {
        HibernateUtil.add(login);
    }

    public void updateLogin(Login login) {
        HibernateUtil.update(login);
    }
}

6、編寫業務邏輯組件service,DAO已經幫我們實現了數據庫的操作,在業務邏輯組件中我們則只需要調用DAO組件并關注于業務邏輯的實現即可


LoginService接口:


public interface LoginService {
    public void save(Login login);

    public void delete(Login login);

    public void update(Login login);

    public Login findById(int id);

    public Login findByName(String name);
}
LoginServiceImpl實現類:



public class LoginServiceImpl implements LoginService {
    private LoginDao loginDao;

    public LoginDao getLoginDao() {
        return loginDao;
    }

    public void setLoginDao(LoginDao loginDao) {
        this.loginDao = loginDao;
    }

    public void delete(Login login) {
        loginDao.deleteLogin(login);
    }

    public Login findById(int id) {
        return loginDao.findLogin(id);
    }

    public Login findByName(String name) {
        return loginDao.findLogin(name);
    }

    public void save(Login login) {
        loginDao.saveLogin(login);
    }

    public void update(Login login) {
        loginDao.updateLogin(login);
    }
}

7、編寫獲取hibernate的SessionFactory類的工具類,這里編寫一個簡單的工具類,一般應用是在spring容器里來管理SessionFactory的



public class HibernateUtil {
    private static SessionFactory sf;
    static {
        Configuration cfg = new Configuration();
        cfg.configure("hibernateConfig/hibernate.cfg.xml");
        sf = cfg.buildSessionFactory();
    }

    public static Session getSession() {
        return sf.openSession();
    }

    public static void add(Object entity) {
        Session session = null;
        Transaction tx = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.save(entity);
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    public static void delete(Object entity) {
        Session session = null;
        Transaction tx = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.delete(entity);
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    public static void update(Object entity) {
        Session session = null;
        Transaction tx = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            session.update(entity);
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    public static Object findById(Class clazz, Serializable id) {
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            Object ob = session.get(clazz, id);
            return ob;
        } catch (HibernateException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    public static Object findByName(String name) {
        Session session = null;
        try {
            session = HibernateUtil.getSession();
            Query query = session.createQuery("from test where name = :name");
            query.setParameter("name", name);
            Object ob = query.uniqueResult();
            return ob;
        } catch (HibernateException e) {
            e.printStackTrace();
            throw e;
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }
}


注意:當hibernate.cfg.xml不放在src下時,在這里設置一下,讓應用能找到這個配置文件


Configuration cfg = new Configuration();
        cfg.configure("hibernateConfig/hibernate.cfg.xml");


8、action中調用業務邏輯組件提供一個保存用戶名密碼的實現


public String execute(){
        Login login=new Login();
        login.setUsername(getUsername());
        login.setPassword(getPassword());
        ls.save(login);
        return SUCCESS;
    }

9、在spring配置文件中配置一下各個bean,依賴注入一下



<bean id="loginDao" class="com.demo.dao.daoImpl.LoginDaoImpl" />
    <bean id="loginService" class="com.demo.service.serviceImpl.LoginServiceImpl">
        <property name="loginDao" ref="loginDao" />
    </bean>
    <bean id="registerAction" class="com.demo.action.RegisterAction"
        scope="prototype">
        <property name="ls" ref="loginService" />
    </bean>

10、測試


一個簡單的注冊頁面中輸入用戶名密碼,點擊注冊后保存到數據庫中


數據庫中保存成功


來自:http://blog.csdn.net/kevinxxw/article/details/47145189

 本文由用戶 pm45e 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!