1、使用原始dao开发需要编写mapper的接口和实现类

  1、编写接口

  

public interface UserDao {User getUserById(int userId);
}

  2、编写实现类

public class UserDaoImpl implements UserDao {private SqlSessionFactory sqlSessionFactory;public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic User getUserById(int userId) {SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession.selectOne("test.selectUserById", 1);}}

  3、编写测试类

  

public class MybatisTest2 {private SqlSessionFactory sqlSessionFactory;@Beforepublic void getSqlSessionFactory() throws IOException {InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);}@Testpublic void Test() {UserDao userDao = new UserDaoImpl(sqlSessionFactory);User user = userDao.getUserById(1);System.out.println(user);}
}

2、在编写代码的过程中逐渐发现所有实现类的方方法体内的代码都是相似的,唯独不同的是调用SQLSession的方法不同。所以推荐使用mybatis的动态代理的方式来开发

3、mybatis动态代理开发有五点要求

  1、xml文件和接口必须在同一文件夹(包)下

  2、xml中的id和接口的方法名相同

  3、xml的namespace要和接口的全类名相同

  4、接口的返回值类型要和xml中的一致

  5、xml中的参数要和接口的参数相同

4、使用方式

  1、xml

  

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liuxianglin.mybatis.study.mapper.UserMapper">

<select id="getUserById" parameterType="int" resultType="user">SELECT * FROM `user` WHERE id = #{id};</select><select id="listUserByName" parameterType="QueryVo" resultType="userMap">SELECT * FROM `user` WHERE `username` LIKE CONCAT('%',#{user.userName},'%');</select><select id="getUserCount" resultType="int">SELECT COUNT(1) FROM `user`;</select>
</mapper>

  2、接口

  

public interface UserMapper {/*** 通过id查询用户数据*/User getUserById(int id);/*** 模糊查询数据*/List<User> listUserByName(QueryVo queryVo);/*** 查询用户条目数*/Integer getUserCount();
}  

  3、测试类

public class MybatisTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void getSqlSession() throws IOException {/*获得文件流*/InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");/*获取SQLSession工厂*/sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);}@Testpublic void test() {/*获取SQLSession连接*/SqlSession sqlSession = sqlSessionFactory.openSession();/*动态代理获取Mapper实现类*/UserMapper userMapper = sqlSession.getMapper(UserMapper.class);/*执行方法*/User user = userMapper.getUserById(1);System.out.println(user);}
}

转载于:https://www.cnblogs.com/l48x4264l46/p/10957735.html

mybatis基础_动态代理开发相关推荐

  1. MyBatis之Mapper动态代理开发

    MyBatis之Mapper动态代理开发 2017/9/30 1.SqlSession的使用范围 1.SqlSessionFactoryBuilder SqlSessionFactoryBuilder ...

  2. Mybatis中Mapper动态代理方式

    文章目录 开发规范 Mapper接口开发需要遵循以下规范 Mapper.xml(映射文件) UserMapper(接口文件) 加载UserMapper.xml文件 总结 selectOne和selec ...

  3. Mybaits之Mapper动态代理开发

    Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...

  4. Java基础:动态代理

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 概述 在运行时,动态创建一组指定的接口的实现类对象(代理对象)! 代理是实现AOP(面向切面编程)的核 ...

  5. 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)

    AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...

  6. java 委托_动态代理:Java开发必学

    一句话概括:java 动态代理通过反射机制,可在不修改原代码的情况下添加新的功能,应用于多种场景,简单.实用.灵活,是 java 开发必学知识,本文将对动态代理使用进行详细介绍. 1. 引言 最近开发 ...

  7. day19_java基础加强_动态代理+注解+类加载器

    一.动态代理 1.1.代理模式     什么是代理模式及其作用?         Proxy Pattern(即:代理模式),23种常用的面向对象软件的设计模式之一.         代理模式的定义: ...

  8. 第六周 Java语法总结_设计原则_工厂模式_单例模式_代理模式(静态代理_动态代理)_递归_IO流_网络编程(UDP_TCP)_反射_数据库

    文章目录 20.设计原则 1.工厂模式 2.单例模式 1)饿汉式 2)懒汉式 3.Runtime类 4.代理模式 1)静态代理 2)动态代理 动态代理模板 21.递归 22.IO流 1.File 2. ...

  9. mybatis-day02-CRUD、动态代理开发、核心xml详解、输入输出参数

    文章目录 一.今日内容 二.mybatis实现crud 2.1 搭建环境(配置文件参考a.网址)(顺便实现findAll查询) 目录结构: pom.xml User.java SqlMapConfig ...

  10. c++map的使用_mybatis源码 | mybatis插件及动态代理的使用

    学习背景 最近公司在做一些数据库安全方面的事情,如数据库中不能存手机号明文,不能存身份证号明文, 但是项目已经进行了好几个月了, 这时候在应用层面去改显然不太现实, 所以就有了Mybatis的自定义插 ...

最新文章

  1. 39 JavaScript中的严格模式
  2. linux下文件夹函数,如何从linux上的文件夹中找到一个函数
  3. optee堆Virtualization(hypervisor)的支持
  4. java怎么把随机数放入数组_Java学习:集合的使用与数组的区别
  5. linux创建crontab定时任务
  6. 神经网络的损失函数讲解
  7. SQl常用语句总结(持续更新……)
  8. linux编程两个子进程,Linux中fork同时创建多个子进程的方法
  9. [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法
  10. vue 获取数组索引_vue 重塑数组之修改数组指定index的值操作
  11. [Python] set()函数 创建一个无序不重复元素集
  12. 工作闲暇-曾经的“伪”前端+切图工作
  13. VBa运行c语言程序,Excel VBA编程详解
  14. PDF在线预览插件:PDFObject web端预览(不支持手机网页预览,手机网页预览见下一篇博客);
  15. 引用计数与可达性分析
  16. MD5算法原理及代码实现
  17. [CF1538E] Funny Substrings (模拟)
  18. 基于拉丁超立方抽样的风,光,负荷场景生成方法 风电功率场景生成 ,光伏功率场景生成,负荷场景生成
  19. 快手极速版库-----青龙面板----完整教学
  20. 计算机考证模拟运算表案例解析

热门文章

  1. js页面传值,cookie
  2. java线程池相关总结
  3. 大数据 Spark 架构
  4. 何时该开始写测试代码
  5. firebug的调试,console
  6. learning linux
  7. servlet,listener,filter,interceptor的关系
  8. SHA1withRSA加签名和验签名
  9. 解决安卓手机input获取焦点时会将底部固定定位按钮顶起的问题
  10. 30天React Native从零到IOS/Android双平台发布总结