Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】

myBatis结合dao层的开发 Mybatis对dao层动态代理的支持. 开发规则: 1)在Mapper.xml中将namespace设置为UserDao.java接口的权限定名. 我们先看一下idea的包结构 下面是各个代码推导实现 dao包下 接下来业务层 测试类 然后下面我们来利用动态代理的原理来实现. 业务的动态代理代理类 package com.jbpowernode.util; import org.apache.ibatis.session.SqlSession; import java.la 阅读详情

在Mybatis开发中,使用到的是代理Dao的方式实现增删改查,这样就不需要在写Dao的实现类
但是Mybatis也支持写Dao实现类!即DaoImpl
直接上DaoImpl,之前的代码可以参考前面几篇文章。

DaoImpl类
package com.itheima.dao.impl;

import com.itheima.dao.IUserDao;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

/**
 * Created by Administrator on 2019/10/15.
 */
public class UserDaoImpl implements IUserDao {
    private SqlSessionFactory factory;

    public UserDaoImpl(SqlSessionFactory factory) {
        this.factory = factory;
    }

    @Override
    public List<User> findAll() {
//        1、根据factory获取Sqlsession对象
        SqlSession sqlSession = factory.openSession();
//        2、调用SqlSession中的方法,实现查询列表
        List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findAll");//参数就是能获取配置信息的key
        for (User use : user) {
            System.out.println(use);
        }
//        3、释放资源
        sqlSession.close();
        return user;
    }

    @Override
    public void saveUser(User user) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.insert("com.itheima.dao.IUserDao.saveUser",user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void updateUser(User user) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.update("com.itheima.dao.IUserDao.updateUser",user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void deleteUser(Integer userId) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.update("com.itheima.dao.IUserDao.deleteUser",userId);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public User findById(Integer userId) {
        SqlSession sqlSession = factory.openSession();
        User user = sqlSession.selectOne("com.itheima.dao.IUserDao.findById", userId);
        sqlSession.commit();
        sqlSession.close();
        return user;
    }

    @Override
    public List<User> findByName(String username) {
        SqlSession sqlSession = factory.openSession();
//        2、调用SqlSession中的方法,实现查询列表
        List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findByName",username);//参数就是能获取配置信息的key
//        3、释放资源
        sqlSession.close();
        return user;
    }

    @Override
    public int findUserCount() {
        SqlSession sqlSession = factory.openSession();
        Integer count = sqlSession.selectOne("com.itheima.dao.IUserDao.findUserCount");
        return count;
    }

    @Override
    public List<User> findUserByVo(QueryVo vo) {
        return null;
    }
}

单元测试
package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * 测试Mybatis的crud操作
 */
public class mybatis {
    private InputStream in;
    private IUserDao userDao;

    @Before //用于在测试方法之前执行
    public void init() throws Exception {
        //        1、读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //        2、获取sqlSessionfactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //        3、使用工厂对象,创建dao对象
        userDao = new UserDaoImpl(factory);
    }

    @After //用于在测试方法之后执行
    public void destory() throws Exception {
        in.close();
    }

    /**
     * 测试查询所有
     */
    @Test
    public void findAll() {
        //     5、执行查询所有方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 测试保存操作
     */
    @Test
    public void testSave() {
        User user = new User();
        user.setUsername("张XX");
        user.setAddress("北京 海淀区");
        user.setSex("男");
        user.setBirthday(new Date());
        System.out.println("保存之前"+user);
        userDao.saveUser(user);
        System.out.println("保存之后"+user);
    }

    /**
     * 测试更新操作
     */
    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(52);
        user.setUsername("张XXABC");
        user.setAddress("北京 海淀区");
        user.setSex("男");
        user.setBirthday(new Date());
        userDao.updateUser(user);
    }

    /**
     * 测试删除操作
     */
    @Test
    public void testDelete() {
        userDao.deleteUser(51);
    }

    /**
     * 测试id查询一个用户
     */
    @Test
    public void testFindById() {
        //     5、执行查询所有方法
        User user = userDao.findById(48);
        System.out.println(user.getId());
        System.out.println(user.getAddress());
        System.out.println(user.getBirthday());
        System.out.println(user.getUsername());
    }

    /**
     * 测试模糊查询
     */
    @Test
    public void testFindByName() {
        //     5、执行查询所有方法
        List<User> users = userDao.findByName("%王%");
        for (User user : users){
            System.out.println(user);
        }
    }

    /**
     * 查询用户总个数
     */
    @Test
    public void testFindUserCount(){
        int count = userDao.findUserCount();
        System.out.println(count);
    }
    @Test
    public void testFindByQueryVo(){
        QueryVo queryVo = new QueryVo();
        User user = new User();
        user.setUsername("%王%");
        queryVo.setUser(user);
        List<User> users = userDao.findUserByVo(queryVo);
        for(User use :users){
            System.out.println(use);
        }
    }
}

MyBatis:接口代理方式实现Dao ​ 采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是我们后面进入企业的主流。Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。Mapper 接口开发需要遵循以下规范:1) Mapper.xml文件中的namespace与mapper接口的全限定名相同2) Mapper接口方法名和Mapper.xml中定义的每个statement的id相同3) Mapp 阅读详情

