【SSM】mybatis的增删改查

news2024/12/27 8:01:01

目录

代理Dao方式的增删改查

1. 创建项目

$$1. 在sql.xml里增加日志代码以及user的mapper资源。

$$ 2. 在usermapper里引入接口。

 $$3. 在测试类中引入以下代码,并修改其中名字。

 $$ 4. 实例对象User.java里属性要与表中列严格对应。

2. 查询

1>. 查询所有

2>. 通过id查询

3>. 通过username查询

4>. 分页查找

5>.不同类型查询

6>.计数

3. 插入

4. 修改

5. 删除


代理Dao方式的增删改查

1. 创建项目

这里以上一博客中配置batis创建的user表为例。

创建UserDao接口,创建User实例对象,创建mybatis.xml和sql.xml mapper类以及测试类

$$1. 在sql.xml里增加日志代码以及user的mapper资源。

代码:

<settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
 <mapper resource="mapper/UserMapper.xml"></mapper>

$$ 2. 在usermapper里引入接口。

 $$3. 在测试类中引入以下代码,并修改其中名字。

代码:

 private InputStream in = null;
    private SqlSession session = null;
    private UserDao mapper = null;

    @Before  //前置通知, 在方法执行之前执行
    public void init() throws IOException {
        //加载主配置文件,目的是为了构建SqlSessionFactory对象
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //通过SqlSessionFactory工厂对象创建SqlSesssion对象
        session = factory.openSession();
        //通过Session创建UserDao接口代理对象
        mapper = session.getMapper(UserDao.class);
    }

    @After  //@After: 后置通知, 在方法执行之后执行 。
    public void destory() throws IOException {
        //释放资源
        session.close();
        in.close();
    }

 $$ 4. 实例对象User.java里属性要与表中列严格对应。

 

生成访问器与更改器以及toString()。

2. 查询

1>. 查询所有

<!--  id后跟方法的名字  -->
<!--    parameterType 入参的类型-->

        resultType返回结果类型

<select id="findAll" resultType="com.qcby.entity.User">
        select * from user;
    </select>

        在接口那写相应的方法(找到的有很多,所以用List接,因为返回的是对象。List<User>)

List<User> findAll();

 测试:

        mapper.findAll().var回车

@Test
    public void findAll(){
        List<User> users = mapper.findAll();
        for(User user:users){
            System.out.println(user.toString());
        }
    }

2>. 通过id查询

        d是int型,故入参类型为int型,返回实例对象。

<select id="findById" resultType="com.qcby.entity.User" parameterType="int">
        select * from user where id=#{id}
    </select>

        因为通过id查,最后输出的对象只有一个,所以不用List接,用User对象接就好。 

User findById(int id);

测试:

@Test
    public void findById(){
        User user=mapper.findById(1);
        System.out.println(user.toString());
    }

3>. 通过username查询

        入参类型为String类,java中,String在java/lang包下。

<select id="findByUserName" resultType="com.qcby.entity.User" parameterType="java.lang.String">
        select * from user where username=#{username}
    </select>

        可能有很多重名的,所以用List接。

List<User> findByUserName(String username);

测试:

@Test
    public void findByUserName(){
        List<User> users = mapper.findByUserName("熊大");
        for(User user:users){
            System.out.println(user.toString());
        }

    }

4>. 分页查找

        当数据库数据量比较大时,前台分页显示

        select * from user limit pageSize offset pageStart

<select id="findPage" resultType="com.qcby.entity.User" parameterType="int">
        select * from user limit #{pageSize} offset #{pageStart}
    </select>

        两个都是int型,故入参为int型。

在这里,需要用注解区分两个参数

List<User> findPage(@Param("pageSize") int pageSize,@Param("pageStart") int pageStart);

测试:

@Test
    public void findPage(){
        int pageSize=2;//每页显示的数据量
        int pageIndex=1;//当前是第1页
        int pageStart = pageSize*(pageIndex-1);
        List<User> users = mapper.findPage(pageSize, pageStart);
        for(User user:users){
            System.out.println(user.toString());
        }
    }

5>.不同类型查询

        不同类型时,入参为实例对象。

