1. mapper实现类代理对象开发
  2. 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则:
  3. SqlSession sqlSession = sqlSessionFactory.openSession();
  4. sqlSession.close();
  5. 2步好封装,代理类写死就可以了,以后自动生成就可以了。
  6. User user = sqlSession.selectOne("test.findUserById", id);不好封装,因为test.findUserById是变动的,难以通过代理自动生成。
  1. mapper.xml(UserMapper.xml)中namespace指定为mapper接口的全限定名
  2. <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
  3. 此步骤目的:通过mapper.xmlmapper.java(UserMapper.java)进行关联。
  4.  
  5. mapper.xmlstatementid就是mapper.java(UserMapper.java)中方法名
  6.  
  7. mapper.xmlstatementparameterTypemapper.java(UserMapper.java)中方法输入参数类型一致
  8.  
  9. mapper.xmlstatementresultTypemapper.java(UserMapper.java)中方法返回值类型一致.
  1. 1.1.1mapper.xmlUserMapper.xml映射文件)
  2. mapper映射文件的命名方式建议:表名Mapper.xml
  3. namespace指定为mapper接口的全限定名

  1. MapperUserMapper.java)接口
  2. mybatis提出了mapper接口,相当 dao 接口。
  3.  
  4. mapper接口的命名方式建议:表名Mapper

  1. 1.1.1mapper.xmlSqlMapConfig.xml中加载

  1. mapper接口返回单个对象和集合对象
  2. 不管查询记录是单条还是多条,在 statementresultType定义一致,都是单条记录映射的pojo类型。
  3. mapper接口方法返回值,如果是返回的单个对象,返回值类型是pojo类型,生成的代理对象内部通过selectOne获取记录,如果返回值类型是集合对象,生成的代理对象内部通过selectList获取记录。

测试:

  1. // 会话工厂
  2. private SqlSessionFactory sqlSessionFactory;
  3.  
  4. // 创建工厂
  5. @Before
  6. public void init() throws IOException {
  7.  
  8. // 配置文件(SqlMapConfig.xml)
  9. String resource = "SqlMapConfig.xml";
  10.  
  11. // 加载配置文件到输入 流
  12. InputStream inputStream = Resources.getResourceAsStream(resource);
  13.  
  14. // 创建会话工厂
  15. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  16.  
  17. }
  18.  
  19. @Test
  20. public void testFindUserById() throws Exception {
  21.  
  22. SqlSession sqlSession = sqlSessionFactory.openSession();
  23. // 创建代理对象
  24. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  25.  
  26. User user = userMapper.findUserById();
  27.  
  28. System.out.println(user);
  29.  
  30. }
  31.  
  32. @Test
  33. public void testFindUserByUsername() throws Exception {
  34.  
  35. SqlSession sqlSession = sqlSessionFactory.openSession();
  36. // 创建代理对象
  37. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  38.  
  39. List<User> list = userMapper.findUserByName("小明");
  40.  
  41. System.out.println(list);
  42.  
  43. }
  1. 返回值的问题
  2. 如果方法调用的statement,返回是多条记录,而mapper.java方法的返回值为pojo,此时代理对象通过selectOne调用,由于返回多条记录,所以报错:
  3.  
  4. org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found:
  5.  
  6. 输入参数的问题
  7. 使用mapper代理的方式开发,mapper接口方法输入参数只有一个,可扩展性是否很差??
  8.  
  9. 可扩展性没有问题,因为dao层就是通用的,可以通过扩展形参pojo(定义pojo包装类型)将不同的参数(可以是pojo也可以简单类型)传入进去。