相关推荐

DAO模式实现增加删除修改操作

DAO模式实现增加删除修改操作.rar

(11)Mybatis - 编写dao实现类的使用方式,增删改查

前面讲述的是代理dao,那么如果自己来写实现类 如何进行开发呢? 我们来写它的实现类,和我们实现代理的方式进行操作进来一个对比, 我们现在写的dao实现类只不过是为了证明,不使用代理,采用实现类是可用的 我们发现还是代理的方式效率最高!!! 1 编写dao实现类的使用方式 1.1 查询 1.2 保存 1.3 更新 1.4 删除 1.5 根据id查找 1.6 模糊查询 ...

魚 1687

数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

VCS+Verdi单步调试

ic疾风传 1万+

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

一、基于注解的案例 Mybatis通过 xml或注解的方式将要执行各种的statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回 准备步骤 最好是创建一个新的project可以对比着来看,直接把原来src下文件夹覆盖过来 pom.xml里面配置的dependencies也...

韦恩少爷的博客 856

ADS新手必看:用Filter DesignGuide快速搞定一个4GHz LC低通滤波器(附保姆级避坑指南)

本文为ADS新手提供了4GHz LC低通滤波器的完整设计流程,重点介绍了如何使用Filter DesignGuide避免参数设置陷阱、正确解读仿真结果以及解决实际电路与理论值的偏差问题。通过真实工程案例,详细讲解了工程创建、Filter DesignGuide配置、电路优化、仿真设置及实际工程中的进阶技巧,帮助工程师快速掌握LC滤波器设计。

weixin_30878501的博客 301

基于深度学习的X光安检危险品检测系统(YOLOv8 + UI界面 + 数据集)

随着全球安全形势的变化,机场、车站、地铁等场所的安检工作日益重要。X光安检系统已经成为现代公共安全领域中不可或缺的部分,能够有效地检测物品的内部结构,识别潜在的危险品。然而,传统的X光图像分析方法仍然依赖人工操作,检测效率较低,并且易受到人为因素的影响。近年来,深度学习技术的应用在图像分析领域取得了显著的突破,特别是在目标检测任务中,YOLO(You Only Look Once)模型因其高效性和精度,成为了许多目标检测任务的首选模型。

YOLO 1062

用mybatis框架实现增删改查

首先建立一个javaproject起名为firstblood-mybatis 然后建立一个和src同级的目录用来存放mybatis依赖的jar包,并build path 这些包的下载地址: 点击打开链接 添加Library   JUnit4过程:右键单击项目名-&gt;build path-&gt;add librarys..-&gt;选择JUnit-&gt;next-&gt;选择...

hanjiangb的博客 1万+

解析 RABAX during SAPGUI Logon 错误及其解决方案

