六、使用注解开发

news2025/7/4 23:06:29

文章目录

  • 一、CRUD 注解(舍弃 mapper.xml): @Select @Insert @Update @Delete @Param
    • 1、@Select
    • 2、@Insert
    • 3、@Delete
    • 4、@Update
    • 5、@Param
  • 二、Lombok 插件,减少重复代码
    • 1、@Data



一、CRUD 注解(舍弃 mapper.xml): @Select @Insert @Update @Delete @Param

       通过注解去处理映射,省略 mapper.xml ,直接用注解代替,这样可以使代码更加简洁。
       但是需要注意,一些简单映射可以使用 ibtis 包下的 SQL 注解还好,但是如果是复杂映射的话,使用注解反而不好处理。
比如,字段:user_id ,实体类:userId,这种不一致的状况处理起来便很麻烦,所以写 SQL 时候最好还是使用 XML 去完成。
  • 使用 CRUD 注解,省略XML文件,直接在接口的抽象方法上通过CRUD注解编写SQL,并在 mybatis-config.xml 核心配置文件中直接配置 mapper 接口

XML 文件

	    <!--绑定接口!-->
	    <mappers>
	        <mapper class="com.demo_03.mapper.IUserMapper" />
	    </mappers>



1、@Select

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Select>标签
        @Select("select * from user")
    	List<User> getUsers();
    
  • 测试类

       @Test
        public void test() throws IOException {
    
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
                List<User> list = mapper.getUser();
                for(User user:list){
                    String info= String.format(
                            "id:%s,用户名:%s,密码:%s,人员创建时间:%s",
                            user.getId(),user.getName(),user.getPwd(),user.getCreateTime() );
                    System.out.println(info);
                }
            }finally{
                sqlSession.close();
            }
        }
    

运行结果:
在这里插入图片描述
可以看出时间字段无法处理,查询不到数据



2、@Insert

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Insert>标签
        @Insert("insert into user (id,name) values(#{id},#{name})")
        int addUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            user.setId(999);
            user.setName("感冒灵");
            int i = mapper.addUser(user);
            qlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



3、@Delete

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Delete>标签
        @Delete("delete from user where id = #{id}")
    	int deleteUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user = new User();
            user.setId(888);
            user.setName("感冒灵");
            int i = mapper.updateUser(user);
            sqlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



4、@Update

代码示例:

  • mapper 接口

    	//相当于 XML 文件中的<Update>标签
         @Update("update user set id = #{id} where name = #{name}")
         int updateUser(User user);
    
  • 测试类

   @Test
    public void test() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
            User user = new User();
            user.setId(888);
            user.setName("感冒灵");
            int i = mapper.updateUser(user);
            sqlSession.commit();//全部正常执行后,提交事务
            System.out.println(i);
        }finally{
            sqlSession.close();
        }
    }

运行结果:
在这里插入图片描述



5、@Param

       @Param 注解是搭配 CRUD 注解使用的。
  • @Param 的作用

    • 便于传递多个参数
    @Select("select * from user where id = #{id} and  name = #{name}")
    List<User> getUser(@Param("id") int id,@Param("name") String name);
    
    • 给传入参数起别名()
    @Select("select * from user where name = #{username}")
    List<User> getUser(@Param("username") String name);
    
  • @Param 的注意事项

    • 只要传入的参数是基本类型或者String类型,就需要加上该注解用来标注参数,引用类型不需要加



二、Lombok 插件,减少重复代码

  • 使用步骤:

    • 在IDEA中安装Lombok插件
    • 在项目pom.xml文件中导入Lombok 依赖
      <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
           <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
    
    • 在实体类上添加相应注解即可


1、@Data

       @data 注解是使用频率最高的注解。
  • @data 注解的作用:
    • 生成无参构造方法
    • 生成 Get 方法
    • 生成 Set 方法
    • 生成 toString 方法
    • 生成 hashCode 方法
    • 生成 equals 方法

加上该注解之后自动生成这些方法,就不需要在编写这部分代码了。

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

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

相关文章

【Netty】Netty高性能原理剖析

