项目地址:
https://github.com/FateSolo/DAO-Test
目录:
该系列文章将展示六种不同的DAO层实现方法并总结其不同,本章使用Hibernate框架完成DAO操作。
1. 示例代码:
1) 在spring-common.xml中,配置Hibernate:1
2
3
4
5
6
7
8
9
10
11
12
13
14<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.fatesolo.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
注释掉原先的事务管理器txManager,并配置Hibernate的事务管理器transactionManager1
2
3
4
5
6<!-- 配置 Hibernate 事务 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
2) 在build.gradle中,添加Hibernate依赖:1
compile 'org.hibernate:hibernate-core:5.2.7.Final'
3) 在dao.impl包中创建BookDaoHibernateImpl.java,编写如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35package com.fatesolo.dao.impl;
import com.fatesolo.dao.BookDao;
import com.fatesolo.entity.Book;
import org.hibernate.SessionFactory;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository("bookDaoHibernateImpl")
public class BookDaoHibernateImpl implements BookDao {
@Resource
private SessionFactory sessionFactory;
@Override
public Book findById(int id) {
return sessionFactory.getCurrentSession().get(Book.class, id);
}
@Override
public List<Book> findByNameContaining(String name) {
return sessionFactory.getCurrentSession()
.createQuery("from Book where name like ?", Book.class)
.setParameter(0, "%" + name + "%")
.list();
}
@Override
public void save(Book book) {
sessionFactory.getCurrentSession().save(book);
}
}
4) 打开Book.java,修改代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52package com.fatesolo.entity;
import javax.persistence.*;
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String author;
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 String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
}
5) 打开BookService.java,修改成员变量bookDao的注解:1
@Resource(name = "bookDaoHibernateImpl")
2. 项目运行:
1) 使用Tomcat 8运行项目,使用curl工具添加一条数据:1
curl -d "name=Test4&author=Fate" http://localhost:8080/book
得到如下返回:1
Book{id=4, name='Test4', author='Fate'}
2) 访问http://localhost:8080/book/4 ,得到如下结果:1
Book{id=4, name='Test4', author='Fate'}
3) 访问http://localhost:8080/book/name/Test ,得到如下结果:1
[Book{id=1, name='Test1', author='Fate'}, Book{id=2, name='Test2', author='Fate'}, Book{id=3, name='Test3', author='Fate'}, Book{id=4, name='Test4', author='Fate'}]
3. 总结
Hibernate是经典的ORM框架,使用Hibernate,彻底完成了实体与表的映射,开发者无需再编写sql (某些情况下仍需要编写少量的hql语句)。
作者 [@FateSolo]
2017 年 03月 12日