Spring Boot学习篇(三)之通用mapper的使用(oracle版)

news2025/1/16 10:54:55

Spring Boot学习篇(三)之通用mapper的使用(oracle版)

1 配置pom.xml

<parent>
     <artifactId>spring-boot-starter-parent</artifactId>
     <groupId>org.springframework.boot</groupId>
     <version>2.7.2</version>
 </parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--通用mapper-->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.1.5</version>
    </dependency>
    <!--分页插件 外部的项目-->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.4.3</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <!--单元测试-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!--连接池 德鲁伊-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.1</version>
    </dependency>
    <!--oracle驱动包-->
    <dependency>

        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.4</version>
    </dependency>
</dependencies>

2.在resources文件夹下面创建application.yml文件

2.1 目录结构如下所示

在这里插入图片描述

2.2 在application.yml文件进行相应配置(数据源、mybatis、pageHelper)

#①配置数据源
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource #连接池类型
    driver-class-name: oracle.jdbc.driver.OracleDriver #驱动类
    url: jdbc:oracle:thin:@localhost:1521:orcl #地址
    username: 'scott'
    password: '123'
#②mybatis的相关配置
mybatis:
  type-aliases-package: com.zlz.entity #实体别名设置(写自定义sql时resultType里面就可以不用写全类名了)
  mapper-locations: /mappers/*.xml #mapper.xml文件扫描
#③配置分页插件 pagehelper
pagehelper:
  helper-dialect: oracle  #数据库方言,选择的是哪种数据库,就采用哪种分页方法
  reasonable: true
#④ 输出sql语句日志  
logging:
  level:
    com.zlz.mapper: debug

3 在com包.zlz包下面创建Spring boot项目启动类OracleStart1

package com.zlz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.zlz.mapper") 
//mapper接口扫描(任何一个配置类都可以,启动类也是配置类),这里需要使用的是tk那个包的
public class OracleStart1 {
    public static void main(String[] args) {
        SpringApplication.run(OracleStart1.class);
    }
}

4.在com包.zlz包.entity包下面创建实体类Emp

4.1 准备sq_emp序列,用于Emp表的自增

create sequence sq_emp
start with 8000;
-- 8000表示序列sq_emp从8000开始

4.2 实体类Emp类的内容如下所示

package com.zlz.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import tk.mybatis.mapper.annotation.KeySql;
import tk.mybatis.mapper.code.ORDER;

import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp implements Serializable {
    @Id
    //使用的是序列去回填的机制
   @KeySql(order = ORDER.BEFORE,sql = "select sq_emp.nextval from dual")
   private Integer empno;
   private String ename;
   private String job;
   private Integer mgr;
   private Date hiredate;
   private Double sal;
   private Double comm;
   private Integer deptno;
}

5 在zlz包下创建mapper包,并在mapper包下面创建EmpMapper接口

5.1 目录结构如下所示

在这里插入图片描述

5.2 Emp接口内容

package com.zlz.mapper;

import com.zlz.entity.Emp;
import tk.mybatis.mapper.common.Mapper;

public interface EmpMapper extends Mapper<Emp> {
}

6 配置好测试类的环境

import com.zlz.OracleStart1;
import com.zlz.mapper.EmpMapper;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

//①classes后面写你的启动类,②SpringBootTest.WebEnvironment.NONE代表不使用web环境,单元测试会快一些
//ctrl+alt+o 移除当前类的无效导包
@SpringBootTest(classes = OracleStart1.class,webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class Test01 {
    @Resource
    EmpMapper empMapper;
}

7.增删改查

7.1 查询

7.1.1 查全部

a 代码
@Test
public void findAll(){
    empMapper.selectAll().forEach(System.out::println);
}
b 运行截图

在这里插入图片描述

7.2.1 根据主键查单条

a 代码
 @Test
    public void findoneByPrimaryKey(){
        System.out.println(empMapper.selectByPrimaryKey(7369));
 }
b 运行截图

在这里插入图片描述

7.3.1 查单条(验证)

a 代码
@Test
public void findOneisExists(){
    Emp emp = new Emp();
    emp.setEmpno(7499);
    //selectOne只会返回一条数据,他是按照主键查询的,因此一定在实体类中需要写@id注解
    System.out.println(empMapper.selectOne(emp));
}
b 运行截图

在这里插入图片描述

7.2 新增

7.2.1 通用mapper(无需自己写sql)

a 代码
@Test
 public void addOne01(){
    Emp e=new Emp(null,"小红","会计",1123, Date.valueOf("2022-12-26"),null,null,30);
    int i = empMapper.insertSelective(e);
    System.out.println("插入结果: "+(i>0));
    System.out.println("添加后: "+e);
}
b 运行截图

在这里插入图片描述

7.2.2 使用自定义sql语句

a 在empMapper接口里面定义一个add(Emp e)方法
int add(Emp e);
b 在resource文件夹下创建mappers文件夹并创立EmpMapper.xml文件,其内容如下所示
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zlz.mapper.EmpMapper">
    <insert id="add">
          <selectKey order="BEFORE" resultType="int" keyProperty="empno">
             SELECT sq_emp.nextval FROM dual
          </selectKey>
          insert into emp values(#{empno},#{ename},#{job},#{mgr}
          ,#{hiredate},#{sal},#{comm},#{deptno})
    </insert>
</mapper>
c 在application.yml配置插入的字段值可以为空
c.1 示例代码
configuration:
  jdbc-type-for-null: 'null' #运行添加null值
c.2 示例图片

在这里插入图片描述

d.测试
d.1 代码
@Test
public void addOne02(){
    Emp e=new Emp(null,"小红","会计",1123, Date.valueOf("2022-12-26"),null,null,30);
    int i = empMapper.add(e);
    System.out.println("插入结果: "+(i>0));
    System.out.println("添加后: "+e);
}
d.2 运行截图

在这里插入图片描述

7.3 修改

a 代码

@Test
public void updateOne(){
    Emp e=new Emp();
    e.setEmpno(8001);
    e.setEname("小明");
    int i =empMapper.updateByPrimaryKeySelective(e);
    System.out.println("修改结果: "+(i>0));
}

b 运行截图

b.o 控制台输出

在这里插入图片描述

b.1 修改前

在这里插入图片描述

b.2 修改后

在这里插入图片描述

7.4 删除(按照条件)

a 代码

@Test
public void deleteMore(){
    Emp e=new Emp();
    e.setJob("会计");
    int i =empMapper.delete(e);
    System.out.println("删除结果: "+(i>0));
}

b 运行截图

b.o 控制台结果

在这里插入图片描述

b.1 删除前

在这里插入图片描述

b.2 删除后

在这里插入图片描述

7.5 删除(按照主键)

a 代码

 @Test
    public void deleteone(){
        Emp e=new Emp();
        e.setEmpno(8003);
        int i =empMapper.deleteByPrimaryKey(e);
        System.out.println("删除结果: "+(i>0));
    }

b 运行截图

b.o 控制台结果

在这里插入图片描述

b.1 删除前

在这里插入图片描述

b.2 删除后

在这里插入图片描述

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

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

相关文章

概念辨析|电子文件单轨制与电子档案单套制

电子文件单轨制和电子档案单套制是档案业务中的重要概念&#xff0c;在建设数字中国的时代背景下&#xff0c;厘清“套”与“轨”的区别和联系是革新档案工作的基础 产生背景 随着信息技术的不断发展和政务信息化的持续推进&#xff0c;电子文件逐渐在业务工作中大量出现&…

从工具到实践:如何在GitHub上保障开源项目安全?

1998年&#xff0c;Christine Peterson创造了 “开源软件”这个词。她解释道&#xff1a;“这是刻意为之&#xff0c;为了让其他人更容易理解这个领域”。同年&#xff0c;O’Reilly组织了首届“开源峰会”。 开源软件受到更多人青睐原因在于&#xff0c;用户对软件拥有更多的…

【圣诞节】简单代码实现圣诞树|圣诞贺卡 | 快来为心爱的她送上专属的圣诞礼物叭~

圣诞节马上就要到了&#xff0c;不知道给自己喜欢的人准备什么样的惊喜吗&#xff1f;作为一名程序员&#xff0c;当然是用编程制作专属于她or他的圣诞树&#xff01; 目录 &#x1f384;圣诞树 ✨3D圣诞树 代码块 打开方式 修改位置 效果展示 ✨音乐律动圣诞树 代码块…

详解 Vue 过渡 transition 动画 animation 并结合第三方库 animation.css 和 gsap

transition vue过渡组件 标签自带类名 触发时机默认类名 自定义类名 <transition name"xxx"> 自定义行内式类名 方便结合第三方库 transition 钩子 接收参数el enter 和leave 第二个参数 done 可以 决定 after-enter after-leave 的 周期内的执行时机 v-…

YonBuilder移动开发平台 AVM框架 封装虚拟数字键盘组件

AVM&#xff08;Application-View-Model&#xff09;前端组件化开发模式基于标准Web Components组件化思想&#xff0c;提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具&#xff0c;完全兼容Web Components标准&#xff0c;同时兼容Vue和React语法糖编写代码&am…

Codeforces Round #697 (Div. 3) E. Advertising Agency

翻译&#xff1a; 玛莎在一家广告公司工作。为了推广新品牌&#xff0c;她想和一些博主签约。玛莎总共有&#x1d45b;个不同的博主。编号为&#x1d456;的博主拥有&#x1d44e;&#x1d456;名粉丝。 由于玛莎的预算有限&#xff0c;她只能与&#x1d458;不同的博主签约。…

LeetCode动态规划—跳跃游戏从跳到头到跳最少下跳到头(45、55)

跳跃游戏跳跃游戏跳跃游戏Ⅱ跳跃游戏 一个下标对应的值为3&#xff0c;那证明这个位置可以跳到前后3个位置的下标处。&#xff08;3均可达&#xff09; 如果依次遍历完这个数组&#xff0c;有下标在跳跃过程中最远位置仍然不可达&#xff0c;即证明无法到达最后一个位置。 可以…

js实现九宫格抽奖功能

分享一下js的九宫格抽奖功能 首先是html部分&#xff1a; <div class"box"><div class"div2">短裙</div><div class"div3">口红</div><div class"div4">草莓</div><div class"div…

【vue】控制台中如何移除数组arr中的值?如何给数组arr中放值?

移除数组arr属性中的值&#xff1a;vm.arr.shift() 新增数组arr属性中的值&#xff1a;vm.arr.push(‘属性值’) 移除atguigu3样式后效果&#xff1a; 向数组arr中添加样式值后效果&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta…

FlinkSql开窗实例:消费kafka写入文本

前言 以前写Flink从kafka入hdfs因为业务需求和老版本缘故都是自定义BucketSink入动态目录中&#xff0c;对于简单的需求可以直接用Flink SQL API进行输出。Flink版本1.13.1。 Flink官网示例 准备 本地下载个kafka&#xff08;单机即可&#xff09;&#xff0c;新建个桌面目…

Unreal 读写自定义配置文件

基础 首先需要自定义一个继承自UObject的类&#xff0c;UCLASS加上config标志 UCLASS(config MyClass) class UMyClass: public UObject将想要和配置文件交互的属性&#xff0c;UFUNCTION加上Config标志 UPROPERTY(Config, EditAnywhere) float TestP;之后只要配置文件内存…

【日常系列】LeetCode《21·综合应用3》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) 内容 lc 217 &#xff1a;存在重复元素 https://leetcode.cn/problems/contains-duplicate/ 提示&#xff1a; 1 < nums.length < 10^5 -10^9 < nums[…

Python基础教程(2)——列表、元组、字典、集合、斐波纳契数列、end 关键字、条件控制、循环语句

1.列表 &#xff08;1&#xff09;删除列表的元素 list [Google, Runoob, 1997, 2000] print ("原始列表 : ", list) del list[2] print ("删除第三个元素 : ", list)&#xff08;2&#xff09;Python列表脚本操作符 &#xff08;3&#xff09;嵌套列表…

Arco 属性

文章目录Arco介绍1. 简介1.1 背景1.2 运行环境1.3 浏览器兼容性2. 设计价值观2.1 清晰2.2 一致2.3 韵律2.4 开放3. 设计原则3.1 及时反馈3.2 贴近现实3.3 系统一致性3.4 防止错误发生3.5 遵从习惯3.6 突出重点3.7 错误帮助3.8 人性化帮助4. 界面总体风格4.1 页面风格4.1.1 主色…

知识答题小程序如何制作_分享微信答题抽奖小程序制作步骤

知识答题小程序如何制作&#xff1f;现在越来越多的企业和组织逐步进行各种获奖知识问答小程序。那么&#xff0c;如何制作一个答题小程序呢&#xff1f;今天&#xff0c;我们一起来看看~需要的老板不要走开哦~既然点进来了&#xff0c;那就请各位老板耐心看到最后吧~怎么做一个…

JDBC如何破坏双亲委派机制

JDBC的注册会涉及到java spi机制&#xff0c;即Service Provideer Interface&#xff0c;主要应用于厂商自定义组件或插件中&#xff1b;简单说就是java来定义接口规则和方法&#xff0c;厂商实现具体逻辑&#xff0c;每家厂商根据自己产品实现的逻辑肯定不相同&#xff0c;但上…

数据库查询语句-详细篇

今天来梳理一下数据库的一些查询语句&#xff0c;做软件/移动端/电脑端&#xff0c;开发程序时必然离不开数据库的设计以及查询&#xff1b; 一&#xff1a;具体的代码如下展示&#xff1a; 1.查询数据库指定表的所有信息 select * from uploadimagecode;2.查询当前数据表部…

说说PPT的“只读模式”和“限制编辑”有何区别

对PPT的内容进行保护&#xff0c;使其不能随意编辑&#xff0c;防止意外更改&#xff0c;我们可以将PPT设置成无法编辑、无法改动的“保护模式”。 设置“保护模式”&#xff0c;一般我们都会想到【限制编辑】模式&#xff0c;但在设置的时候&#xff0c;会发现PPT里&#xff…

毕业半年年终总结

毕业半年年终总结 如果说2021年主要的内容是求职和实习 那么2022年一年主要的内容便是毕业和工作 匆匆忙忙 本科毕业了 6月份的时候参加完毕业答辩&#xff0c;也就顺利的毕业了 实际上中途也有过一些插曲&#xff0c;比如毕业设计是制作某某管理系统&#xff0c;基本上所有…

【Java编程进阶】流程控制结构详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】 文章目录1. 流程控制结构2. 顺序结构3. 分支结构3.1 单分支3.2 双分支3.3 多分支 (if-else)3.4 嵌套 if3.5 多分支结构 (switch)4. 循环结构4.1 for 循环4.2 while 循环4.3 do...while循环5. 流程跳转5.1 break5.2 …