Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。

Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,只需要 编写mapper接口 和 Mappe.xml 配置文件即可。

程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

开发规范

- Mapper接口开发需要遵循以下规范:

① Mapper.xml文件中的namespace与mapper接口的全类名相同。

② Mapper接口方法名和Mapper.xml中定义的statement的id相同。

③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的parameterType的类型相同。

④ Mapper接口方法的输出参数类型和mapper.xml中定义的statement的resultType的类型相同。

- 注意:

mapper动态代理开发中,根据返回值类型自动选择selectOne与selectList

Mapper动态代理示例演示

Mapper接口和Mapper.xml配置文件在同一个包下,并且名称保持一致

① Mapper接口

- map接口中的方法名必须和配置文件中的id属性值是一致的。

package com.sikiedu.mapper;

import java.util.List;

import com.sikiedu.beans.User;
import com.sikiedu.beans.UserVo; public interface UserMapper { // 根据ID查询用户
public User selectUserById(Integer id); // 根据用户名模糊查询用户
public List<User> selectUserLikeUsername(String username); // 同过包装类UserVo查询用户
public User selectUserByUserVoId(UserVo vo); // 查询用户总条数
public Integer selectUserCount(); }

② 定义mapper映射文件

- namespace必须对应着map接口的全类名。

<?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.sikiedu.mapper.UserMapper">
<!-- 注意这里的 namespace必须对应着map接口的全类名-->
<!-- 查询用户 -->
<select id="selectUserById" parameterType="Integer" resultType="com.sikiedu.beans.User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="selectUserLikeUsername" parameterType="String" resultType="User">
<!-- SELECT * FROM coke.user WHERE username LIKE '%${value}%' -->
SELECT * FROM user WHERE username LIKE "%"#{username}"%"
</select> <!-- 同过包装类UserVo查询用户 -->
<select id="selectUserByUserVoId" parameterType="UserVo" resultType="user">
SELECT * FROM user WHERE id = #{id}
</select> <!-- selectUserCount -->
<select id="selectUserCount" resultType="Integer">
SELECT COUNT(*) FROM user
</select> </mapper>

③ 在SqlMapConfig.xml中加入映射文件

<!--配置映射器的位置 -->
<mappers>
<!-- 单个配置 -->
<!-- <mapper resource="com/sikiedu/mapper/UserMapper.xml" /> -->
<!-- <mapper url="file:\\\D:\Java\WorkSpace\JavaEE_SSM_Test\ssm_mybatis\src\com\sikiedu\mapper\UserMapper.xml" /> -->
<!-- <mapper class="com.sikiedu.mapper.UserMapper" /> -->
<!-- 多配置-以包的形式;推荐使用 -->
<package name="com.sikiedu.mapper" />
</mappers>

④ 测试代码

package com.sikiedu.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import com.sikiedu.beans.Role;
import com.sikiedu.beans.RoleVo;
import com.sikiedu.beans.User;
import com.sikiedu.beans.UserVo;
import com.sikiedu.mapper.RoleMapper;
import com.sikiedu.mapper.UserMapper; public class MapperTest { private SqlSessionFactory ssf; @Before
public void getSqlSessionFactory() throws Exception { // 读取配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource); // 需要sqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder(); // 创建sqlSessionFactory
ssf = ssfb.build(in);
} @Test // 根据ID查询用户
public void Test_selectUserById() throws IOException { // 生产一个sqlSession
SqlSession sqlSession = ssf.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.selectUserById(3);
System.out.println(user); } @Test // 根据用户名模糊查询用户
public void Test_selectUserLikeUsername() throws IOException { // 生产一个sqlSession
SqlSession sqlSession = ssf.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectUserLikeUsername("");
for (User user : users) {
System.out.println(user);
} } @Test // 同过包装类UserVo查询用户
public void Test_selectUserByUserVoId() throws IOException { // 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
// 操作数据库
UserVo vo = new UserVo();
// vo.setId(44);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectUserByUserVoId(vo);
System.out.println(user);
} @Test // 查询用户总条数
public void Test_selectUserCount() throws IOException { // 生产一个sqlSession
SqlSession sqlSession = ssf.openSession();
// 操作数据库
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Integer userCount = mapper.selectUserCount();
System.out.println(userCount);
} }

MyBatis - Mapper动态代理开发的更多相关文章

  1. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  2. Mybatis框架三:DAO层开发、Mapper动态代理开发

    这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...

  3. MyBatis使用Mapper动态代理开发Dao层

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

  4. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  5. Mybatis(五)Spring整合Mybatis之mapper动态代理开发

    要操作的数据库: IDEA创建的Java工程,目录结构如下: 一.导包 1.spring的jar包 2.Mybatis的jar包 3.Spring+mybatis的整合包. 4.Mysql的数据库驱动 ...

  6. Mybaits之Mapper动态代理开发

    Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...

  7. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

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

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

  9. Spring 整合Mybatis Mapper动态代理方法

    先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...

随机推荐

  1. css3 动画属性

    transition Internet Explorer 9 以及更早版本的浏览器不支持 transition 属性. Internet Explorer 10.Firefox.Opera 和 Chr ...

  2. iOS开发系列-应用程序之间跳转

    概述 常见的涉及到应用程序之间的跳转场景,比如社交分享.支付宝.微信支付.链接跳转到应用. 在iOS中应用跳转的本质:打开一个应用只需要拿到对应应用的URL即可. 统一资源定位符 URL(统一资源定位 ...

  3. JS对象 返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天。如果要返回相对应“星期”,通过数组完成

    返回星期方法 getDay() 返回星期,返回的是0-6的数字,0 表示星期天.如果要返回相对应"星期",通过数组完成,代码如下: <script type="te ...

  4. gmock 简单笔记

    std::shared_ptr<MockThreadRCInvester> spMockaAcc; HelperThreadRCInvester helperAcc; // spMockA ...

  5. openwrt xfrp移植

    对开源软件表示支持 https://github.com/KunTengRom/xfrp 上传编译,选择 cp .config xxx make 刷机 客户端配置文件: /tmp/etc# cat x ...

  6. log4j2 按日期分割,自动清理历史文件

    方式一:定义CronTriggeringPolicy <?xml version="1.0" encoding="UTF-8"?> <Conf ...

  7. Java 基础 - Exception和Error

    综述 Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基 ...

  8. linux学习(五)-----组管理和权限管理

    Linux 组基本介绍 在 linux 中的每个用户必须属于一个组,不能独立于组外.在 linux 中每个文件有所有者.所在组.其它组的概念. 1)所有者 2)所在组 3)其它组 4)改变用户所在的组 ...

  9. STM32 STM32F4 寄存器怎么配置不上, 无法往寄存器写入数据

    当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开. 配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“R ...

  10. KVM桥接网络

    1.什么是桥接网络 桥接网络:是指直接连接物理网络 桥接与NAT的区别:NAT是通过共享主机ip的方式进行上网,在你本地局域网内,别人是无法看到的:而桥接网络,是虚拟机通过dhcp的方式获取一个ip地 ...