【Spring】lombok、dbUtil插件应用

一、lombok插件

1. 功能:对实体类自动,动态生成get、set方法,无参、有参构造.....

2. 步骤

        (1)idea安装插件(只做一次)

        (2)添加坐标

        (3)编写注解

                @NoArgsConstructor :无参构造

                @AllArgsConstructor :全参构造

                @Data :get、set、toString方法

package com.apesource.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@NoArgsConstructor  // 无参
@AllArgsConstructor // 全参
@Data // get、set、toString方法
public class Account implements Serializable {
    private int aid;
    private String aname;
    private int amoney;

    public Account(String aname,int amoney){
        this.aname=aname;
        this.amoney=amoney;
    }
}

二、Serializable

        一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化。

        序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。

三、dbUtil-阿帕奇提供操作数据库的插件

1. 依赖:

        

2. 数据源QuerryRunner注入(applicationContext.html)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 加载资源文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 注入数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${msg1}"/>
        <property name="jdbcUrl" value="${msg2}"/>
        <property name="user" value="${msg3}"/>
        <property name="password" value="${msg4}"/>
    </bean>
    <!-- 注入QueryRunner -->
    <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner">
        <constructor-arg name="ds" ref="dataSource"/>
    </bean>


    <!-- 注入dao -->
    <bean id="mapperImp" class="com.apesource.dao.AccountMapperImp">
        <property name="queryRunner" ref="queryRunner"/>
    </bean>

    <!-- 注入service -->
    <bean id="service" class="com.apesource.service.AccountServiceImp">
        <property name="mapper" ref="mapperImp"/>
    </bean>

    <!-- 注入controller -->
    <bean id="controller" class="com.apesource.controller.AccountControllerImp">
        <property name="service" ref="service"/>
    </bean>

</beans>

3. 核心类QueryRunner

4. QueryRunner提供的方法

        (1)query()  查询

                BeanHandler:把结果集转为一个 Bean,并返回。Bean的类型在创建BeanHandler 对象时以 Class 对象的方式传入 BeanHandler(Class<T> type)。

           BeanListHandler:把结果集转为一个 Bean 的 List, 并返回。Bean的类型在创建 BeanListHanlder对象时以 Class对象的方式传入BeanListHandler(Class<T> type)。

        (2)update() 增删改

package com.apesource.dao;

import com.apesource.pojo.Account;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import java.sql.SQLException;
import java.util.List;

public class AccountMapperImp implements IAccountMapper {

    // 操作数据库的核心类
    QueryRunner queryRunner;

    public void setQueryRunner(QueryRunner queryRunner) {
        this.queryRunner = queryRunner;
    }

