Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mybatis基于注解的案例 编写Dao实现类(实际开发不需要写)

Mybatis基于注解的案例 编写Dao实现类(实际开发不需要写)

原创
作者头像
韦恩少爷的背
修改于 2020-02-19 06:41:03
修改于 2020-02-19 06:41:03
1.1K00
代码可运行
举报
文章被收录于专栏:SSM框架学习SSM框架学习
运行总次数:0
代码可运行

一、基于注解的案例

Mybatis通过 xml或注解的方式将要执行各种的statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回

准备步骤

最好是创建一个新的project可以对比着来看,直接把原来src下文件夹覆盖过来

pom.xml里面配置的dependencies也复制过来

不需要配置文件!!!

可以直接把IUserDao.xml文件直接删了

可以通过注解来配置,主配置文件是不能动滴(SqlMapConfig.xml)

findAll方法举例说明

在IUserDao.java中

在findAll方法上写@Select注解,并指定sql语句

代码语言:java
AI代码解释
复制
@Select("select * from user")
List<User> findAll();

再执行方法和原来效果一样

小归纳

mybatis基于注解的入门案例:

首先可以不采取配置文件,在dao接口的方法上使用@Select注解,并且指定SQL语句

同时需要在SqlMaoConfig.xml中mapper配置时,使用class属性指定dao接口的全限定类名。

明确的是:

我们在实际开发中,都是简便越好,所以都是采取不写dao实现类的方式。

不管使用xml还是注解配置

(但是Mybatis它是支持写dao实现类的

二、编写Dao实现类

最好也是新建个工程和以前一样,用最开始的案例!!!

不要删除配置文件哟!!

在dao文件夹内搞一个impl文件夹放一个UserDaoImpl继承对应接口

由于我们写了实现类,在Mybatis中第4步使用SqlSession创建Dao接口的代理对象就不需要了

得在MybatisTest下面能拿到session对象才行

代码语言:java
AI代码解释
复制
 private SqlSessionFactory factory;
    public UserDaoImpl(SqlSessionFactory factory){
        this.factory=factory;
    }
    public List<User> findAll() {
        SqlSession session = factory.openSession();
        List<User> users = session.selectList();
        return users;
    }
    }

为了保证这个factory必须有值,重载一下构造参数就好了(覆盖默认构造函数)

这里由于返回的是List对象,用的是session的selectList

会报错别急因为括号内是需要值的

得把我们配置信息搞进去

这时候就需要namespace来定位

在IUserDao.xml中看得到

namespace.方法名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<User> users = session.selectList("IUserDao.findAll");

然后需要回到MybatisTest.java中

代码语言:java
AI代码解释
复制
    @Before//用于在测试方法执行方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件 目的是将SqlMapConfig.xml的信息加载进去
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂创建dao对象
        userDao =new UserDaoImpl(factory);
    }

注意声明为全局变量哦

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private InputStream in;
private IUserDao userDao;

这里没有session对象所以也不需要释放它了只需要in.close

这里可以选择注释掉session.close();

或者是判断是否为空,否则会空指针报错

代码语言:java
AI代码解释
复制
 @After//用于在方法执行之后执行
    public void destory()throws Exception{
        //提交事务
        if(sqlSession != null){
            sqlSession.commit();
            //6.释放资源
            sqlSession.close();
        }
        in.close();
    }

大家如果懒得改直接用下面这个就好了

代码语言:java
AI代码解释
复制
@Test
    public void testFindAll() throws IOException {
        //1.读取配置文件 目的是将SqlMapConfig.xml的信息加载进去
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.使用工厂创建dao对象
        IUserDao userDao=new UserDaoImpl(factory);
        List<User> users =userDao.findAll();
        for(User user: users){
            System.out.println(user);//打印的功能
    }
        in.close();
    }

成功!!!!执行发现和以前的功能一样!!

有没有意义呢???

不写实现类也可以实现功能

当然没意义!!!!

哈哈哈哈哈哈只是为了说清楚IUserDao.xml中namespace和id

光靠id没办法定位到方法中的sql语句

你只看到了第二层以为我在第一层?这一波我在第五层

