MyBatis友人帐之使用注解开发

news2024/11/19 0:26:34

一、利用注解开发

  • mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的。而到MyBatis 3提供了新的基于注解的配置。不幸的是,Java 注解的的表达力和灵活性十分有限。最强大的 MyBatis 映射并不能用注解来构建

  • sql 类型主要分成 :

    • @select ()

    • @update ()

    • @Insert ()

    • @delete ()

 注意:利用注解开发就不需要mapper.xml映射文件了 .

 //获取SqlSession连接
  public static SqlSession getSession(){
      return getSession(true); //事务自动提交
  }
 
  public static SqlSession getSession(boolean flag){
      return sqlSessionFactory.openSession(flag);
  }

1.1查询

1、编写接口方法注解

//根据id查询用户
@Select("select * from user where id = #{id}")
User selectUserById(@Param("id") int id);

2、在mybatis的核心配置文件中注入

  <mappers>

        <mapper class="com.yanyu.dao.UserMapper"/>
    </mappers>

3、我们去进行测试

 @Test
    public void testSelectUserById() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        User user = mapper.selectUserById(2);
        System.out.println(user);

        session.close();
    }

1.2新增

1.编写接口方法注解

@Insert("insert into user1 (id,name,pwd) values (#{id},#{name},#{pwd})")
    int addUser(User user);

2.测试

  @Test
    public void testAddUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        User user = new User(5, "烟雨", "123456");
        mapper.addUser(user);

        session.close();
    }

1.3修改

1、编写接口方法注解

//修改一个用户
@Update("update user1 set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);

2、测试

 @Test
    public void testUpdateUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        User user = new User(5, "55", "zxcvbn");
        mapper.updateUser(user);

        session.close();
    }

1.4删除

1、编写接口方法注解

//根据id删除用
@Delete("delete from user1 where id = #{id}")
int deleteUser(@Param("id")int id);

2、测试

 @Test
    public void testDeleteUser() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        mapper.deleteUser(5);

        session.close();
    }

1.5关于@Param

@Param注解用于给方法参数起一个名字。以下是总结的使用原则:

  • 在方法只接受一个参数的情况下,可以不使用@Param。

  • 在方法接受多个参数的情况下,建议一定要使用@Param注解给参数命名。

  • 如果参数是 JavaBean , 则不能使用@Param。

  • 不使用@Param注解时,参数只能有一个,并且是Javabean。

1.6#与$的区别 

  • #{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】

    INSERT INTO user (name) VALUES (#{name});
    INSERT INTO user (name) VALUES (?);
  • ${} 的作用是直接进行字符串替换

    INSERT INTO user (name) VALUES ('${name}');
    INSERT INTO user (name) VALUES ('kuangshen');

二、IDEA Debug教程

Debug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。 

2.1开始调试

开始调试主要分为两步,第一为设置断点,第二才进行调式操作。

1、设置断点

设置断点的方法基本上大多数的 IDE 都一致,当我们在代码行上的数字旁鼠标左键点击一下,便设置断点成功(可设置多个断点)。断点还可以进行其余设置

2、Debug调试

启动调式主要有以下三种方法:

  1. 工具栏点击小甲虫样式的 debug 按钮
  2. 鼠标右键 菜单下的 debug
  3. 快捷键:Alt+Shift+D (可自行更换)

方式一:

方式二:

2.2调试界面解释 

点击了调试按钮之后,我们 IDEA 的底部会变成以下形式。既然要开始调试,我们总得先对调试界面有一个初步的认识不是,因此在下面我对常用的部分进行解释

1、调试器
在此界面可查看关于调式获得到的信息,如变量、方法返回值等

2、控制台
点击控制台后可以跟我们正常运行代码一样,在控制台中输入数据和查看输出情况

3、重启

重新调试

4、停止

停止当前调试

5、Resume Program

快捷键为 F8,跳到一下个断点处

6、Step Over
快捷键为 F6步过,一行一行地往下走,如果这一行上有方法,直接执行完该方法的内容,不会进入方法里面。

7、Step Into
快捷键为 F5步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法。

8、Step Out
快捷键为 F7步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值。

9、Force Step Into
快捷键为 Alt + Shift + F7强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法。

10、Run to Cursor
Ctrl+R。运行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。

11、Show Execution Point
快捷键为 Alt + F10 。如果你的光标在其它行或其它页面,点击这个按钮可跳转到当前Debug代码执行的行。

12、Variable窗口
如图中的红框,这里显示当前方法里的所有变量。

2.3步过、步入和强制步入区别 

这三个按钮的功能各有千秋,都具有进行到下一步的功能。当我们写的 bug 不同时,我们就得用到不同的按钮,下面我用表格列出三者的不同

是否可跳转是否可进入自定义方法是否可进入类库方法
步过
步入
强制步入

2.4调试案例

package org.example;

import lombok.*;

@Setter
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private int id;
    private String name;
    
}
package org.example;

