在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis

  Mybatis鼓励使用Mapper动态代理的方式

  Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体等于Dao接口实现类方法。

1.编写Mapper.xml映射文件

<?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">

<!-- namespace必须和Mapper接口类路径一致 -->
<mapper namespace="cn.mybatis.mapper.UserMapper">

    <!-- 通过ID查询一个结果 -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        select * from user where id = #{id}
    </select>

    <!-- 通过用户名模糊查询 -->
    <select id="findUserByUsername" parameterType="String" resultType="cn.itcast.mybatis.po.User">
        select * from user where username like "%"#{username}"%"
    </select>

    <!-- 添加用户 -->
    <insert id="insert" parameterType="cn.itcast.mybatis.po.User">
        insert into user(username,sex,birthday,address)
            values(#{username},#{sex},#{birthday},#{address})
    </insert>

</mapper>

2.编写Mapper.java接口文件

public interface UserMapper {

    /**
     * 通过ID查询一个结果
     * @param id
     * @return
     */
    public User findUserById(int id);

    /**
     * 通过用户名模糊查询
     * @param username
     * @return
     */
    public List<User> findUserByUsername(String username);

    /**
     * 添加用户
     * @param user
     */
    public void insert(User user);

}

3.Mapper接口开发必须遵循的规范

  • 1.Mapper.xml文件中的【namespace】必须与Mapper.java接口【类路径】相同
  • 2.Mapper.java接口中的【方法名】必须与Mapper.xml中对应的【id】相同
  • 3.Mapper.java接口中的【入参】必须与Mapper.xml中对应的【parameter】相同
  • 4.Mapper.java接口中的【返回类型】必须与Mapper.xml中对应的【resultType】相同

4.在SqlMapConfig.xml中加载Mapper.xml映射文件

5.测试

public class UserServiceImpl {

    private SqlSessionFactory sqlSessionFactory;

    /**
     * 初始化工厂
     *
     * @throws Exception
     */
    @Before
    public void init() throws Exception {
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        this.sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 通过ID查询一个结果
     */
    @Test
    public void m01() {
        // 获取sqlSession,和Spring整理后由Spring管理
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        // 从sqlSession中获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 执行查询
        User user = userMapper.findUserById(10);
        System.out.println(user);

        // 和Spring整理后由Spring管理
        sqlSession.close();
    }

    /**
     * 通过用户名模糊查询
     */
    @Test
    public void m02() {
        // 获取sqlSession,和Spring整理后由Spring管理
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        // 从sqlSession中获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 执行查询
        List<User> list = userMapper.findUserByUsername("王五");
        for (User user : list) {
            System.out.println(user);
        }

        // 和Spring整理后由Spring管理
        sqlSession.close();
    }

    /**
     * 添加用户
     */
    @Test
    public void m03() {
        // 获取sqlSession,和Spring整理后由Spring管理
        SqlSession sqlSession = this.sqlSessionFactory.openSession();
        // 从sqlSession中获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        // 执行查询
        User user = new User();
        user.setUsername("添加User");
        user.setSex("男");
        user.setBirthday(new Date());
        user.setAddress("未知区域");

        userMapper.insert(user);

        // 和Spring整理后由Spring管理
        sqlSession.commit();
        sqlSession.close();

    }
}

02.MyBatis在DAO层开发使用的Mapper动态代理方式的更多相关文章

  1. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  2. 基于Mybatis的Dao层开发

    转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...

  3. Mybatis框架基础入门(三)--Mapper动态代理方式开发

    使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题: Dao方 ...

  4. Mybatis入门——基础方式的增删该查、mapper动态代理方式的CRUD、类型转换器

    一.基础方式的增删该查: 1.mybatis约定:输入参数parameterType和输出参数resulrType在形式上只能有一个. 2.如果输入/输出参数:是简单类型(8个基本类型加String) ...

  5. mybatis开发Dao的Mapper动态代理方式

    1. 开发规范Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体跟Dao原始方法中接口实现类的方法相 ...

  6. Mybatis之旅第二篇-Mapper动态代理方式

    一.引言 通过上一篇mybatis的入门学习,我们已经会使用mybatis实现简单的增删改查,但是我们也发现了用原始Dao开发的一些问题: Dao方法体存在重复代码:通过SqlSessionFacto ...

  7. Mybatis Mapper动态代理方式 typeAliases 别名的使用

    目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...

  8. 基于Mybatis的Dao层的开发

    基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...

  9. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

随机推荐

  1. NX二次开发-创建旋转UF_MODL_create_revolved

    NX9+VS2012 #include <uf.h> #include <uf_curve.h> #include <uf_modl.h> UF_initializ ...

  2. mysql数据库中的索引介绍与优化(转)

    一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表 ...

  3. Java-Class-@I:org.apache.ibatis.annotations.Mapper

    ylbtech-Java-Class-@I:org.apache.ibatis.annotations.Mapper 1.返回顶部   2.返回顶部 1. package com.ylbtech.ed ...

  4. LeetCode 707. Design Linked List (设计链表)

    题目标签:Linked List 题目让我们自己设计一个 linked list,可以是单向和双向的.这里选的是单向,题目并不是很难,但要考虑到所有的情况,具体看code. Java Solution ...

  5. sizeof,真正终结版GCC与VC

    在VC6.0中sizeof结果是16.我电脑上装了个linux虚拟机,在虚拟机上GCC中结果是12, 恩不同编译器默认对齐数值不一样. VC 默认为 8 gcc 默认为 4 有个编译参数控制对齐. # ...

  6. Python+Django+SAE系列教程6-----本地配置Django

    前五章.我们介绍了Python的语法,本章開始介绍Django. Python的Web框架有非常多,有Django.web2py.tornado.web.py等.我们这里选 则Django.至于这些框 ...

  7. [转载]ConcurrentHashMap之实现细节

    http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发.高吞吐量的线程安全HashMap实现.在这之前我对Concurrent ...

  8. 详解redis服务

    http://mp.weixin.qq.com/s?__biz=MzIyMDA1MzgyNw==&mid=2651968327&idx=1&sn=6e6cb01d334d7ae ...

  9. Python全栈开发:django网络框架(二)

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  10. 浏览器自带记忆功能,使input颜色和字体丢失

    方法一 : 会有视觉上颜色的变化input:-internal-autofill-selected { /*内置阴影填充 背景颜色*/ box-shadow: inset 0 0 0 1000px # ...