Mybatis学习第二天——mapper的动态代理

传统的Dao层开发通过接口与实现类的方式,Mybatis中通过mapper动态代理是需要定义接口。

1.传统Dao层封装

那么可以将公共资源提取出来,剩余的封装成方法来实现。下面是UserDaoImpl.java中对查询的简单封装

 1 package com.mybatis.dao.impl;
 2
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.apache.ibatis.session.SqlSessionFactory;
 5
 6 import com.mybatis.dao.UserDao;
 7 import com.mybatis.pojo.User;
 8
 9 public class UserDaoImpl implements UserDao {
10
11     //没有导入Spring,采用传参的方式获取
12     SqlSessionFactory sqlSessionFactory ;
13
14     public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
15         super();
16         this.sqlSessionFactory = sqlSessionFactory;
17     }
18
19     @Override
20     public User findUserById(Integer id) {
21         SqlSession sqlSession = sqlSessionFactory.openSession();
22         User user = sqlSession.selectOne("test.findUserById",id);
23
24         sqlSession.close();
25         return user;
26     }
27
28 }

在测试中通过加载公共资源,确定调用的mapper文件(此时表示User.xml)

 1 @Test
 2     public void testName() throws Exception {
 3         /**
 4          *   1. 创建SqlSessionFactoryBuilder对象
 5              2. 加载SqlMapConfig.xml配置文件
 6              3. 创建SqlSessionFactory对象
 7              4. 创建SqlSession对象
 8              5. 执行SqlSession对象执行查询,获取结果User
 9              6. 打印结果
10              7. 释放资源
11          */
12         String resource = "SqlMapConfig.xml";
13         InputStream in = Resources.getResourceAsStream(resource);
14
15         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
16
17         UserDao userdao = new UserDaoImpl(sqlSessionFactory);
18
19         User user = userdao.findUserById(1);
20
21         System.out.println(user.getUsername());

2.mapper动态代理模式

UserMapper um = sqlSession.getMapper(UserMapper.class);获取代理,传入的值为创建的动态代理接口

(个人理解,有误希望指正)

在UserMapper接口中,创建的方法需要满足以下四个原则Mybatis才能进行动态代理操作:

1 public interface UserMapper {
2     //四大原则
3     //1.接口中的方法名与User.xml中对应的id名一致
4     //2.方法中的返回类型与User.xml中的一致
5     //3.传入的参数类型一致
6     //4.命名空间绑定此接口
7     public User findUserById(Integer id);
8 }

前三个好理解,方法的名字,返回类型,参数类型与User.xml文件中的属性一致。命名空间绑定此接口,只需要在namesapce上用接口的全路径。如下:

注意:User.xml一定要在核心配置SqlMapConfig.xml中加载

3.mapper映射器

1     <mappers>
2         <!-- 第一种方式只需指定mapper文件路径即可 -->
3         <mapper resource="sqlmap/User.xml"/>
4         <mapper resource="sqlmap/UserMapper.xml"/>
5         <!-- 第二种方式,需对应接口的路径,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 -->
6         <mapper class="com.mybatis.mapper.UserMapper"/>
7         <!-- 第三种方法,指定接口文件的包名,同时mapper文件名需与接口名一致,文件位置必须在同一目录下 -->
8         <package name="com.mybatis.mapper"/>
9     </mappers>

推荐使用第三种方式。

原文地址:https://www.cnblogs.com/lisd/p/10263098.html

时间: 2024-10-19 16:43:51

Mybatis学习第二天——mapper的动态代理的相关文章

(转)Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring

Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring Mybatis在与Spring集成的时候可以配置MapperFactoryBean来生成Mapper接口的代理. 例如 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInte

【MyBatis学习04】mapper代理方法开发dao

上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤. 使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件 需要编写mapper接口(相当于dao接口) 从做的工作来看,使用mybatis中使用mapper代理来开发dao会很方便,完全不需要我们去写具体的实现类,只需要写出接口即可,但是接口

MyBatis学习13-MyBatis使用mapper代理DAO方法进行开发

1.基本思路 需要编写mapper接口和mapper.xml映射文件.编写mapper接口需要遵循一些开发规范,从而让mybatis可以自动生成mapper接口实现类代理对象. a.在mapper.xml中namespace等于mapper接口地址 b.mapper.java接口中的方法名和mapper.xml中statement的id一致 c.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致 d.mapper.j

mybatis学习笔记,mapper代理方法的使用

一.开发人员需要完成的任务: mapper.xml映射文件和mapper.java 二.开发规范 1.在mapper.xml中namespace等于mapper接口地址. 2.mapper.java接口中的方法名和mapper.xml中statement的id一致 3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致. 4.mapper.java接口中的方法返回值类型和mapper.xml中statement的re

MyBatis学习(三)、动态SQL语句

三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysql的函数生成Id.这时我们可以使用动态sql. 下文均采用mysql语法和函数(例如字符串链接函数CONCAT). 3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列.在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键.使

mybatis快速入门(八)-spring-mybatis动态代理整合

将上一节的代码改造下就好了,不过这一章会加一个basedaomapper.废话不多说直接上代码了. 创建一个BaseDaoMapper.java package cn.my.sm.mapper; /** * 将公用方法提取出来 * @author Administrator * * @param <T> */ public interface BaseDaoMapper<T> { public T findById(int id); } 为了防止和上个UserDao有冲突,我们创建

ORM简介 &amp;&amp; MyBatis和Hibernate的不同 &amp;&amp; 动态代理简单实现Mybatis基本使用

ORM简介 对象关系映射. ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中. 只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中.当前ORM框架主要有五种:Hibernate(Nhibernate),iBATIS,mybatis,EclipseLink,JFinal. ORM是通过使用描述对象和数据库之间映射的元数据,在我们想到描述的时候

java动态代理原理及解析

代理:设计模式 代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性. java动态代理的类和接口(jdk1.6源码) 1,java.lang.reflect.Proxy:动态代理机制的主类,提供一组静态方法为一组接口动态的生成对

java动态代理框架

java动态代理是一个挺有意思的东西,他有时候可以被使用的很灵活.像rpc的调用,调用方只是定义的一个接口,动态代理让他匹配上对应的不同接口:mybatis内部的实现,编码时,只是实现了mapper层的接口和sql的xml的配置,动态代理把他们连起来.记得之前在一家公司,他们使用thrift做rpc的解决方案,每个项目都得管理thrift的连接和关闭,代码考来考去,在spring下还得不断new对象.后来参照mybatis的实现方式,使用动态代理,做成spring注入的方式,方便很多,程序员只需