<select id="findByUserNameAndId" resultType="com.qcby.entity.User" parameterType="com.qcby.entity.User">
        select * from user where username=#{username} and id=#{id}
    </select>
List<User> findByUserNameAndId(User user);

测试:

 @Test
    public void findByUserNameAndId(){
       User user=new User();
       user.setId(1);
       user.setUsername("老王");
        List<User> users = mapper.findByUserNameAndId(user);
        for(User u:users){
            System.out.println(user.toString());
        }
    }

6>.计数

这里不用传参,结果为int型。

<select id="getCount" resultType="int">
        select count(*) from user;
    </select>
int getCount();

测试:

 @Test
    public void getCount(){
        System.out.println(mapper.getCount());
    }
    

3. 插入

传参为实例对象,不需要输出结果。

<insert id="insert" parameterType="com.qcby.entity.User">
        insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    </insert>
int insert(User user);

测试:

在实例对象类里,生成构造器(不包含id)

注意!!需要session事务提交。

@Test
    public void insert(){
        User user=new User("aa",new Date(),"男","保定");
        mapper.insert(user);
        session.commit();//事务提交
    }

4. 修改

同样,修改也不需要输出结果。

<update id="update" parameterType="com.qcby.entity.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>
int update(User user);

测试:

在实例对象类里,生成构造器(包含id)。

注意!!需要session事务提交。

 @Test
    public void update(){
        User user=new User(5,"bb",new Date(),"男","保定");
        mapper.update(user);
        session.commit();
    }

5. 删除

                删除靠 id,因此入参类型为int型。

<delete id="delete" parameterType="int">
        delete from user where id=#{id}
    </delete>
int delete(int id);

测试:

注意!!需要session事务提交。