(点个赞求求了)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MyBatis编写Dao实现类
1、创建实现类 恢复我们的IUserDao.xml文件 UserDaoImpl.java package com.tianyi.dao.impl; import com.tianyi.dao.IUserDao; import com.tianyi.javabean.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import java.util.L
星哥玩云
2022/09/14
3070
Mybatis( 源码 纯干货)分析编写dao实现类Mybatis的执行过程 findAll流程分析
这时候就可以找寻SelectList方法了 我们这里用的是第一个,只传了一个Statement,分析得实际上是最后一个
韦恩少爷的背
2020/02/19
5650
MyBatis持久层的传统开发
1、MyBatis持久层的传统开发-上 1.1、创建项目 **GroupId:**com.tianyi **ArtifactId:**mb004 **Version:**1.0-SNAPSHOT 1.
星哥玩云
2022/09/14
3110
快速学习-Mybatis 传统DAO 层开发
第5章 Mybatis 传统DAO 层开发[了解] 使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao 开发方式和 Mapper 接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。我们的课程讲解也主要以接口代理开发方式为主。在第二章节已经给大家介绍了基于代理方式的 dao 开发,现在给大家介绍一下基于传统编写 Dao 实现类的开发方式。 5.1 Mybatis 实现 DAO 的传统开发方式 5.1.1 持久层 Dao 接口 public interfac
cwl_java
2020/04/02
5350
Mybatis 传统 DAO 层开发[了解]
使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao 开发方式和 Mapper 接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。我们的课程讲解也主要以接口代理开发方式为主。在第二章节已经给大家介绍了基于代理方式的 dao 开发,现在给大家介绍一下基于传统编写 Dao 实现类的开发方式。
一点博客
2019/07/24
3750
Mybatis注解开发
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
别团等shy哥发育
2023/02/27
2680
Mybatis注解开发
数据库访问框架 - Mybatis
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为Mybatis。2013年11月迁移到Github。 iBatis一词源于”internet”和”abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAOS)。 mybatis 内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。 mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
兜兜转转
2023/03/29
5.6K0
数据库访问框架 - Mybatis
MyBatis基于DAO实现CRUD
resultType 属性: 用于指定结果集的类型。 **parameterType 属性:**用于指定传入参数的类型。
星哥玩云
2022/09/14
8190
MyBatis工作原理
前面我们学习了MyBatis的一些简单案例实现,下面我们来了解一下MyBatis工作原理。
星哥玩云
2022/09/14
6950
MyBatis工作原理
Mybatis入门案例
默认的mybatis不能打印出sql日志,不便于查看调试 在resources下导入log4j.properties这一部分大家可以网上查查,我也不知道有没有用,不是很懂,可以评论告诉我 我把我的代码放在下面(我也是copy的别人的)
韦恩少爷的背
2020/02/18
3980
Mybatis入门案例
MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
星哥玩云
2022/09/14
3290
MyBatis入门
MyBatis-resultType参数
resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型。 需要注意的是,它和 parameterType 一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须使用全限定类名。
星哥玩云
2022/09/14
3310
快速学习Mybatis-Mybatis框架快速入门
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/11
4450
MyBatis快速入门
注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方式:指定实体类的全限定类名
不愿意做鱼的小鲸鱼
2022/09/24
4200
MyBatis事务
在 JDBC 中我们可以通过手动方式将事务的提交改为手动方式,通过 setAutoCommit()方法就可以调整。
星哥玩云
2022/09/14
3840
MyBatis事务
快速学习-Mybatis框架入门
通过前面的学习,我们已经能够使用所学的基础知识构建自定义的 Mybatis 框架了。这个过程是基本功的考验,我们已经强大了不少,但现实是残酷的,我们所定义的 Mybatis 框架和真正的 Mybatis 框架相比,还是显得渺小。行业内所流行的 Mybatis 框架现在我们将开启学习。
cwl_java
2020/04/01
3710
MyBatis-动态SQL
Mybatis 的映射文件中,前面我们的 SQL 都是比较简单的,有些时候业务逻辑复杂时,我们的 SQL 是动态变化的。
星哥玩云
2022/09/14
6530
Mybatis(1)——HelloWorld
ORM:对象关系映射(Object Relation Mapping),数据库表和实体类以及实体类的属性对应起来,让我们可以操作实体类就实现了操作数据库表。
羊羽shine
2019/05/29
5300
Mybaits深入了解(三)----mybatis开发Dao的方法
程序员写代码的时候,需要写dao接口和dao实现类。而且还需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。下面举个栗子:
令仔很忙
2018/09/14
9110
自定义mybatis解析
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
6870
相关推荐
MyBatis编写Dao实现类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验