<tbody id="d1jhg"></tbody><th id="d1jhg"><track id="d1jhg"></track></th>
    <nav id="d1jhg"></nav>
  • <em id="d1jhg"></em>
  • <th id="d1jhg"><pre id="d1jhg"><sup id="d1jhg"></sup></pre></th>

  • <em id="d1jhg"></em>
    <em id="d1jhg"><acronym id="d1jhg"></acronym></em><dd id="d1jhg"><noscript id="d1jhg"></noscript></dd>

    把頭像圖片以二進制形式保存到數據庫(Hibernate實現)

    小編:管理員 44閱讀 2022.09.05

    我們把頭像直接保存到數據庫,而不是保存一個地址。 使用Hibernate自動創建表方式,數據庫photo字段的數據類型是CLOB,這是針對MySQL,其他數據庫可能不一樣。 1、Hibernate環境搭建、建立工程略。 2、首先我們新建一個User類,儲存一些用戶信息字段,在Java中photo字段要申明為應該byte[]類型

    User.java:

    public class User {
        private int id;
        private String name;
        private Integer age;
        private Date birthday; // 生日
        private String desc; // 一大段說明
        private byte[] photo; // 頭像圖片
        //省略getter and setter Method...
    }
    復制

    3、然后配置User的映射文件 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 package="cn.itcast.c_hbm_property">
        <!-- name屬性:哪個類
    	 table屬性:對應哪個表,如果不寫,默認的表名就是類的簡單名稱
        -->
        <class name="User" table="t_user">
    	<id name="id" type="int" column="id">
            <generator class="native"/>
        </id>
    	<!-- 普通的屬性(數據庫中的基本類型,如字符串、日期、數字等) 
        	name屬性:對象中的屬性名,必須要有。
    	     type屬性:類型,如果不寫,Hibernate會自動檢測。
    	     可以寫Java中類的全名。
    	     或是寫hibernate類型。
    	     column屬性:對應表中的列名,如果沒有,默認為屬性名。
    	     length屬性:長度,不是所有的類型都有長度屬性,比如varchar有,但int沒有,如果不寫默認為255
    	     not-null屬性:非空約束,默認為false
    	 -->
    	 <!-- 
    	      <property name="name"/>
    	 -->
    	 <property name="name" type="string" column="name" length="20" not-null="true"/>
    	 <property name="age" type="int" column="age_"/>
    		
    	 <property name="birthday" type="date" column="birthday_"/>
    	 <!-- 當列表與關鍵字沖突時,可以通過column屬性指定一個其他的列名。
    	      或是使用反引號包圍起來。
    	      指定使用text類型時,最好再指定length,以確定生成的SQL類型是能夠存放指定數量的字符的。
                  <property name="desc">
                      <column name="desc_" length="5000" sql-type="text"/>
                  </property>		
    	 -->
    	 <property name="desc" type="text" length="5000" column="`desc`" ></property>
    	 <!-- 頭像,二進制類型,最好指定長度 -->
    	 <property name="photo" type="binary" length="102400"></property>
        </class>
    </hibernate-mapping>
    復制

    4、測試類測試新增User信息

    photoTest.java

    public class photoTest{
        private static SessionFactory sessionFactory;
        static {
    	sessionFactory = new Configuration()//
    	    .configure()// 讀取配置文件
    	    .addClass(User.class)//
    	    .buildSessionFactory();
        }
        @Test
        public void testSave() throws Exception {
            // 讀取圖片文件
            InputStream in = new FileInputStream( "c:/test.png");
            byte[] photo = new byte[in.available()];
            in.read(photo);
            in.close();
    		
            // 創建對象實例
            User user = new User();
            user.setName("張三");
            user.setAge(20);
            user.setBirthday(new Date());
            user.setDesc("一大段的說明,此處省略5000字……");
            user.setPhoto(photo);
            // 保存
            Session session = sessionFactory.openSession(); // 打開一個新的Session
            Transaction tx = session.beginTransaction(); // 開始事務
            session.save(user);
            tx.commit(); // 提交事務
            session.close(); // 關閉Session,釋放資源
        }
    }
    復制

    上面代碼就是把c盤根目錄的test.png圖片保存到了數據庫。 通過SQL查詢該字段可看到是二進制數據,那么證明保存成功。

    5、我們再把圖片讀取出來放在D盤下,取名copy.png

    photoTest.testGet():

    @Test
    public void testGet() throws Exception
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        User user = (User) session.get(User.class, 1); // 獲取
        System.out.println(user.getId());
        System.out.println(user.getName());
        System.out.println(user.getDesc());
        System.out.println(user.getPhoto());
    		
        OutputStream out = new FileOutputStream("D:/copy.png");
        out.write(user.getPhoto());
        out.close();
        tx.commit();
        session.close();
    }
    復制

    經測試成功運行………..

    關聯標簽:
    国产亚洲无线码在软件线,国产女人18毛一级毛片,亚洲中文综合手机版在线,国产另类综合一区导航,亚洲va韩国va欧美va久久下载,久久先锋男人资源网站
    五莲县花木有限公司 青田县竹木有限公司 邛崃市水果有限公司 康定市干草有限公司 马尔康市咖啡有限公司 眉山市餐饮有限公司
    眉山市动植物油有限公司 泸州市果仁有限公司 鄄城县养殖有限公司 莒县干果有限公司 西安市广告有限公司 宜宾市造纸有限公司
    攀枝花市餐饮有限公司 沂南县蔬菜有限公司 武威市养殖有限公司 乐山市设计有限公司 茌平县竹木有限公司 崇州市动植物油有限公司