@Test
    public void delete(){
        mapper.delete(6);
        session.commit();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2251674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++习题】23.二分查找算法_寻找旋转排序数组中的最小值

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 153. 寻找旋转排序数组中的最小值 题目描述&#xff1a; 解法 暴力解法&#xff1a;O(n) 从前往后找数组中的最小值。 二分算法&#xff1a;O(logn) 先找二段性 因为这…

Linux笔记---进程:进程终止

1. 进程终止概念与分类 进程终止是指一个正在运行的进程结束其执行的操作。以下是一些常见的导致进程终止的情况&#xff1a; 一、正常终止 完成任务当进程完成了它被设计要执行的任务后&#xff0c;就会正常终止。收到特定信号在操作系统中&#xff0c;进程可能会收到来自操作…

立创庐山派 K230 RTSP 推流

立创庐山派使用的是K230芯片&#xff0c;按照教程刷了canmv固件&#xff0c;下载canmv ide&#xff0c;使用嘉楠社区的rtsp和wlan例程&#xff0c;修改成连接wifi以及RTSP推流例程 # Description: This example demonstrates how to stream video and audio to the network us…

Oracle数据恢复—Oracle数据库sysaux文件损坏的数据恢复案例

Oracle数据库故障&分析&#xff1a; 一台Oracle数据库打开报错&#xff0c;报错信息&#xff1a; “system01.dbf需要更多的恢复来保持一致性&#xff0c;数据库无法打开”。管理员联系我们数据恢复中心寻求帮助&#xff0c;并提供了Oracle_Home目录的所有文件。用户方要求…

【kafka04】消息队列与微服务之Kafka 图形工具

Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…

微众银行前端面试题及参考答案

使用的协议是 HTTP 还是 HTTPS&#xff0c;为什么没用 HTTPS&#xff1f; 在前端开发中&#xff0c;有些网站使用 HTTP 协议&#xff0c;有些使用 HTTPS 协议。 使用 HTTP 协议的情况可能是因为网站对安全性的要求不是极高&#xff0c;或者处于开发的早期阶段&#xff0c;还没有…

第144场双周赛:移除石头游戏、两个字符串得切换距离、零数组变换 Ⅲ、最多可收集的水果数目

Q1、[简单] 移除石头游戏 1、题目描述 Alice 和 Bob 在玩一个游戏&#xff0c;他们俩轮流从一堆石头中移除石头&#xff0c;Alice 先进行操作。 Alice 在第一次操作中移除 恰好 10 个石头。接下来的每次操作中&#xff0c;每位玩家移除的石头数 恰好 为另一位玩家上一次操作…

UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e

近日&#xff0c;优傲&#xff08;UR&#xff09;机器人公司立足中国市场需求&#xff0c;重磅推出UR7e和UR12e 两款本地化协作机器人。它们延续优傲&#xff08;UR&#xff09;一以贯之的高品质与性能特质&#xff0c;着重优化负载自重比&#xff0c;且在价格层面具竞争力&…

应急响应靶机——Windows挖矿事件

载入虚拟机&#xff0c;开启虚拟机&#xff1a; &#xff08;账户密码&#xff1a;administrator/zgsf123&#xff09; 发现登录进去就弹出终端界面&#xff0c;自动运行powshell命令&#xff0c;看来存在计划任务&#xff0c;自动下载了一些文件&#xff0c;之后就主动结束退…

基于深度学习和卷积神经网络的乳腺癌影像自动化诊断系统(PyQt5界面+数据集+训练代码)

乳腺癌是全球女性中最常见的恶性肿瘤之一&#xff0c;早期准确诊断对于提高生存率具有至关重要的意义。传统的乳腺癌诊断方法依赖于放射科医生的经验&#xff0c;然而&#xff0c;由于影像分析的复杂性和人类判断的局限性&#xff0c;准确率和一致性仍存在挑战。近年来&#xf…

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer

【0x0001】HCI_Set_Event_Mask详解

目录 一、命令概述 二、命令格式 三、命令参数说明 四、返回参数说明 五、命令执行流程 5.1. 主机准备阶段 5.2. 命令发送阶段 5.3. 控制器接收与处理阶段 5.4. 事件过滤与反馈阶段 5.5. 主机处理&#xff08;主机端&#xff09; 5.6. 示例代码 六、命令应用场景 …

可解释机器学习 | Python实现LGBM-SHAP可解释机器学习

机器学习 | Python实现GBDT梯度提升树模型设计 目录 机器学习 | Python实现GBDT梯度提升树模型设计基本介绍模型使用参考资料基本介绍 LightGBM(Light Gradient Boosting Machine)是一种基于决策树的梯度提升框架,是一种高效的机器学习模型。SHAP(SHapley Additive exPlan…

【Rust在WASM中实现pdf文件的生成】

Rust在WASM中实现pdf文件的生成 概念和依赖问题描述分步实现最后 概念和依赖 . WASM WebAssembly&#xff08;简称WASM&#xff09;是一个虚拟指令集体系架构&#xff08;virtual ISA&#xff09;&#xff0c;旨在为C/C等语言编写的程序提供一种高效的二进制格式&#xff0c;使…

Java开发每日一课:Java开发岗位要求

找过工作的朋友应该知道&#xff0c;现在招聘Java开发工程师的公司特别多。那么Java开发这个岗位具体是做什么的&#xff1f;又有什么招聘要求呢&#xff1f; 我毕业的时候也面试过很多公司&#xff0c;当时对Java开发这个岗位的要求不甚了解&#xff0c;因为懂Java语法知识就能…

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…

2025年Java面试八股文大全

很多人会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的制度。 而且&#xff0c;我国的八股文确…

DPDK用户态协议栈-Tcp Posix API 1

和udp一样&#xff0c;我们需要实现和系统调用一样的接口来实现我们的tcp server。先来看看我们之前写的unix_tcp使用了哪些接口&#xff0c;这边我加上两个系统调用&#xff0c;分别是接收数据和发送数据。 #include <stdio.h> #include <arpa/inet.h> #include …

记一次搞校园网的经历

接教室的校园网&#xff0c;到另一个屋子玩电脑&#xff0c;隔墙想放大一下AP的信号&#xff0c;发现死活不行 这是现状 由于校园网认证的存在&#xff0c;无法用桥接&#xff0c;桥接需要路由器有IP&#xff0c;而这个IP无法用未刷机的路由器来打开校园网页面认证 解决 将一…