<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    甜咖啡

    我的IT空間

    HIbernate對數據庫的操作

    以前聽起hibernate總感覺是一個很奇怪的東西,不知道是用做什么,只知道是一個框架,今天對hibernate的學習,使我受益匪淺,知道了hibernate的作用。
    以前在寫程序的時候看,特別是在編寫連接數據庫程序的時候,總要用到jdbc,提前都感覺到jdbc是一個很好的手工方式,并沒有想到更好的實現方法,也不知道jdbc的缺點是什么,因為在做大型項目的時候,必定會要寫很多的程序,當然操作數據庫的更不可缺,所以每次的有很多都是重復的,而且在對象模型和關系模型之間總會遇到很多的問題,也往往會轉來轉去的,當用了hibernate后,可以很方便的操作數據,不用寫那么麻煩的代碼,節省了很多的操作和代碼的編寫,這樣大大提高了代碼編寫的效率,提高了開發的速度!現在將走向hibernate的世界:
    一:首先要使用hibernate框架,必定要引入hibernate2.jar包,當然還要引入很多的包,然后寫一個與數據表對應的JavaBean類,與數據庫的字段對應,比如一個簡單的java類如下:
    package tmc.hibernat.domian;

    import java.util.Date;

    public class User {

    private int id;
    private String name;
    private Date date;
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public Date getDate() {
    return date;
    }
    public void setDate(Date date) {
    this.date = date;
    }


    }
    然后編寫一個映射的文件,
    <?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 package="tmc.hibernat.domian">

    <class name="User">
    <id name="id">
    <generator class="native" />
    </id>

    <property name="name" unique="true" />
    <property name="date" />
    </class>
    </hibernate-mapping>

    在寫一個加載數據庫和連接數據庫的的配置文件:
    <!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:///test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hbm2ddl.auto">update</property>
    <property name="show_sql">true</property>
    <mapping resource="tmc/hibernat/domian/User.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>

    在此,一切的準備都已經完成,接下來執行寫一些service的java類對數據庫進行操作,就可以實現對數據庫的操做了
    寫一個service的java類:
    package tmc.hibernate.service;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public final class HibernateUitl {

    private static SessionFactory sessionFactory;
    private HibernateUitl(){

    }
    /**
    * 初始化代碼
    */
    static{

    //配置的一個實例說明屬性允許應用程序在測繪文件被用來當創造一個SessionFactory 
    Configuration cfg = new Configuration();
    cfg.configure();//讀取配置文件
    sessionFactory = cfg.buildSessionFactory();//找出配置文件的所有信息
    }
    /**
    *  獲取SessionFactory的方法
    * @return
    */
        public static SessionFactory getSessionFactory(){
       
        return sessionFactory;
        }
        /**
         * 獲取session的方法
         * @return
         */
        public static Session getSession(){
        return sessionFactory.openSession();
        }
    }

    然后寫對數據庫的各種操作:
    1.寫一個接口:
    package tmc.hibernat.domian;

    public interface UserDao {

    public void saveUser(User user);
    public User findUserById(int id);
    public User findUserByName(String name);
    public void updateUser(User user);
    public void remove(User user);
    }
    2.實現接口:
    package tmc.hibernate.service;

    import org.hibernate.Criteria;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    import org.hibernate.criterion.Restrictions;

    import tmc.hibernat.domian.User;
    import tmc.hibernat.domian.UserDao;

    public class UserHibernateImp implements UserDao{
       
    /**
    * 根據id獲取查詢數據庫的內容
    */
    @Override
    public User findUserById(int id) {
    Session s = null;
    try{
    s = HibernateUitl.getSession();
    //Criteria c = s.createCriteria(User.class);
    //c.add(Restrictions.eq("name",name));
    User user =(User)s.get(User.class,id);//User.class方便找到映射文件
    return user;
    }finally{
    if(s!=null){
    s.close();
    }

    }
    }
       /**
        * 根據用戶名,查詢用戶的信息
        */
    @Override
    public User findUserByName(String name) {
    Session s = null;
    try{
    s = HibernateUitl.getSession();
    Criteria c = s.createCriteria(User.class);
    c.add(Restrictions.eq("name",name));
    User user =(User)c.uniqueResult();//映射是唯一的
    return user;
    }finally{
    if(s!=null){
    s.close();
    }

    }
    }
    /**
    * 和上面的使用是一樣的,只是用不同的查詢方式而已
    * @param name
    * @return
    */
    public User findUserByName1(String name) {
    Session s = null;
    try{
    s = HibernateUitl.getSession();
    //Criteria c = s.createCriteria(User.class);
    //c.add(Restrictions.eq("name",name));
    String hql = "from User as user where user.name=:n";
    Query q = s.createQuery(hql);
    q.setString("n",name);

    User user =(User)q.uniqueResult();//映射是唯一的
    return user;
    }finally{
    if(s!=null){
    s.close();
    }

    }
    }
        /**
         * 移除數據庫一條記錄
         * @see tmc.hibernat.domian.UserDao#remove(tmc.hibernat.domian.User)
         */
    @Override
    public void remove(User user) {
    Session s = null;
    //創建一個事務
    Transaction tx = null;
    try{
    s = HibernateUitl.getSession();
    tx = s.beginTransaction();
    s.delete(user);
    tx.commit();
    }finally{
    if(s!=null){
    s.close();
    }

    }

    }
        /**
         * 向數據庫添加數據
         */
    @Override
    public void saveUser(User user) {
    Session s = null;
    //創建一個事務
    Transaction tx = null;
    try{
    s = HibernateUitl.getSession();
    tx = s.beginTransaction();
    s.save(user);
    tx.commit();
    }finally{
    if(s!=null){
    s.close();
    }

    }
    }
      /**
       * 修改數據庫數據
       */
    @Override
    public void updateUser(User user) {
    Session s = null;
    //創建一個事務
    Transaction tx = null;
    try{
    s = HibernateUitl.getSession();
    tx = s.beginTransaction();
    s.update(user);
    tx.commit();
    }finally{
    if(s!=null){
    s.close();
    }

    }

    }

    }
    3.測試上面的類:
    package tmc.hibernate.service;

    import java.util.Date;

    import tmc.hibernat.domian.User;
    import tmc.hibernat.domian.UserDao;

    public class TestDao {

    public static void main(String[] args){
    UserDao dao = new UserHibernateImp();
    User user = new User();
    user.setName("name");
    user.setDate(new Date());
    System.out.println("1111");
    dao.saveUser(user);


    user.setName("new name");
    System.out.println("222");
    dao.updateUser(user);

    User u = dao.findUserByName(user.getName());
    System.out.println("3333");
    }
    }

    這樣的話,就可以完成了對數據庫的各種操作,這樣寫真的很方便,很靈活,減少了很多的重復代碼,但就是配置文件的時候很麻煩,呵呵,反正很多都這樣的,沒有十全十美的東西,但只要好用,就足夠了!

    posted on 2011-01-23 16:12 甜咖啡 閱讀(5216) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    統計

    常用鏈接

    留言簿(1)

    我參與的團隊

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费91麻豆精品国产自产在线观看 | 黄色网页免费观看| 1024免费福利永久观看网站| 亚洲成无码人在线观看| 99在线观看视频免费| 亚洲欧洲日产韩国在线| 国产精品1024永久免费视频| 久久久亚洲AV波多野结衣| 成人免费激情视频| 亚洲熟妇AV一区二区三区宅男| 在线中文高清资源免费观看| 亚洲AV成人片无码网站| 亚洲av手机在线观看| 亚洲天堂免费在线视频| 亚洲成a人片77777kkkk| 最好看的中文字幕2019免费| 亚洲AV无码精品蜜桃| 国产精品四虎在线观看免费| 十八禁的黄污污免费网站| 亚洲色无码专区在线观看| 91久久成人免费| 亚洲国产精品成人午夜在线观看| mm1313亚洲精品无码又大又粗| 久久久久国色AV免费观看| 亚洲国产美国国产综合一区二区| 亚洲一级毛片免费看| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲国产一区二区三区| 免费视频成人片在线观看| 亚洲国产日韩精品| 亚洲欧洲一区二区三区| 中文字幕亚洲免费无线观看日本| 亚洲色中文字幕在线播放| 中文字幕在线亚洲精品| 亚洲免费视频网址| 午夜亚洲乱码伦小说区69堂| 久久综合图区亚洲综合图区 | 国产一级一片免费播放i| 一个人免费视频在线观看www| 国产精品亚洲精品青青青| 国产午夜亚洲精品国产成人小说|