import java.util.ArrayList;
import java.util.List;

/*
 * 1、静态方法不能直接调用非静态方法。
 * 2、静态方法和变量可以在类被加载时就被访问,而非静态方法和变量需要在该对象创建后才能被访问。
 * 3、如果想在静态方法中访问非静态方法或者变量,则需要先创建一个对象,然后在静态方法里面通过对象去访问非静态方法。
 * */

public class UserTest {
    //	非静态方法,获取User列表
    public List<User> getUserList(){
        User user1 = new User(1,"张三");
        User user2 = new User(2,"李四");
        User user3 = new User(3,"王五");
        //	注意List是接口,接口不能直接实例化,需要通过它的实现类
        List<User> users= new ArrayList<>();
        users.add(user1);
        users.add(user2);
        users.add(user3);

        return users;
    }

    public void syTest(){
        System.out.println("断点回退前");
        System.out.println("回退后");
    }


    public void allTest(int[] array){
        for (int i : array) {
            if (i==1){
                System.out.println(1);
            }else if (i==2){
                System.out.println(2);
            }else if (i==3){
                System.out.println(3);
            }else if (i==4){
                System.out.println(4);
            }
            else {
                System.out.println(5);
            }
        }
    }

    // 主程序入口,静态方法
    public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        UserTest userTest = new UserTest();
        // 在静态方法里面调用非静态方法,需要通过对象去调用。
        userTest.allTest(array);
        List<User> users= userTest.getUserList();

        // 带条件的断点
        for (User user : users) {
            System.out.println(user.getId());
        }

        // 断点回退
        userTest.syTest();

        // 执行中断 force return
        userTest.allTest(array);

    }
}

1、常用调试

在userTest.allTest(array) 打一个断点,点击Debug

 2、带条件的断点

在System.out.println(user.getId());打一个断点,鼠标右键断点,编写调试条件

3、断点回退(只能用在方法里面)

在userTest.syTest() ,打一个断点,Step Into进入方法后,点击Step Over,我们可以看到,左下角框有Reset Frame(断点回退),点一下它,就回到之前执行断点之前的位置,再次重复该操作,查看控制台输出内容。

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

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

相关文章

由union引发的Struct占用内存空间和大小端问题的思考

1. 背景 在看Lua源码的时候&#xff0c;很多地方都用到了union&#xff08;共用体或者联合体&#xff09;&#xff0c;在定义lua类型的时候&#xff0c;为了以一个结构来包含所有的数据类型&#xff0c;设计了一个 TValue类型&#xff0c;TValue类型最终关联到 Value类型&#…

番茄小说推文和番茄短剧推广怎么申请授权

番茄小说推文和番茄短剧推广都可以通过“巨量推文”进行授权 番茄小说是一个独立的小说平台&#xff0c;他们在推文市场有推广预算后交给我们达人进行推广&#xff0c;推广完成后可以获得番茄小说的cpa拉新奖励 番茄短剧和番茄小说类似&#xff0c;只是一个是推广短剧的平台一…

VisualStudio配置opencv

下载opencv 链接&#xff1a;https://opencv.org/releases/ 我下载的是4.7.0&#xff0c;选择windows下载。 下载成功后打开exe文件&#xff0c;选择路径安装。 配置环境变量 安装成功后找到安装目录&#xff0c;复制bin目录路径。 我的是放在了D盘 D:\Opencv4.7.0\opencv…

多模态 多引擎 超融合 新生态!2023亚信科技AntDB数据库8.0产品发布

9月20日&#xff0c;以“多模态 多引擎 超融合 新生态”为主题的亚信科技AntDB数据库8.0产品发布会成功举办&#xff0c;从技术和生态两个角度全方位展示了AntDB数据库第8次大型能力升级和生态建设成果。浙江移动、用友、麒麟软件、华录高诚、金云智联等行业伙伴及业界专家共同…

《动手学深度学习 Pytorch版》 7.5 批量规范化

7.5.1 训练深层网络 训练神经网络的实际问题&#xff1a; 数据预处理的方式会对最终结果产生巨大影响。 训练时&#xff0c;多层感知机的中间层变量可能具有更广的变化范围。 更深层的网络很复杂容易过拟合。 批量规范化对小批量的大小有要求&#xff0c;只有批量大小足够…

CTF--攻防世界--杂项基础

多做几道基础题就会发现这东西真的跟智障题一样&#xff0c;开始嘲笑当初的自己了。 就当是学习笔记了【根据题库给的顺序&#xff0c;随便写几道】 用那个隐写工具一步完事 这一题我是真的理解了杂项的概念&#xff0c;这玩意是真杂啊&#xff0c;死活都没想到居然还有这种题…

网络编程day05(IO多路复用)

今日任务&#xff1a; TCP多路复用的客户端、服务端&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> …

若依使用及源码解析(前后端分离版)

