DAO层实现示例 三:Mybatis框架


项目地址:
https://github.com/FateSolo/DAO-Test

目录:

该系列文章将展示六种不同的DAO层实现方法并总结其不同,本章使用Mybatis框架完成DAO操作。

1. 示例代码:

1) 在spring-common.xml中,配置Mybatis:

1
2
3
4
5
6
7
8
9
10
11
<!-- Mybatis -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="typeAliasesPackage" value="com.fatesolo.entity"/>
<property name="mapperLocations" value="classpath:mapper/*Impl.xml"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.fatesolo.dao.impl"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

2) 在build.gradle中,添加Mybatis依赖:

1
compile 'org.mybatis:mybatis:3.4.2'
compile 'org.mybatis:mybatis-spring:1.3.1'

3) 在dao.impl包中创建BookDaoMybatisImpl.java,编写如下代码:

1
2
3
4
5
6
7
8
package com.fatesolo.dao.impl;

import com.fatesolo.dao.BookDao;
import org.springframework.stereotype.Repository;

@Repository("bookDaoMybatisImpl")
public interface BookDaoMybatisImpl extends BookDao {
}

4) 在Resource文件夹下添加子目录mapper,创建并编写BookDaoMybatisImpl.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.fatesolo.dao.impl.BookDaoMybatisImpl">

<select id="findById" parameterType="int" resultType="Book">
select id, name, author from book where id = #{id}
</select>

<select id="findByNameContaining" parameterType="java.lang.String" resultType="Book">
select id, name, author from book where name like concat('%', #{name}, '%')
</select>

<insert id="save" parameterType="Book" useGeneratedKeys="true" keyProperty="id">
insert into book(name, author) values(#{name}, #{author})
</insert>

</mapper>

5) 打开BookService.java,修改成员变量bookDao的注解:

1
@Resource(name = "bookDaoMybatisImpl")

2. 项目运行:

1) 使用Tomcat 8运行项目,使用curl工具添加一条数据:

1
curl -d "name=Test3&author=Fate" http://localhost:8080/book

得到如下返回:

1
Book{id=3, name='Test3', author='Fate'}

2) 访问http://localhost:8080/book/3 ,得到如下结果:

1
Book{id=3, name='Test3', 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'}]

3. 总结

Mybatis是轻量级的持久层框架,通过在xml文件中编写sql并与Mapper接口映射,完成DAO层操作。

可以看到使用Mybatis,开发者无需再手动建立实体与表的关系,Mybatis会自动完成实体成员变量与表字段的映射,具备了ORM特性,但仍需要手动编写sql。


作者 [@FateSolo]
2017 年 03月 12日