Java课题笔记~ Mybatis注解开发

news2024/11/19 13:33:37

使用注解开发,可以减少Mapper映射文件的编写。

 

一、mybatis常用注解

@Insert:实现新增

@Update:实现更新

@Delete:实现删除

@Select:实现查询

@Result:实现结果集封装

@Results:可以与@Result 一起使用,封装多个结果集

@ResultMap:实现引用@Results 定义的封装

@One:实现一对一结果集封装

@Many:实现一对多结果集封装

@SelectProvider: 实现动态 SQL 映射

@CacheNamespace:实现注解二级缓存的使用

使⽤注解编写复杂的SQL是这样的:

原则:简单sql可以注解,复杂sql使⽤xml!

使用注解式开发以后三兄弟之一的SqlMapper.xml文件就不需要了!

 

1、@Insert注解

二兄弟之一的CarMapper接口,用来编写方法

使用@Insert的注解方式,在注解上就可以写上SQL语句,对于SQL语句当中的变量就是pojo类Car对应的变量名

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
 
public interface CarMapper {
    // 使用注解式开发,插入数据
    @Insert("insert into t_car values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})")
    int insert(Car car);
}

二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class CarMapperTest {
    @Test
    public void testInsert(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 创建Car对象
        Car car = new Car(null, "666", "丰田霸道", 32.0, "2023-1-9", "燃油车");
        int count = mapper.insert(car);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

执行结果:

2、@Delete注解

二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
 
public interface CarMapper {
    // 使用注解式开发,删除数据
    @Delete("delete from t_car where id = #{id}")
    int deleteById(Long id);
}

 二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class CarMapperTest {
   @Test
    public void testDeleteById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        int count = mapper.deleteById(40L);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

 执行结果:

 

3 、@Update注解

 二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
 
public interface CarMapper {
    // 使用注解式开发,更新数据
    @Update("update t_car set car_num=#{carNum},brand=#{brand},guide_price=#{guidePrice},produce_time=#{produceTime},car_type=#{carType} where id = #{id}")
    int update(Car car);
}

 二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class CarMapperTest {
   @Test
    public void testUpdate(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        // 创建Car对象,根据id进行更新
        Car car = new Car(34L, "666", "丰田霸道", 32.0, "2023-1-9", "燃油车");
        int count = mapper.update(car);
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }
}

 执行结果:

 

4 、@Select注解

二兄弟之一CarMapper接口,用来编写方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.Insert;
 
public interface CarMapper {
    // 使用注解式开发,查询数据
    @Select("select * from t_car where id = #{id}")
    Car selectById(Long id);
}

 二兄弟之二CarMapperTest,用来测试

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.CarMapper;
import com.bjpowernode.mybatis.pojo.Car;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class CarMapperTest {
   @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        Car car = mapper.selectById(41L);
        System.out.println(car);
        sqlSession.close();
    }
}

 执行结果:

5 、@Results注解

我们知道数据库表中的字段和pojo类的属性名有的是不一样的,我们之所以能够完整的查出数据,是因为在核心配置文件mybatis-config.xml当中配置了:启用驼峰命名⾃动映射

    <!--启⽤驼峰命名⾃动映射-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

如果我们不启用,不对应的字段就是null,查询的数据如下:

 

还可以使用@Results注解指定映射关系,Results注解就等同于结果映射ResultMap!

注:@Results注解必须与@Select查询同方法在一起,不可以单独定义@Results注解!

注:从这里也能看出,使用注解的方式开发,对于简单点的SQL还行,对于稍微复杂的查询语句就太麻烦了!
 

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Car;
import org.apache.ibatis.annotations.*;
 
public interface CarMapper {
    // 使用注解式开发,查询数据
    @Select("select * from t_car where id = #{id}")
    @Results({
            @Result(property = "id",column = "id"),
            @Result(property = "carNum",column = "car_num"),
            @Result(property = "brand",column = "brand"),
            @Result(property = "guidePrice",column = "guide_price"),
            @Result(property = "produceTime",column = "produce_time"),
            @Result(property = "carType",column = "car_type"),
    })
    Car selectById(Long id);
}

这样计算我们不启用驼峰命名⾃动映射,也能正常查询数据

 

 

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

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

相关文章

23款奔驰GLB200升级23P智能驾驶辅助系统,提升您的行车安全性

为什么要升级23P驾驶辅助系统呢&#xff1f;23P驾驶辅助系统功能有什么作用呢&#xff1f; 首先23P驾驶辅助系统功能有9个&#xff0c;相互结合让行车更安全&#xff0c;长途开车更轻松。提升驾驶的安全性。 所以选择装这套23P驾驶辅助系统的用户也比较多&#xff0c;现在道路…

屏蔽箱的种类、优点及使用场景介绍

屏蔽箱的用途是非常广泛的&#xff0c;能够屏蔽辐射电磁也可以阻隔电磁进入某一区域&#xff0c;达到屏蔽干扰信号的作用。屏蔽箱的种类是多样的&#xff0c;有着各自的优点。 按照应用领域屏蔽箱可分为以下几种&#xff1a; 1.电磁屏蔽箱&#xff1a;主要应用于电磁波测试和电…

【Jmeter】压测mysql数据库中间件mycat

目录 背景 环境准备 1、下载Jmeter 2、下载mysql数据库的驱动包 3、要进行测试的数据库 Jmeter配置 1、启动Jmeter图形界面 2、加载mysql驱动包 3、新建一个线程组&#xff0c;然后如下图所示添加 JDBC Connection Configuration 4、配置JDBC Connection Configurati…

洛谷P1918 保龄球

思路&#xff1a;要打多少个就在哪里打 比如要打100个&#xff0c;就在a数组中找出一个100&#xff0c;在那里打 所以可以用STL-map。 map大法好&#xff01;&#xff01;&#xff01; 用map存储每种 瓶子个数 最后出现的位置。 就是说&#xff0c;比如样例中&#xff1a;…

[C++项目] Boost文档 站内搜索引擎(2): 文档文本解析模块parser的实现、如何对文档文件去标签、如何获取文档标题...

项目开始的准备工作 在上一篇文章中, 已经从Boost官网获取了Boost库的源码. 相关文章: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍… 接下来就要编写代码了. 不过还需要做一些准备工作. 创建项目目录 所有的项目文件肯定要在一…

DTCC2023第十四届中国数据库大会分享:MySQL性能诊断平台:利用eBPF技术实现高效的根因诊断

主题 8月16-18日 DTCC2023第十四届中国数据库大会在北京国际会议中心召开&#xff0c;17日下午在云原生数据库开发与实践分论坛&#xff0c;我将带来分享&#xff1a;《MySQL性能诊断平台&#xff1a;利用eBPF技术实现高效的根因诊断》敬请期待&#xff01; 欢迎大家提前试用我…

深度学习Redis(5):集群

前言 在前面的文章中&#xff0c;已经介绍了Redis的几种高可用技术&#xff1a;持久化、主从复制和哨兵&#xff0c;但这些方案仍有不足&#xff0c;其中最主要的问题是存储能力受单机限制&#xff0c;以及无法实现写操作的负载均衡。 Redis集群解决了上述问题&#xff0c;实…

【积累】安装PLSQL工具遇到的那些问题~

报错提示没有正确安装 解决方案&#xff1a;是需要安装oracle client oracle下载地址&#xff1a;https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 报错提示确认安装了32位的Oracle Client吗&#xff1f; 百度找解决方案&#xff1a…

Execution failed for task ‘:app:uploadCrashlyticsMappingFileRelease

新版本的Firebase crash 库打混淆后的正式环境包会报错&#xff1a; Execution failed for task :app:uploadCrashlyticsMappingFileRelease Caused by: java.lang.IllegalArgumentException: Host name may not be empty 解决方案&#xff1a; 在build.gradle android{}中…

如何编写一个易于维护的考试系统源码

编写一个易于维护的考试系统源码对于开发人员来说非常重要。一个易于维护的系统可以使代码更易于理解、修改和扩展&#xff0c;从而提高开发效率和系统稳定性。 第一步&#xff1a;良好的项目结构 良好的项目结构是一个易于维护的源码的基础。可以按照模块、功能或层次等方式…

uniapp 中过滤获得数组中某个对象里id:1的数据

// 假设studentData是包含多个学生信息的数组 const studentData [{id: 1, name: 小明, age: 18},{id: 2, name: 小红, age: 20},{id: 3, name: 小刚, age: 19},{id: 4, name: 小李, age: 22}, ]; // 过滤获取id为1的学生信息 const result studentData.filter(item > ite…

使用aidegen导入AOSP工程到Clion并配置toolchains

作者&#xff1a;Season3266 一、aidegen介绍 aidegen是AOSP中自带的一个工具&#xff0c;可以将源码中的某个工程导入进IDE&#xff0c;从而可以使用IDE的智能提示&#xff0c;提高编码效率。而源码中的工程并不是独立存在的&#xff0c;还会依赖其他工程中的各种模块&#x…

虚拟机技术

基础知识 虚拟机技术 虚拟机就是通过软件在宿主机上虚拟出一台计算机。虚拟机技术是一种资源管理技术&#xff0c;是将计算机的各种实体资源&#xff0c;如服务器、网络、内存及存储等&#xff0c;予以抽象、转换后呈现出来&#xff0c;打破实体结构间的不可切割的障碍&#…

随笔--向量数据库的检索算法

文章目录 暴力搜索&#xff08;Flat&#xff09;聚类近似最近邻算法&#xff1a;ANN局部敏感哈希索引&#xff1a;LSH存储优化&#xff1a;&#xff08;量化&#xff09;聚类码本乘积量化索引&#xff1a;PQ层次导航小世界&#xff1a;HNSW 暴力搜索&#xff08;Flat&#xff0…

如何用cpolar创建隧道,实现外网访问内网?

如何用cpolar创建隧道&#xff0c;实现外网访问内网&#xff1f; 文章目录 如何用cpolar创建隧道&#xff0c;实现外网访问内网&#xff1f; 在安装和调试完本地的cpolar后&#xff0c;我们终于可以接触到cpolar的核心功能&#xff1a;建立一条专属于自己的数据通道&#xff0c…

dirsearch Web目录扫描器使用手册-新手入门指南

声明&#xff1a;该系列文章首发于公众号&#xff1a;Y1X1n安全&#xff0c;转载请注明出处&#xff01;本公众号所分享内容仅用于每一个爱好者之间的技术讨论及教育目的&#xff0c;所有渗透及工具的使用都需获取授权&#xff0c;禁止用于违法途径&#xff0c;否则需自行承担&…

纯css实现登录表单动效

效果图&#xff1a; 代码展示 // 我这边用的是elementUI表单校验&#xff0c;更改的样式。 <el-form:model"form":rules"rules"ref"fromList":hide-required-asterisk"true"><el-form-item prop"account"><…

vim粘贴内容格式混乱解决方法

问题 复制本地文件内容后&#xff0c;咱贴到vim文本内&#xff0c;格式错乱 解决方法 打开vim配置文件 最后面加入一行 vim /etc/vimrc set pastetoggle<F11> 开发vim文件&#xff0c;进入后先按F11进入交互模式 shift insert 再次粘贴 解决

c语言野指针int*p、空指针int*p = NULL、万能指针void* p

1、野指针&#xff0c;既没有初始化的指针&#xff0c;//如果没有给指针初始化&#xff0c;则指针p的内容为随机地址&#xff0c;会随机指向&#xff0c;故成为野指针&#xff0c;不可以操作野指针 #include "stdio.h" #include <stdlib.h>int main() {//1、野…

STM32 低功耗-睡眠模式

STM32 睡眠模式 文章目录 STM32 睡眠模式第1章 低功耗模式简介第2章 睡眠模式简介2.1 进入睡眠模式2.1 退出睡眠模式 第3章 睡眠模式代码示例总结 第1章 低功耗模式简介 在 STM32 的正常工作中&#xff0c;具有四种工作模式&#xff1a;运行、睡眠、停止和待机模式。 在系统或…