部署环境 JDK > 1.8 MYSQL > 5.7 Maven > 3.0 Node > 12 Redis > 3 运行若依项目 下载若依源码 若依官网 若依项目源码(前后端分离) 运行后端项目 ruoyi-ui就是vue项目&#xff08;这里使用vscode打开&#xff09; 整体用idea打开 1.配置数据库(sq…

千兆以太网传输层 UDP 协议原理与 FPGA 实现

文章目录 前言心得体会一、UDP 协议介绍二、UDP 数据报格式三、UDP 数据发送测试四、Verilog实现UDP 数据发送1、IP 头部检验 IPchecksun 的计算2、以太网报文的校验字段 FCS 的计算3、以太网报文发送模块实现五、以太网数据发送测试六、仿真代码七、仿真波形展示八、上板测试九…

婚礼策划展示小程序制作全程解析

随着互联网的发展&#xff0c;小程序已成为各行各业所钟爱的一种数字化工具。对于婚礼策划师来说&#xff0c;一款专为自己业务打造的小程序能够更好地展示婚礼策划方案&#xff0c;提升服务质量&#xff0c;加强与客户的沟通。以下就是制作婚礼策划展示小程序的全程解析。 一、…

【Linux网络编程】gdb调试技巧

这篇博客主要要记录一下自己在Linux操作系统Ubuntu下使用gbd调试程序的一些指令&#xff0c;以及使用过程中的一些心得。 使用方法 可以使用如下代码 gcc -g test.c -o test 或者 gcc test.c -o test ​ -g的选项最好添加&#xff0c;如果不添加&#xff0c;l指令无法被识别 …

机试(2017 cs se)

2017计算机系夏令营 题解参考&#xff1a; 2017 华东师范计算机系暑期夏令营机考 A. 不等式 Problem #3304 - ECNU Online Judge 有点像贪心算法 选一个刚刚好在条件范围里的b[i]作为候选&#xff0c;【这个“刚刚好”是指选一个符合这个条件的最极限的值】 代码 #in…

力扣669 补9.16

最近大三上四天有早八&#xff0c;真的是受不了了啊&#xff0c;欧嗨呦&#xff0c;早上困如狗&#xff0c;然后&#xff0c;下午困如狗&#xff0c;然后晚上困如狗&#xff0c;尤其我最近在晚上7点到10点这个时间段看力扣&#xff0c;看得我昏昏欲睡&#xff0c;不自觉就睡了1…

关于Python安装Scrapy库的常见报错解决

目录 1、关于pip3命令的报错 2、执行scrapy报错&#xff08;Python3下的OpenSSL模块出错&#xff09; 3、卸载pyopenssl时报错 由于Scrapy该库在Windows下会存在兼容问题&#xff0c;下面介绍的是在Linux系统进行安装。 1、关于pip3命令的报错 报错代码&#xff1a; error…

redis漏洞修复:(CNVD-2019-21763)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、漏洞内容二、镜像准备1.确认镜像版本2.下载镜像 三、配置文件准备1.获取配置文件2.修改配置文件 四、启动redis容器五、修改iptables文件总结 前言 漏扫发…

Java JVM分析利器JProfiler 结合IDEA使用详细教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、JProfiler是什么&#xff1f;二、我的环境三、安装步骤1.Idea安装JProfiler插件1.下载程序的安装包 四、启动 前言 对于我们Java程序员而言&#xff0c;肯…

博通强迫三星签不平等长约,被韩处罚1亿元 | 百能云芯

近日&#xff0c;博通&#xff08;Broadcom&#xff09;这家国际知名的半导体公司因其市场主导地位的滥用&#xff0c;遭到了韩国公平贸易委员会&#xff08;FTC&#xff09;的严厉制裁&#xff0c;罚款高达191亿韩元&#xff0c;约合人民币1.04亿元。这一惩罚背后的故事揭示了…

用AVR128单片机的音乐门铃

一、系统方案 1、使用按键控制蜂鸣器模拟发出“叮咚”的门铃声。 2、“叮”声对应声音频率714Hz&#xff0c;“咚”对应声音频率500Hz,这两种频率由ATmega128的定时器生成&#xff0c;定时器使用的工作模式自定&#xff0c;处理器使用内部4M时钟。“叮”声持续时间300ms&#x…

Linux新手教程||Linux vi/vim

所有的 Unix Like 系统都会内建 vi 文书编辑器&#xff0c;其他的文书编辑器则不一定会存在。 但是目前我们使用比较多的是 vim 编辑器。 vim 具有程序编辑的能力&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。 什么是 vim&#xff1f; Vim是…

链表oj3(Leetcode)——相交链表;环形链表

一&#xff0c;相交链表 相交链表&#xff08;Leetcode&#xff09; 1.1分析 看到这个我们首先想到的就是一个一个比较他们的值有相等的就是交点&#xff0c;但是如果a1和b2的值就相等呢&#xff1f;所以这个思路不行&#xff0c;第二种就是依次比较链表&#xff0c;但是这…