登录用户关联了初始启动程序,该程序由于未处理的异常导致运行时错误。在 ST22 查看错误的程序名和错误行。修复初始程序代码中的逻辑问题。重新部署修复后的代码。示例代码:防止未处理的异常TRY." 模拟逻辑处理ENDTRY.此代码通过 TRY-CATCH 块捕获潜在错误,避免程序崩溃。是 SAP 系统中常见的运行时错误,其根源可能涉及多个方面,包括用户配置、系统状态、数据库连接和自定义开发等。通过结合 ST22、SM21 等诊断工具,以及完善的代码实践和系统监控,可以有效预防和解决此类问题。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1785

MyBatis------2.MyBatis实现数据库的增删改查(类的实现方式)

  首先看下Maven的项目的结构图 一.项目结构 二.步骤 1.准备好数据库,演示的数据库名为student,表名也为stunde,数据库表结构(数据自己填充)   2.导入mysql和mybatis架包 &lt;!-- mybatis --&gt; &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/grou...

王雪亮 488

Python爬虫实战:用最新技术高效下载摄影网站图片

本文将深入探讨如何利用Python最新技术栈构建一个功能完整的摄影网站图片爬虫。我们将使用异步编程、智能反爬策略和现代化工具,实现高效、可靠的图片下载系统。高性能异步架构:使用asyncio实现高并发下载智能反爬策略:支持多种反爬措施和浏览器模拟多网站适配:可解析多种摄影网站结构数据管理:完整的下载记录和统计功能扩展性强:支持代理、分布式等高级功能用户友好:提供进度显示和详细日志。

2201_76125261的博客 1645

16、TFT-LCD 1.8寸显示屏使用

1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。这块显示屏在淘宝就可以买得到,驱动版本是ST7735S,这里圈住,一会要考的。

繁星点点~ 6768

Mybatis注解开发和编写dao实现类的方式

三:SqlMapConfig.xml中用注解,此处应该用class属性指定被注解的dao全限定类名。指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件。//4.使用SqlSession创建Dao接口的代理对象。//3.使用工厂生产SqlSession对象。//1.使用工厂创建SqlSession对象。@author: 牛哄哄的柯南。@author: 牛哄哄的柯南。@author: 牛哄哄的柯南。@author: 牛哄哄的柯南。//3.使用工厂创建dao对象。

2401_88972388的博客 837

极智芯 | 解读国产CPU之海光

大家好,我是极智视界,本文分享一下 解读国产CPU之海光。希望我的分享能对你的学习有一点帮助。

极智视界 3320

MyBatis之Dao层实现

文章目录1、传统开发方式2、代理开发方式 1、传统开发方式 2、代理开发方式

悦.L的博客 5742

【数据集4】GSWP3数据集详解

简介GSWP3数据集

WW、forever的博客 1368

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mybatis编写dao接口实现类

使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao开发方式和 Mapper 接口代理开发方式。而现在主流 的开发方式是接口代理开发方式,这种方式总体上更加简便。现在给大家介绍一下基于传统编写 Dao 实现类的开发方式。 dao接口: package ypy.dao; import ypy.domain.User; import java.util.List; public...

weixin_43157935的博客 810

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

mybatis的dao层只有接口没有实现,如何工作的-笔记

一、问题引入 mybatis在写dao层的时候只是写了个接口,并没有具体实现,如何正常工作的? 其实最初开发web的时候是需要写dao接口的实现,只是后面mybatis简化了我们的开发模式,将“dao层的实现”这部分重复代码给我们自动生成了,不需要手动写了。 我们先回顾下“需要写dao实现的传统开发模式” 和 “不需要写dao实现的代理开发模式”,再看看mybatis是如何做到这点的。 二、传统开发 VS 代理开发 为了方便比价,这里将“带dao实现”的开发方式称作“传统开发”模式,将“不带dao实现”的开

taotiezhengfeng的博客 3452

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Mybatis接口代理方式实现Dao层

Mybatis接口代理方式实现Dao层

汤键的博客 938

MyBatis接口代理实现dao层

