zoukankan      html  css  js  c++  java
  • 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>

    推荐使用第三种方式。

  • 相关阅读:
    理解 CSS3中 object-fit
    CSS布局总结(一)
    Webpack 学习记录之概念
    python中深浅拷贝
    Vue中的动画封装
    Vue中的列表过渡
    Vue中多个元素或组件的过渡
    Vue中的Js动画与Velocity.js 的结合
    在Vue中同时使用过渡和动画
    在Vue中使用 animate.css 库
  • 原文地址:https://www.cnblogs.com/lisd/p/10263098.html
Copyright © 2011-2022 走看看