MyBatis - Mapper动态代理开发
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动态代理开发的更多相关文章
- JavaWeb_(Mybatis框架)Mapper动态代理开发_三
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- Mybatis框架三:DAO层开发、Mapper动态代理开发
这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...
- MyBatis使用Mapper动态代理开发Dao层
开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...
- MyBatis开发Dao的原始Dao开发和Mapper动态代理开发
目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...
- Mybatis(五)Spring整合Mybatis之mapper动态代理开发
要操作的数据库: IDEA创建的Java工程,目录结构如下: 一.导包 1.spring的jar包 2.Mybatis的jar包 3.Spring+mybatis的整合包. 4.Mysql的数据库驱动 ...
- Mybaits之Mapper动态代理开发
Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...
- 【Mybatis】-- Mapper动态代理开发注意事项
1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...
- Mybatis Mapper动态代理方式 typeAliases 别名的使用
目录结构及配置文件与原始dao方法相比更简便 只需一个UserMapper的接口,放在一起的配置文件,配置文件中namespace的地址确定jdk动态代理的对象 <?xml version=&q ...
- Spring 整合Mybatis Mapper动态代理方法
先看项目目录结构 很清爽了 最重要的Spring的核心配置文件,看一下 <?xml version="1.0" encoding="UTF-8"?> ...
随机推荐
- 判断APP是否已安装
NSString *str = [NSString stringWithFormat:@"%@://%@",[dic objectForKey:@"ios_url_sch ...
- 添加ASP.NET AJAX控件工具集到VS2010的方法
在VS2010中Ajax控件只有5个,其实还有很多支持AJAX特定功能的服务器控件,微软是将这些控件当作开放源代码项目.所以没有集成到VS2010中.这些AJAX控件被称为ASP.NET AJAX控件 ...
- 重写(Overriding)和重载(Overloading)
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式. (1)方法重载是一个类中定义了多 ...
- [JZOJ3690] 【CF418D】Big Problems for Organizers
题目 题目大意 给你一棵树,然后有一堆询问,每次给出两个点. 问所有点到两个点中最近点的距离的最大值. 正解 本来打了倍增,然后爆了,也懒得调-- 显然可以在两个点之间的路径的中点处割开,一边归一个点 ...
- vue cli2.x配置多环境打包
一.安装 npm install --save-dev cross-env 二.配置步骤 1.修改config下的文件 //test.env.js 'use strict' module.export ...
- type元类创建类的方法
一.代码 class_name='car' dict_name={} bases=(object,) class_body=''' def __init__(self,name): self.name ...
- C# GZipStream 压缩 解压
关于GZipStream压缩解压,网上找了很多资料,完整的不多,要么是针对字符串压缩解压缩的,要么只实现了针对单个文件的压缩解压缩,还有的不支持子文件夹的压缩,实用性都不是很大. 以下整理了压缩解压缩 ...
- Java集合综述
Java集合图,虚线框为接口,实线框是具体的类 具体实现类 基本使用 (1)List: List基本操作 ArrayList<String> arrayList = new ArrayLi ...
- node.js在ubuntu上和windows上的安装
Ubuntu 上安装 Node.js Node.js 源码安装 以下部分我们将介绍在Ubuntu Linux下安装 Node.js . 其他的Linux系统,如Centos等类似如下安装步骤. 在 G ...
- PAT甲级——A1125 Chain the Ropes【25】
Given some segments of rope, you are supposed to chain them into one rope. Each time you may only fo ...