mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目。mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。

其中,开发dao有两种方法,一种原始的dao开发方法,程序员需要写dao接口和dao实现类。另一种是mapper代理方法,程序员只需要写mapper接口相当于dao接口。

原始dao开发方法

1.编写dao接口(UserDao)

[java] view plaincopy
  1. public interface UserDao {
  2. // 根据id查询用户信息
  3. public User findUserById(int id) throws Exception;
  4. }

2.编写dao实现类

[java] view plaincopy
  1. public class UserDaoImpl implements UserDao {
  2. // 需要向dao实现类中注入SqlSessionFactory
  3. // 这里通过构造方法注入
  4. private SqlSessionFactory sqlSessionFactory;
  5. public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  6. this.sqlSessionFactory = sqlSessionFactory;
  7. }
  8. @Override
  9. public User findUserById(int id) throws Exception {
  10. SqlSession sqlSession = sqlSessionFactory.openSession();
  11. //这里的test.findUserById是与下面的映射文件user.xml中的namespace+id有关。
  12. User user = sqlSession.selectOne("test.findUserById", id);
  13. // 释放资源
  14. sqlSession.close();
  15. return user;
  16. }
  17. }

3.编写映射文件(user.xml)

[java] view plaincopy
  1. <mapper namespace="test">
  2. <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
  3. SELECT * FROM USER WHERE id=#{value}
  4. </select>
  5. </mapper>

4.编写测试类

[java] view plaincopy
  1. public class UserDaoImplTest {
  2. private SqlSessionFactory sqlSessionFactory;
  3. // 此方法是在执行testFindUserById之前执行
  4. @Before
  5. public void setUp() throws Exception {
  6. // 创建sqlSessionFactory
  7. // mybatis配置文件
  8. String resource = "SqlMapConfig.xml";
  9. // 得到配置文件流
  10. InputStream inputStream = Resources.getResourceAsStream(resource);
  11. // 创建会话工厂,传入mybatis的配置文件信息
  12. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  13. }
  14. @Test
  15. public void testUserDaoImpl() throws Exception{
  16. // 创建UserDao的对象
  17. UserDao userDao = new UserDaoImpl(sqlSessionFactory);
  18. // 调用UserDao的方法
  19. User user = userDao.findUserById(1);
  20. System.out.println(user);
  21. }
  22. }

测试结果:

mapper代理方法

1.编写mapper.java(UserMapper.java相当于java接口)

[java] view plaincopy
  1. public interface UserMapper {
  2. // 根据id查询用户信息
  3. public User findUserById(int id) throws Exception;
  4. }

2.编写mapper.xml(UserMapper.xml)

[java] view plaincopy
  1. <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
  2. <!--通过id查询用户表的记录 -->
  3. <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
  4. SELECT * FROM USER WHERE id=#{value}
  5. </select>
  6. </mapper>

注意:

