>Java >java지도 시간 >Hibernate 소개 및 예제

Hibernate 소개 및 예제

零下一度
零下一度원래의
2017-06-25 13:35:451627검색

1. Hibernate 소개

JdbcTemplate을 사용하여 SQL 문을 직접 실행할 필요는 없습니다. 이때 ORM 도구를 사용하면 많은 코드와 개발 시간을 절약할 수 있습니다. ORM 도구는 오류가 발생하기 쉬운 SQL 코드에서 애플리케이션의 실제 요구 사항을 구현하는 방법으로 초점을 전환할 수 있습니다.

Spring의 ORM 프레임워크 지원은 이러한 프레임워크 및 일부 추가 서비스와의 통합 지점을 제공합니다.

  • 통합 Spring 선언 트랜잭션 지원

  • 투명한 예외 처리, 스레드로부터 안전한 경량 템플릿 클래스;

  • DAO 지원 수업

  • 자원 관리.

  • Hibernate는 개발자 커뮤니티에서 매우 인기 있는 오픈 소스 ORM 프레임워크입니다.

2. Spring+Hibernate 인스턴스

1. 데이터베이스 테이블을 생성하고mysql을 생성하여 새 데이터베이스 저장소를 생성한 후 다음 sql을 실행합니다.

1 create table Category (2 Id int not null,3 Name varchar(80) null,4 constraint pk_category primary key (Id)5 );6 7 INSERT INTO category(id,Name) VALUES (1,'女装');8 INSERT INTO category(id,Name) VALUES (2,'美妆');9 INSERT INTO category(id,Name) VALUES (3,'书籍');
db_store.sql
2 . 코드 구조 me 사용된 IDE는 IdeaIU이고, 프로젝트는 maven을 통해 빌드되었으며, spring은 xml을 통해 구성되었습니다. 완성된 코드 구조는 다음과 같습니다.

3. 항목 클래스 Category

Hibernate 소개 및 예제

class Category{
    private int cateId;

    private String cateName;

    //次数省略get,set方法
@Override
    public String toString() {
        return "id="+cateId+" name="+cateName;
    }
}

 

4를 수정하고 관련 종속성을 도입합니다.

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.5.Final</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
    </dependencies>

 

5. applicationContext.xml 구성

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/tx ">


    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/store"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

    <bean id="sessionFactory"
          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:hibernate/hibernate.cfg.xml"/>
    </bean>

    <tx:annotation-driven/>
    <bean id="transactionManager"
          class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="categoryDao" class="CategoryDao">
        <constructor-arg ref="sessionFactory"></constructor-arg>
    </bean>
</beans>

 

dataSource는 특별한 것이 아니므로 여기서는 설명하지 않겠습니다. 몇 가지 다른 점을 살펴보십시오.

①hibernate sessionFactory:

Hibernate를 사용하는 데 필요한 주요 인터페이스는 org.hibernate.Session입니다. Session 인터페이스는 CRUD와 같은 가장 기본적인 데이터 액세스 기능을 제공합니다. Hibernate의 Session 인터페이스를 통해 애플리케이션의 저장소는 모든 지속성 요구를 충족할 수 있습니다. Hibernate Session 객체를 얻는 표준 방법은 Hibernate SessionFactory 인터페이스의 구현 클래스를 사용하는 것입니다. sessionFactory 구성에는 두 가지 주요 속성이 설정되어 있습니다. dataSource는 데이터 연결을 설정하고 configLocation은 최대 절전 모드 구성 파일의 경로를 설정합니다.

②트랜잭션

데이터베이스 작업이 트랜잭션을 지원하는 경우 6.hibernate 구성

①hibernate.cfg.xml

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>
        <!DOCTYPE hibernate-configuration PUBLIC
                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <mapping resource="hibernate/Category.hbm.xml"/>
</session-factory>
</hibernate-configuration>

 

②Category.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="Category" table="Category">
        <id name="cateId" column="id">
            <generator class="native"/>
        </id>
        <property name="cateName" column="name"/>
    </class>
</hibernate-mapping>

 

7. 메서드가 트랜잭션을 지원하려고 하면 @Transactional이라는 주석을 달아야 합니다.

public class CategoryDao {
    private SessionFactory sessionFactory;

    public CategoryDao(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    private Session currentSession() {
        return sessionFactory.getCurrentSession();
    }

    @Transactional
    public void save(Category category) {
        currentSession().save(category);
    }

    @Transactional
    public void update(Category category){
        currentSession().update(category);
    }

    @Transactional
    public void delete(int id) {
        Query query = currentSession().createSQLQuery("DELETE FROM category WHERE Id=::ID");
        query.setInteger("::ID", id);
        query.executeUpdate();
    }

    @Transactional
    public int count() {
        return getAll().size();
    }

    @Transactional
    public Category getById(int id) {
        Criteria criteria=currentSession().createCriteria(Category.class);
        criteria.add(Restrictions.eq("id",id));
        return (Category) criteria.uniqueResult();
    }

    @Transactional
    public List<Category> getAll() {
        return currentSession().createCriteria(Category.class).list();
    }
}

 

8. 테스트

@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class testCategoryDao {
    @Autowired
    private CategoryDao categoryDao;

    @Test
    public void testAdd() {
        Category category = new Category();
        category.setCateId(4);
        category.setCateName("母婴");

        categoryDao.save(category);
    }

    @Test
    public void testUpdate() {
        Category category = new Category();
        category.setCateId(4);
        category.setCateName("男装");

        categoryDao.update(category);
    }


    @Test
    public void testGetById() {
        int id = 4;
        Category category = categoryDao.getById(id);

        if(category==null){
            System.out.println("not exist");
        }else {
            System.out.println(category.toString());
        }
    }

    @Test
    public void testGetAll() {
        List<Category> categories = categoryDao.getAll();
        for (Category item : categories) {
            System.out.println(item);
        }
    }

    @Test
    public void testCount() {
        int count = categoryDao.count();
        System.out.println(count);
    }

    @Test
    public void testDelete() {
        int id = 4;
        categoryDao.delete(id);
    }
}

위 내용은 Hibernate 소개 및 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.