Netty高性能原理剖析1、前言2、Netty高性能2.1 多路复用通讯方式2.2 异步通讯 NIO2.3 零拷贝(DIRECT BUFFERS 使用堆外直接内存&#xff09;2.4 内存池(基于内存池的缓冲区重用机制&#xff09;2.5 高效的 Reactor 线程模型2.5.1 Reactor 单线程模型2.5.2 Reactor 多线程模型2.…

低代码有多爽?1个月的活,只需3天干完

仅看到“低代码”三个字&#xff0c;不少程序员就会吐槽“只适合简单业务&#xff0c;普通查改还行&#xff0c;复杂业务简直是灾难”&#xff0c;甚至认为是“儿童玩具”。 不少人自以为是程序员的二把刀&#xff0c;以为自己懂完了&#xff0c;在没理解低代码的应用场景&…

怎么压缩动态图片?手机怎么压缩gif动图?

在平时的聊天当中为了增加聊天的趣味性我们经常会保存一些有趣的gif动图表情包&#xff0c;但是由于gif图一般是由多帧组成&#xff0c;因此有的gif动图就会非常大&#xff0c;无法添加到表情当中&#xff0c;这时候就需要将gif压缩变小&#xff0c;那么我们用手机怎么压缩gif动…

华硕编程竞赛11月JAVA专场 C题太空遨游 题解

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

chatGPT辣么火,你却不会注册

chatGPT 是什么&#xff1f; 一款目前超级火的 AI 对话聊天工具&#xff0c;只是不同于其他的智能聊天机器人那样&#xff0c;他非常的智能。 可以回答你的技术问题、帮你写代码、还能帮你写小说等等&#xff0c;发挥你的想象力&#xff0c;让他干点啥都行。 比如让他帮你用…

[附源码]Python计算机毕业设计SSM基于旅游服务平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

VMware使用和Linux安装Docker

一、VMware安装和配置 二、Linux安装Docker PS:记得每次配置安装新东西前先拍摄拍照&#xff0c;这样即使安装坏了&#xff0c;不需要重装虚拟机。&#xff08;吃过这个亏&#xff09; 1.Docker支持64位版本的CentOS 7和CentOS 8及更高版本&#xff0c;它要求Linux内核版本不…

Web前端大作业—— 饮食餐饮网站 咖啡网站pc端带轮播(5个页面)HTML+CSS+JavaScript 学生美食网页设计作品 学生餐饮文化网页模板

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

数据技术篇之日志采集

第2章 日志采集 1.日志采集有哪些 页面浏览日志 页面浏览日志是指当一个页面被浏览器加载呈现时采集的日志。此类日志 也是最基础的互联网日志&#xff0c;也是目前所有互联网产品的两大基本指标&#xff1a;页面浏览量&#xff08;Page View&#xff0c;PV&#xff09;和访客…

谈一谈 IPA 上传到 App Store Connect 的几种方法

谈一谈​ 1、前言​ 关于上传​ 2、Xcode​ 利用​ 3、Application Loader​ 当然&#xff0c;Xcode 这种方式&#xff0c;是需要有源代码情况下&#xff0c;才能上传。所以&#xff0c;就会有没有源代码的情况&#xff0c;怎么上传的情况啦&#xff01;​ Application L…

ET框架解读其一

ECS&#xff1f; 真正的ECS属于是entity-component-system组件里面只有数据没有方法&#xff0c;system里面是针对组件的方法&#xff0c;system通过查找只需要关注自己想关注的组件集合就可以。但是ET框架的代码在组件里面写满了方法&#xff0c;有数据又有方法的组件&#x…

Spire.Doc for Java 10.12.2 update Word to PDF/HTML to Word

谷歌找破解版Spire.Doc for Java is a professional Word API that empowers Java applications to create, convert, manipulate and print Word documents without dependency on Microsoft Word. By using this multifunctional library, developers are able to process co…

并发编程概述 和 并行编程(Parallel Framework)

任务&#xff08;task&#xff09; 异步编程&#xff08;async&await&#xff09; 并发编程概述 前言 说实话&#xff0c;在我软件开发的头两年几乎不考虑并发编程&#xff0c;请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天&#xff08;剩下时间各种…

HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究

小编这里分享的科研知识是HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究&#xff0c;来看&#xff01; 光克洛修饰介孔二氧化硅纳米粒子的研究&#xff1a; 光敏剂的研发历经以卟吩姆钠为代表的第一代卟啉类光敏剂到以维替泊芬,他拉泊芬和替莫泊芬…

揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚

关于穷&#xff0c;去年有了一个更学术的说法&#xff1a;隐形贫困人口。 就是因为有太多“种草达人”&#xff0c;让我们为了物质生活超前消费&#xff0c;再加上不理财的话&#xff0c;那简直是雪上加霜。 看到知乎上面最近有一个很火的问题&#xff1a; “90后的你&#…

为了学会更多炫酷的 canvas 效果,我熬夜复习了三角函数相关的知识点

稳定性建设之JavaScript代码不能被阻断 背景 js代码可能会因为某些原因&#xff0c;导致出错&#xff0c;进而整个后续代码有可能都被阻断。直接影响线上的稳定性 最常见的js被阻断的情况 console.log(111) // 预期 a {} // 结果 a undefined a.a 1 console.log(222) // …

web前端期末大作业 HTML游戏资讯网页设计制作 简单静态HTML网页作品 DW游戏资讯网页作业成品 游戏网站模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

CTO职位刚发布,一天收到100+份简历

IT行业卷可是没有想到这么卷&#xff0c;我们公司最近招聘CTO&#xff0c;一天收到100份简历&#xff0c;这里面有太多优秀的人&#xff0c;简直挑花了眼。这里面有英国毕业的&#xff0c;有北京大学的&#xff0c;还有各种985和211毕业的大学生&#xff0c;简历也是非常的丰富…

总结717

大三上半学期过去了。回想起当初那个暑假还在纠结的问题。如今&#xff0c;我也算是想通了。 回想起这样一个夜晚&#xff0c;我与好几位同学在谈论考研的事情。其中有一位同学问&#xff1a;“所以&#xff0c;你们为什么要考研呢&#xff1f;”有的同学说是“想到名校走走”…

【C++常用容器】STL基础语法学习stack容器

目录 ●stack基本概念 ●stack常用接口 ●构造函数 ●赋值操作 ●数据存取 ●大小操作 ●stack基本概念 简要介绍&#xff1a; stack是一种先进后出或后进先出的数据结构&#xff0c;它只有一个出口。栈中只有顶端元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为。栈…