Danial7777777

导航

hibernate入门

package com.hello;

public class Account {
    
    private int id;
    private String name;
    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;
    }

}
package com.hello;

import java.util.HashSet;
import java.util.Set;

public class User {
    private int id;
    private String name;
    private String desc1;
    private byte[] photo;
    
    private Set<Account> accounts=new HashSet<Account>();
    
    private Set<String> addresses=new HashSet<String>();    
    
    public Set<String> getAddresses() {
        return addresses;
    }
    public void setAddresses(Set<String> addresses) {
        this.addresses = addresses;
    }
    public Set<Account> getAccounts() {
        return accounts;
    }
    public void setAccounts(Set<Account> accounts) {
        this.accounts = accounts;
    }
    public byte[] getPhoto() {
        return photo;
    }
    public void setPhoto(byte[] photo) {
        this.photo = photo;
    }
    public String getDesc1() {
        return desc1;
    }
    public void setDesc1(String desc) {
        this.desc1 = desc;
    }
    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;
    }
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.hello">
    <!-- 
        name属性:哪个类
        table属性:对应哪个表,如果不写,默认的表名就是类的简单名称
    -->
    <class name="Account" table="t_account">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="name"  not-null="true"/> 
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.hello">
    <!-- name属性:哪个类 table属性:对应哪个表,如果不写,默认的表名就是类的简单名称 -->
    <class name="User" table="t_user">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="name" not-null="true" />
        <property name="desc1" column="desc1" />
        <property name="photo" column="photo" length="102400" />
        <set name="accounts" inverse="true">
            <key column="uid"></key>
            <one-to-many class="com.hello.Account" />
        </set>
        <!-- sort="natural" -->
        <set name="addresses" table="user_address"  order-by="address DESC">
            <key column="uid"></key>
            <element type="string" column="address"></element>
        </set>
    </class>
</hibernate-mapping>
package com.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.EnumSet;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.Test;

import com.hello.Account;
import com.hello.User;

public class HelloTest {

    private static SessionFactory sessionFactory;

    static {
        sessionFactory = new Configuration()
        .configure() // 读取配置文件
        .buildSessionFactory();
    }

    // 根据配置生成表结构
    @Test
    public void test() {
        //hibernate 3.0版本的
        /*  Configuration cfg = new Configuration().configure();
        SchemaExport schemaExport = new SchemaExport(cfg);

        // 第一个参数script的作用: print the DDL to the console
        // 第二个参数export的作用: export the script to the database
        schemaExport.create(true, true);*/

        //hibernate 5.0
        Configuration conf = new Configuration().configure();//1、读取配置文件
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
    }

    @Test
    public void hello(){
        byte[] photo = null ;
        try {
            InputStream in=new FileInputStream("C://Users//Administrator//Desktop//1.jpg");
            photo = new byte[in.available()];
            in.read(photo);
            in.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("图片导入流失败!");
        }


        Session session=sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        User user=new User();
        user.setId(1);
        user.setName("a");
        user.setPhoto(photo);
        Account account=new Account();
        account.setId(1);
        account.setName("1");
    user.getAccounts().add(account);
        //    user.getAddresses().add("天安门");
        //    user.getAddresses().add("故宫");
        session.save(account);
        session.save(user);
        
        tx.commit();
        
        Session session2=sessionFactory.openSession();
        Transaction tx2= session2.beginTransaction();
        User user2 = session.get(User.class, 3);
        System.out.println(user2.getAccounts());
        tx2.commit();
    }
/**
     * 测试状态转化持久态
     */
    @Test
    public void state(){
        Session session=sessionFactory.openSession();
        session.beginTransaction();
        Account account = session.get(Account.class, 1);
        System.out.println(account.getName());
        //清除缓存
//        session.clear();
        account.setName("update1");
        session.update(account);//变为持久态
//        session.flush();//强制打印sql
        session.getTransaction().commit();
        session.close();
    } @Test
public void testGet(){ Session session=sessionFactory.openSession(); Transaction tx = session.beginTransaction(); User user = session.get(User.class, 1); System.out.println(user.getName()); System.out.println(user.getAddresses()); } }

 

posted on 2018-07-21 14:43  Danial7777777  阅读(200)  评论(0编辑  收藏  举报