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. VMware 安装android-x86系统。

    首先先安装 VMware 虚拟机,并下载 android-x86_64-8.1-r2.iso 系统. VMware安装完成后,打开VMware Workstation,单击“创建新的虚拟机”,或者在菜 ...

  2. Ubuntu18.04 安装搜狗拼音

    参考文章:https://blog.csdn.net/fx_yzjy101/article/details/80243710 1. 安装fcitx sudo apt-get install fcitx ...

  3. protobuf文档翻译-安装,数据格式及编码规范

    Install Download protobuf: https://github.com/protocolbuffers/protobuf/releases unzip protoc-3.8.0-l ...

  4. Android开发 DialogFragment对话框详解

    前言 在聊DialogFragment之前,我们看看以往我们在Android里实现一个对话框一般有这几种方式: Dialog 继承重写Dialog实现一个自定义的Dialog AlertDialog ...

  5. js里json和eval()

    JSON * - JS中的对象只有JS自己认识,其他的语言都不认识 * - JSON就是一个特殊格式的字符串,这个字符串可以被任意的语言所识别, * 并且可以转换为任意语言中的对象,JSON在开发中主 ...

  6. hdu6089 Rikka with Terrorist

    题意:n*m的平面内有K个不安全点,Q个询问位置在(x,y)的人能走到多少个点?走到:(x,y)和(x',y')之间的矩形中不包含不安全点. 标程: #include<bits/stdc++.h ...

  7. CSS——垂直居中

    vertical-align 垂直对齐 以前我们讲过让带有宽度的块级元素居中对齐,是margin: 0 auto; 以前我们还讲过让文字居中对齐,是 text-align: center; 但是我们从 ...

  8. thinkphp 三元运算

    模板可以支持三元运算符,例如: {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']} 注意:三元运算符中暂时不支持点语法. ...

  9. [SNOI 2017] 炸弹

    题目描述: 给定炸弹和爆炸范围,求对于每个炸弹连锁爆炸的炸弹总和对\(1e9+7\)取膜 思路: 为啥都是线段树+TS+tarjan呢? 实在是搞不懂~~ 线性\(O(n)\)递推即可. #inclu ...

  10. Linux和Windows下ping命令详解

    转:http://linux.chinaitlab.com/command/829332.html 一.Linux下的ping参数 用途 发送一个回送信号请求给网络主机. 语法 ping [ -d] ...