    @Override
    public void save(Account account) {
        try {
            queryRunner.update("insert into account(aname,amoney) values(?,?)",account.getAname(),account.getAmoney());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    @Override
    public void deleteById(int id) {
        try {
            queryRunner.update("delete from account where aid =?",id);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }

    @Override
    public void updateById(Account account) {
        try {
            queryRunner.update("update account set aname=?,amoney=? where aid=?",account.getAname(),account.getAmoney(),account.getAid());
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }

    @Override
    public Account findByName(String name) {
        try {
            return queryRunner.query("select * from account where aname=?",new BeanHandler<Account>(Account.class),name);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Account> findAll() {
        try {
            return queryRunner.query("select * from account",new BeanListHandler<Account>(Account.class));
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}

四、junit测试

1. 使用步骤

        (1)坐标(依赖)

        

        (2)注解

                修饰方法

                        @Test======>可以运行的方法

                        @Before====>@Test运行之前

                        @After=====>@Test运行之后

                基于xml实现:

package com.apesource.test;

import com.apesource.controller.IAccountController;
import com.apesource.pojo.Account;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class Test01 {

    ClassPathXmlApplicationContext applicationContext = null;
    IAccountController controller = null;

    @Before  // 测试运行前执行
    public void beforeMethod(){
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        controller = (IAccountController) applicationContext.getBean("controller");
    }

    @After // 测试执行后执行
    public void afterMethod(){
        applicationContext.close();  // 关闭容器
    }

    @Test
    public void show3(){
        controller.save(new Account("王五",7000));
    }
    @Test
    public void show4(){
        List<Account> all = controller.findAll();
        for (int i = 0; i < all.size(); i++) {
            Account account = all.get(i);
            System.out.println(account);
        }
    }


}

                修饰类

                        @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境,搭配@ContextConfiguration 使用,Spring整合JUnit4测试时,使用注解引入多个配置文件。

                基于annotation注解实现

package com.apesource.test;

import com.apesource.controller.IAccountController;
import com.apesource.pojo.Account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class Test02 {

    @Autowired
    IAccountController controller;

    @Test
    public void show1(){
        controller.save(new Account("小陈",6000));
    }

    @Test
    public void show2(){
        List<Account> all = controller.findAll();
        for (int i = 0; i < all.size(); i++) {
            Account account = all.get(i);
            System.out.println(account);
        }
    }

    @Test
    public void show3(){
        Account account = new Account();
        account.setAid(4);
        account.setAname("辰辰");
        account.setAmoney(8000);
        controller.updateById(account);
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 975 (Div. 2) A-C 题解

这次看到 C 题分数 1750 就开始害怕了&#xff0c;用小号打的比赛&#xff0c;一直觉得做不出来&#xff0c;最后才想到 A. Max Plus Size 题意 给你一些整数&#xff0c;选择一些涂成红色&#xff0c;两两不能相邻&#xff0c;你的得分为&#xff1a; [ 红色元素的个数 ] …

Tableau数据可视化入门

目录 一、实验名称 二、实验目的 三、实验原理 四、实验环境 五、实验步骤 1、Tableau界面引导 2、数据来源 3、数据预处理操作 4、制作中国各个地区的利润图表 4.1条形图 4.2气泡图 5、制作填充地球图 一、实验名称&#xff1a; 实验一&#xff1a;Tableau数据可视…

PyCharm 的安装和配置

环境要求&#xff1a; OS&#xff1a;Windows / macOS / Linux (此处使用 Windows 10 进行演示)Python&#xff1a;包括但不限于 Anaconda&#xff0c;miniconda&#xff0c;Python。在 Windows 下只要能找到 python.exe 即可 Download 进入 PyCharm 官网&#xff0c;选择对…

gitlab修改访问端口

目录 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 3.重新配置 4.重启gitlab 1.找到gitlab.rb文件&#xff0c;一般在/etc/gitlab/路径下 2.打开配置文件&#xff0c;加上代码 打开文件 sudo vi gitlab.rb 加上默认端口配…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…

OJ在线评测系统 前端创建题目(增) 更新题目(改) 题目列表(查) 以及做题页面的开发 基于VUECLI脚手架画界面

目录 前端创建页面的开发一 创建一个路由 用acro design写 前端创建页面的开发二 题目管理页面 搜索 最終效果 题目更新页面的开发 携带参数的那种 修改路由 页码更新细节 我们先处理菜单项的权限控制和权限隐藏 在这里改 属性绑定一个函数 可以参考聚合搜索项目…

某客户Oracle RAC无法启动故障快速解决

某日&#xff0c;9:50左右接到好友协助需求&#xff0c;某个客户Oracle RAC无法启动&#xff0c;并发过来一个报错截图&#xff0c;如下&#xff1a; 和客户维护人员对接后&#xff0c;远程登录服务端进行故障分析。 查看hosts信息&#xff0c;首先进行心跳测试&#xff0c;测…

RK3568的型号区分

RK3568是瑞芯微公司设计开发和生产的MPU芯片产品。RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;集成4核ARM架构A55处理器和Mali G52 2EE图形处理器&#xff0c;支持4K解码和1080P编码。内置独立的NPU&#xff0c;0.8Tops算力&#xff0c;可…

【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档&#xff1a; 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ&#xff0c;目前阿里云支持4.x和5.x版本 项目集成思路&…

巨控协议转换网关GRM321GRM322GRM323应用场景

巨控工业协议网关GRM321,GRM322,GRM323是网口型网关&#xff0c;支持各种PLC的TCP协议&#xff0c;具备多路RS485,RS232和三个TCP网口。能实现RS485&#xff0c;RS232和TCP的工业协议的零代码无缝转换&#xff0c;能极大节约工程师编程时间&#xff0c;保障数据采集的可靠性。 …

无人机侦测:频谱无线电侦测设备技术详解

无人机侦测中的频谱无线电侦测设备技术是一项复杂而关键的技术&#xff0c;它主要通过分析无线电频谱中的信号来探测和识别无人机。以下是该技术的详细解析&#xff1a; 一、技术原理 频谱探测技术&#xff1a;该技术通过分析信号在频域上的分布和特性&#xff0c;来识别、测…

[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用

ACL2024-长尾知识在检索增强型大型语言模型中的作用 On the Role of Long-tail Knowledge in Retrieval Augmented Large Language Models Authors: Dongyang Li, Junbing Yan, Taolin Zhang, Chengyu Wang, Xiaofeng He, Longtao Huang, Hui Xue, Jun Huang 1.概览 问题解决&…

荣业食品销售费用每年上亿元:主要产品收入大降,电商占比过低

《港湾商业观察》黄懿 今年3月&#xff0c;广东荣业食品有限公司的控股公司Wing Yip Food Holdings Group Limited&#xff08;下称“荣业食品”&#xff09;向美国SEC递交了纳斯达克上市申请。 据悉&#xff0c;2023年11月&#xff0c;商务部宣布移除了一批共计55家因长期经…

AI大模型的基本流程

这篇文章主要是记录自己的问题&#xff0c;虽然说AI大数据模型已经出现了很久&#xff0c;但是一直找不到它与企业的关系&#xff0c;因为有ghat gpt,只要应用这个人工智能就可以了&#xff0c;所以思想一直没有转变过来。 昨天梳理了一下AI大数据的模型&#xff0c;解答了我的…

VMware 虚拟机配置固定 IP

相关链接&#xff1a; SSH 服务配置与 Network error: Connection refused 解决 1. 查看 VMware 网络配置 点击【编辑】 -> 【虚拟网络编辑器】 选择【更改设置】查看 VMnet8 配置信息 选择【NAT设置】 查看当前虚拟机的网关是 192.168.17.2&#xff08;也可以进行修改…

Tpflow:提升开发效率的PHP工作流引擎

Tpflow&#xff1a;提升开发效率的PHP工作流引擎 今天要跟大家介绍的是一款能够显著提升开发效率的工具——Tpflow&#xff01;它是一个专门为PHP开发者设计的工作流引擎&#xff0c;致力于帮助你减少80%以上的代码量&#xff0c;轻松管理复杂的业务流程。让我们一起来看看它的…

java计算机毕设课设—超级玛丽游戏(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式在最下方 java计算机毕设课设—超级玛丽游戏(附源码、文章、相关截图、部署视频) 超级玛丽游戏是一款经典的平台游戏&#xff0c;自1985年推出以来&#xff0c;已成为全球玩家心目中的经典之作。玩家操控玛丽奥在多样化的关卡中进行冒…

【线程】线程池

线程池通过一个线程安全的阻塞任务队列加上一个或一个以上的线程实现&#xff0c;线程池中的线程可以从阻塞队列中获取任务进行任务处理&#xff0c;当线程都处于繁忙状态时可以将任务加入阻塞队列中&#xff0c;等到其它的线程空闲后进行处理。 线程池作用&#xff1a; 1.降…

如何使用ChatGPT,提示词篇之【编程代码】ChatGPT镜像网站

一、 ChatGPT可以做什么&#xff1f; ChatGPT能做的事情非常多&#xff01;它不仅仅是一个对话AI。以下是一些主要功能&#xff1a; 1. 回答问题&#xff1a;无论是学术问题、技术问题&#xff0c;还是生活琐事&#xff0c;ChatGPT都能提供帮助。 2. 写作助手&#xff1a;可以…

LeetCode - #124 二叉树中的最大路径和(Top 100)

文章目录 前言1. 描述2. 示例3. 答案关于我们前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新到 123 期…