mybatis10 实现类代理对象开发的更多相关文章

  1. mapper代理方式开发

    使用mapper代理方式开发: 需要编写mapper接口,UserMapper.java需要编写映射文件,UserMapper.xml需要遵循一些开发规范,mybatis便可以自动生成mapper接口 ...

  2. Spring AOP开发时如何得到某个方法内调用的方法的代理对象?

    Spring AOP开发时如何得到某个方法内调用的方法的代理对象? 问题阅读起来拗口,看代码 在方法中调用其他方法很常见,也经常使用,如果在一个方法内部调用其他方法,比如 public class U ...

  3. 在spring中获取代理对象代理的目标对象工具类

    昨天晚上一哥们需要获取代理对象的目标对象,查找了文档发现没有相应的工具类,因此自己写了一个分享给大家.能获取JDK动态代理/CGLIB代理对象代理的目标对象. 问题描述:: 我现在遇到个棘手的问题,要 ...

  4. 【iOS开发-72】设置状态栏的两种方式、程序生命周期以及更好地理解几大类(对象)之间的关系

    (1)设置状态栏的2种方式 --第一种方式就是我们在控制器中设置,系统默认就是交给视图控制器去管理的,这样不同视图控制器能够自己定义不同的状态栏例如以下: -(BOOL)prefersStatusBa ...

  5. 06-03 Java 面向对象思想概述、开发设计特征,类和对象的定义使用,对象内存图

    面向对象思想概述.开发设计特征 1:面向对象思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 2:面向对象的思想特点 A:是一 ...

  6. java开发中的常见类和对象-建议阅读时间3分钟

    1.Dao 数据访问对象 此对象用于访问数据库.实现类一般用于用于操作数据库! 一般操作修改,添加,删除数据库操作的步骤很相似,就写了一个公共类DAO类 ,修改,添加,删除数据库操作时 直接调用公共类 ...

  7. Python开发基础-Day17面向对象编程介绍、类和对象

    面向对象变成介绍 面向过程编程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西.主要应用在一旦完成很少修改的地方,如linux ...

  8. OC开发系列-类与对象

    面向对象 面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决.面向对象解决问题时首先要考虑需要找几个对象能解决这个问题. 常见的概念: * Object Oriented 面向对象 ...

  9. Spring框架学习笔记(7)——代理对象实现AOP

    AOP(面向切面编程) AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming ...

随机推荐

  1. 难搞的EXCHANGE重新安装错误

    Sample Exchange Setup Log III: [8/12/2010 2:59:38 AM] [1] [ERROR] Unable to remove product with code ...

  2. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  3. ORACLE数字转换人民币大写

    ORACLE 数字转换人民币大写     示例.   数字                    :183066999230.68 人民币大写        :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参 ...

  4. [LeetCode#218] The Skyline Problem

    Problem: A city's skyline is the outer contour of the silhouette formed by all the buildings in that ...

  5. word在线编辑\生成图片(包含截图与合并)

    1.业务原因 word编辑后的文章复制到html编辑器(fck等)会发生排版错乱的情况,于是混沌了.需要有一个新的方法来终结,于是产生了word能不能在线编辑,后台保存,前台显示灯一系列问题. 2.首 ...

  6. POJ_3181_Dollar_Dayz_(动态规划,完全部分和,完全背包)

    描述   http://poj.org/problem?id=3181 FJ有n元钱,有k种商品,各为1,2,...,k-1,k元,问有多少种花掉这n元钱的方法. Dollar Dayz Time L ...

  7. Android4.0 -- UI控件之 Menu 菜单的的使用(四)

    2.  PopupMenu 菜单的使用 1) PopupMenu 介绍   创建弹出菜单,它一般会在view的上边或者下边弹出菜单[具体看是否有空间],注意弹出菜单是api在11或者更高版本中使用   ...

  8. Android4.0 -- UI控件之 Menu 菜单的的使用(二)

    上一讲我们讲解了android中在代码或者xml文件中定义菜单,这一讲我们继续来讲解一下定义菜单的其他方式:创建上下文的菜单.查看API文档 Menus :Creating Contextual Me ...

  9. webbrowser控件事件

    Beforenavigate2: Fired before navigate occurs in the given WebBrowser(window or frameset element). T ...

  10. Linux下安装搜狗输入法

    目前的搜狗输入法 for Linux 是Linux Deepin 社区版的测试版,基于Fcitx 框架. 话不多说,直接上. 准备工作:卸载Ubuntu默认的ibus输入法: sudo apt-get ...