介绍 采用 Mybatis 的代理开发方式实现 dao层的开发,这种方式是我们后面进入企业的主流。 接口代理方式只需要程序员编写dao 接口(后期叫做mapper接口),由Mybatis 框架根据接口定义创建接口的动态代理对象。 需要遵循以下规范: 映射文件中的namespace与dao接口的全类名相同 映射文件中的增删改查标签的id属性与dao接口的方法名相同 映射文件中的增删改查标签的parameterType属性与dao接口中方法的参数类型匹配 映射文件中的增删改查标签的resultType属性与d

1663988740 1497

【Mybatis】Mybatis介绍和Dao层实现

原始jdbc开发存在的问题如下①数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能②sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。③查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置应对上述问题给出的解决方案①使用数据库连接池初始化连接资源②将sql语句抽取到xml配置文件中ORM编写UserMapper映射文件...

weixin_52847234的博客 2235

MyBatis在使用代理Dao的方式实现增删改查

自定义MyBatis的分析 一、MyBatis在使用代理Dao的方式实现增删改查做了什么 创建代理对象 在代理对象中调用selectList方法 二、过程 1.读取配置文件 读取配置文件:用到的技术是解析XML的技术, 使用用dom4j解析xml技术 1根据配置文件的信息创建 Connection对象注册驱动,获取连接 2、获取预处理对象 Preparedsatement此时需要SQL语句 conn. preparestatement(sql) 3、执行查间 Resultset resultset

white1148的博客 255

Mybatis之原生和代理Dao实现

使用Mybatis开发Dao,通常有两种方法:原始Dao开发方法和Mapper接口开发方法 SqlSession的使用范围 SqlSession中封装了对数据库的操作:查询、插入、更新、删除等 通过SQLSessionFactory创建SqlSession,而SqlSessionFactory是通过SQLSessionFactoryBuilder进行创建 SqlSessionFactoryBui...

u011301372的博客 345

通过javassist操作字节码实现MyBatis动态生成DAO的实现类功能

mybatis帮我们简化了通用的实现类的代码,并通过字节码技术在运行期间根据接口和xml文件自动生成了对应的实现类。当前就通过javassist来实现类似的过程。注意上面的代码重点在于原来通过IOC注入的方式是由mybatis提供其实现类,但是现在是通过我们自定义的MyBatisGenerateDaoProxy工具类根据接口创建对应的实现类代码。【1】这里使用的javassist类是mybatis所自行封装提供的类,其所提供的api和javassist所提供的api相同。【4】创建对应的xml代码。

发现问题,面对问题,分析问题,解决问题,总结问题 991

MyBatis--动态代理实现dao接口

动态代理实现dao接口1、CRUD代码分析2、思路分析问题一、是否可以通过动态代理,代理UserDAO接口,然后动态生成内部的增删改查代码呢?问题二、想要让Mybatis帮我们动态生成DAO代码,有以下问题需要解决?如何通知mybatis名称空间?如何通知mybatis那条语句? sql语句的id3、mybatis动态代理实现dao接口3.1、规则3.2、编写Mapper接口(代替dao接口)3.3、修改 UserMapper.xml文件3.5、总结 1、CRUD代码分析 规律: 参数结构相似, 参数1指

qq_46893497的博客 1091

Mybatis的入门、接口代理实现dao以及注解开发

本文介绍了Mybatis的快速入门使用、接口代理实现dao以及注解开发

郝的博客 1220

【MyBatis】基础篇(七) MyBatis基于传统DAO层开发

MyBatis学习笔记——传统 DAO 层开发 使用 Mybatis 开发 Dao,通常有两个方法,即原始 Dao 开发方式和 Mapper 接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。我们的课程讲解也主要以接口代理开发方式为主。在之前已经给大家介绍了基于代理方式的 dao 开发,现在给大家介绍一下基于传统编写 Dao 实现类的开发方式。 1.编写持久层 ...

不想当架构师的程序员不是好程序员 877
上一篇: Mybatis实体类属性名与数据库类名不对应的两种解决方法
下一篇: Mybatis中properties标签的使用
JSON_ZJS
博客等级 码龄9年 30粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值