(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的resultType指定的类型一致。

3.编写测试类

[java] view plaincopy
  1. public class UserMapperTest {
  2. private SqlSessionFactory sqlSessionFactory;
  3. // 此方法是在执行testFindUserById之前执行
  4. @Before
  5. public void setUp() throws Exception {
  6. // 创建sqlSessionFactory
  7. // mybatis配置文件
  8. String resource = "SqlMapConfig.xml";
  9. // 得到配置文件流
  10. InputStream inputStream = Resources.getResourceAsStream(resource);
  11. // 创建会话工厂,传入mybatis的配置文件信息
  12. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  13. }
  14. @Test
  15. public void testFindUserById() throws Exception {
  16. SqlSession sqlSession=sqlSessionFactory.openSession();
  17. //创建UserMapper对象,mybatis自动生成mapper代理对象
  18. UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
  19. //调用UserMapper的方法
  20. User user=userMapper.findUserById(1);
  21. System.out.println(user);
  22. sqlSession.close();
  23. }
  24. }

测试结果:

现在最常用的方法是第二种使用mapper代理的方法,不过第一种也有公司在用所以两种都要知道。

转载于:https://www.cnblogs.com/UUUz/p/9022110.html

【mybatis基础】mybatis开发dao两种方法相关推荐

  1. Mixly第三方库开发的两种方法——U8g2库二次开发

    Mixly第三方库开发的两种方法--U8g2库二次开发 前言 方法一:自定义库 1.创建库文件夹 2.开始编程 2.1.定义图形块的基本信息 2.2.定义图形块的外观样式 2.3.定义图形块与C语言的 ...

  2. Spring的核心机制依赖注入,Junit测试与Java基础Getter和Setter两种方法意义——2017.07.26...

    今天对Spring的基础理解又加深了一丢丢. 1 首先Spring的基础配置文件中,主要由以下几个配置文件, 1 <beans xmlns:xsi="http://w3.org/200 ...

  3. Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例

    感谢分享 http://www.7po.com/thread-564068-1-1.html 第一种方法: 采用Android自带的直接控制焦点上下左右的方法.这种方法的前提是必须知道每个view的i ...

  4. 使用MyBatis Generator自动生成持久层CRUD代码的两种方法

    最近在使用MyBatis,得知可以利用MyBatis Generator自动生成实体类.DAO接口和Mapping映射文件.当数据库中的表多的时候,让你不用再手写Mapping映射文件,和实体类,就可 ...

  5. 详解mybatis的配置setMapperLocations多个路径两种方法

    文章目录 一.配置文件方式 二.Javabean配置 前言:我们在平常工作中用到mybatis去加载Mapper.xml文件,可能mapper文件放的路径不一样,由此我们需要配置多个路径,幸运的是My ...

  6. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  7. Mybatis打印调试sql的两种方式

    问题描述 在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql ...

  8. 微信小程序开发流程的两种方法科普

    现在微信小程序早已渗透我们日常生活的方方面面,很多商家看到了小程序带来的巨大流量,也想开发一个自己的小程序.所以今天就跟大家科普下微信小程序开发流程,你会发现这个开发过程其实非常简单. 1. 在微信公 ...

  9. 小程序发布上线流程_微信小程序开发流程的两种方法科普

    现在微信小程序早已渗透到我们日常生活的方方面面,很多商家看到了小程序带来的巨大流量,也想开发一个自己的小程序.所以今天就跟大家科普下微信小程序开发流程,你会发现这个开发过程其实非常简单. 1. 在微信 ...

最新文章

  1. javascript 六种数据类型
  2. java实现生产者消费者问题(转)
  3. QQ音乐的各种相关API
  4. ssm 返回json配置_摆脱困境:将运行时配置作为JSON返回
  5. 面向对象chapter10
  6. python中rawinput用法_Python 中 input()用法 以及与raw_input() 的区别
  7. 元素周期表排列的规律_元素周期表是根据什么排列的?
  8. Python学习第2天:入门必备(基础篇)
  9. upc 卡德加的兔子 线段树 + 矩阵快速幂
  10. win10怎么一键释放运行内存
  11. redisson分布式锁实现原理
  12. Hadoop 3.x安装部署详细手顺
  13. chattr -i authorized_keys 无效
  14. Kafka节点扩容、缩容后reassign partition
  15. 创建简单的Nape刚体
  16. CEIWEI ParallelMonitor并口监控 v3.0 并口打印机监控, 并口打开印机, 并行端口过滤, 并行端口监控, 并口过滤, 并口监控
  17. 计算机类中级职称论文,计算机中级职称论文.docx
  18. matlab中计算容差是什么,相对和绝对容差定义求解
  19. EUI-64格式生成
  20. cockroachDB学习总结

热门文章

  1. android 9.0 https 适配,android9.0适配HTTPS:not permitted by network security policy'
  2. linux中yum怎么安装服务器,yum安装(linux如何安装yum)
  3. ajax返回304,jquery $ajax GET请求在IE浏览器兼容中遇到的304 cache请求的经验分享
  4. java graphics 类_对于 Graphics 类的一点认识(转)
  5. mysql的增_MySQL-----增
  6. 计算机用户停用无法登录,电脑开机无法登录提示您的账户已被停用如何解决。 如何解决电脑开机无法登录提示您的账户已被停用的问题。...
  7. 【金三银四】java多线程并发编程pdf
  8. 【django轻量级框架】使用支付宝支付接口(沙箱)
  9. python【力扣LeetCode算法题库】面试题 08.11- 硬币
  10. 桶排序python实现