Javaee Spring JdbcTemplate基本使用 基于xml配置方式

news2024/11/14 14:56:31

目录

哈哈哈哈,说好是要写一篇关于jdbcTemplate的基本使用,貌似说跑题了,但是主体还是用jdbctemplate实现的,有耐心看完的话相信能有点点收获的哦!

 项目结构:

 小结:

遇到了个小问题,数据库为8.0版本需要更换spring.xml的配置方式

1.driver,需要改成

2.url需要拼接

解决方式: 用资源文件注入

举例:假设如下登录界面,点击登录,假设登录失败,会跳转一个失败界面,这是怎么回事呢?

 底层逻辑:页面发出请求,将数据给到表现层,再由表现层给到业务层,再由业务层给到数据访问层,再由数据访问层访问数据库是否存在该数据,两种结果,存在或者不存在,此时会在把这个数据按顺序传回页面

由于我们没学表现层,将数据拿至测试类中,该怎么实现呢?

​编辑 运行成功!


哈哈哈哈,说好是要写一篇关于jdbcTemplate的基本使用,貌似说跑题了,但是主体还是用jdbctemplate实现的,有耐心看完的话相信能有点点收获的哦!

 项目结构:

导入jar包:

 AccountDao.java

package wwx.dao;

import wwx.domain.Account;

import java.util.List;

public interface AccountDao {
    //查询所有
    public List<Account> findAll();
}

 AccountDaoImpl.java

package wwx.dao;

import wwx.domain.Account;

import java.util.List;

public class AccountDaoImpl implements AccountDao {
    //查询所有
    @Override
    public List<Account> findAll() {
        System.out.println("我是Dao...");

        return null;
    }
}

Account.java

package wwx.domain;

public class Account{
    private String username;
    private int password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getPassword() {
        return password;
    }

    public void setPassword(int password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password=" + password +
                '}';
    }
}

 AccountServie.java

package wwx.service;

import wwx.domain.Account;

import java.util.List;

public interface AccountService {
   //查询所有
    public List<Account> findAll();
}

 AccountServieImpl.java

package wwx.service;
import wwx.dao.AccountDao;
import wwx.dao.AccountDaoImpl;
import wwx.domain.Account;

import java.util.List;

public class AccountServiceImpl implements AccountService {

    @Override
    public List<Account> findAll() {



        System.out.println("我是service...");
        AccountDao accountDao=new AccountDaoImpl();
        accountDao.findAll();
        return null;
    }
}

JDBCTest.java

package wwx.test;
import org.junit.Test;
import wwx.dao.AccountDao;
import wwx.domain.Account;
import wwx.service.AccountService;
import wwx.service.AccountServiceImpl;

import java.util.List;

public class JDBCTest {
    @Test
    public void test01()
    {   //在test中创建了一个业务层对象,用业务层对象调用业务层中的调用方法,
        // 此时业务层方法中创建了Dao对象,调用了Dao方法
        //这样写的话,类与类直接耦合度太高了,
        // 举个例子,假设Dao包下的AccountDaoImpl突然没有了,AccountServiceImpl中代码就会报错
        //该如何解决呢,使用Spring:解耦,降低类内之间的联系,
        //也就是不用在AccountServiceImpl中去new Dao ,让Spring去new,如果要用到,通过注入方式注入进来


        AccountService accountService=new AccountServiceImpl();
        accountService.findAll();
    }


}

 小结:

 //在test中创建了一个业务层对象,用业务层对象调用业务层中的调用方法,
    // 此时业务层方法中创建了Dao对象,调用了Dao方法
    //但是这样写的话,类与类直接耦合度太高了,
    // 举个例子,假设Dao包下的AccountDaoImpl突然没有了,AccountServiceImpl中代码就会报错
    //该如何解决呢,使用Spring:解耦,降低类内之间的联系,
    //也就是不用在AccountServiceImpl中去new AccountDao ,让Spring去new,如果要用到,通过注入方式注入进来

jdbcTest.java

package wwx.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import wwx.dao.AccountDao;
import wwx.domain.Account;
import wwx.service.AccountService;
import wwx.service.AccountServiceImpl;

import java.util.List;

public class JDBCTest {
    @Test
    public void test01()
    {   //在test中创建了一个业务层对象,用业务层对象调用业务层中的调用方法,
        // 此时业务层方法中创建了Dao对象,调用了Dao方法
        //这样写的话,类与类直接耦合度太高了,
        // 举个例子,假设Dao包下的AccountDaoImpl突然没有了,AccountServiceImpl中代码就会报错
        //该如何解决呢,使用Spring:解耦,降低类内之间的联系,
        //也就是不用在AccountServiceImpl中去new Dao ,让Spring去new,如果要用到,通过注入方式注入进来
//        AccountService accountService=new AccountServiceImpl();
//        accountService.findAll();

        //加载配置文件
        ApplicationContext app=new ClassPathXmlApplicationContext("Spring.xml");
        //获得bean
        //spring容器中id唯一
        //需要强转
        AccountService accountService = (AccountService) app.getBean("accountService");
        //调用方法
        accountService.findAll();
        //此时删除AccountServiceImpl,编译不会报错,但是无法运行,耦合不能消除,但能降低



    }


}

Spring.xml 

<?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">

<!--service层-->
    <bean id="accountService" class="wwx.service.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"></property>
    </bean>

    <!--Dao层-->
    <bean id="accountDao" class="wwx.dao.AccountDaoImpl"></bean>
</beans>

//此时删除AccountServiceImpl,编译不会报错,但是无法运行,耦合不能消除,但能降低

 借助Dao层访问数据库,两种技术,jdbctemplate,mybabties,此时用jdbctemplate

但是这样又回到之前的,在类中new,改用注入由于数据库为8.0版本运行失败

遇到了个小问题,数据库为8.0版本需要更换spring.xml的配置方式

1.driver,需要改成

<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>

2.url需要拼接

useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf-8
<property name="jdbcUrl" value="mysql://localhost:3306/wwx?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf-8"></property>

但是xml文件中无法识别&所以改用资源文件注入

解决方式: 用资源文件注入

Spring.xml

<?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"/>
    <!--数据源-->
    <!--遇到了个小问题,及数据库为8.0版本需要更换spring.xml的配置方式-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="driverClass" value="${jdbc.driver}"></property>
     <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

     <!--service层-->
    <bean id="accountService" class="wwx.service.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"></property>
    </bean>

    <!--Dao层-->
    <bean id="accountDao" class="wwx.dao.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
        <!--name中jdbcTemplate,是AccountDaoImpl类中的成员属性,ref中jdbcTemplate是jdbcTemplate层的id-->
    </bean>
    <!--JdbcTempalte层-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property><!--注入-->
    </bean>

</beans>

jdbc.propertities

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/wwx?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

此时到JDBCTest.java中运行test01发现成功访问数据库

举例:假设如下登录界面,点击登录,假设登录失败,会跳转一个失败界面,这是怎么回事呢?

 底层逻辑:页面发出请求,将数据给到表现层,再由表现层给到业务层,再由业务层给到数据访问层,再由数据访问层访问数据库是否存在该数据,两种结果,存在或者不存在,此时会在把这个数据按顺序传回页面

由于我们没学表现层,将数据拿至测试类中,该怎么实现呢?

原理:传递参数时是通过方法的参数值传递,返回数据时,是通过方法的返回值往回返

 

 

 运行成功!

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

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

相关文章

面试题——Arrays.asList()得到的List可以修改吗?

概述 前几天面试问的关于Arrays.asList()的问题&#xff0c;总结一下常见问题。 Arrays.asList()使用了什么设计模式 答案&#xff1a;使用了适配器模式。适配器模式简单来说就是不修改原对象&#xff0c;为了适应新的需求&#xff0c;适配成另一种接口或者类&#xff0c;我…

常见WebShell客户端的流量特征

以下的全是我在各个大佬哪里看文章做的总结-相当于我的笔记 中国蚁剑(AntSword) 大佬文章地址 https://www.cnblogs.com/NoCirc1e/p/16275608.htmlhttps://www.cnblogs.com/NoCirc1e/p/16275608.html 蚁剑PHP类WebShell链接流量 POST /uploadfiles/shell.php HTTP/1.1 Hos…

Windows安装Dolby Vision 杜比视界插件

前言 使用普通的播放器播放杜比视界视频时会出现发紫和发绿&#xff0c;两者来回切换的情况&#xff0c;要么使用专门的播放器&#xff0c;要么使用Windows自带播放器加上安装相应拓展 在使用Windows自带的“电影和电视”播放杜比视界(Dolby Vision)的视频时&#xff0c;需要安…

iOS 自定义Tab页

在iOS里面可以用UISegmentedControl控件来表示Tab页&#xff0c;但其样式难以修改&#xff0c;我们一般会自定义Tab页。 1. 自定义Tab页 在这里我们首先定义UKTabItemView用来显示其中的标签页。 // 标签页代理 protocol UKTabItemViewDelegate <NSObject>- (void)onT…

Kafka源码分析之Producer数据发送流程(四)

概述 书接上回的producer发送流程&#xff0c;在准备工作完成后&#xff0c;kafka的producer借助Sender和KafkaClient两大组件完成了数据的发送。其底层封装了java的NIO的组件channle以及selector&#xff0c;对于NIO组件不太熟悉的同学可以自行查询相关文档。 下面我整理了k…

从0搭建Vue3组件库(二):Monorepo项目搭建

本篇文章是从0搭建Vue3组件库系列文章第二篇,本篇文章将带领大家使用pnpm搭建一个简单的Monorepo项目,并完成包的关联与测试 什么是 Monorepo 其实很简单,就是一个代码库里包含很多的项目,而这些项目虽然是相关联的,但是在逻辑上是独立的,可以由不同人或者团队来维护 为什么…

Scala之集合(1)

目录 ​​​​​​​集合介绍&#xff1a; 不可变集合继承图&#xff1a;​编辑 可变集合继承图 数组&#xff1a; 不可变数组&#xff1a; 样例代码&#xff1a; 遍历集合的方法&#xff1a; 1.for循环 2.迭代器 3.转换成List列表&#xff1a; 4.使用foreach()函数&a…

WebServer项目(二)->linux网络编程基础知识

WebServer项目->linux网络编程基础知识其中&#xff0c;遇到的错误总结1). read&#xff1a;Connection reset by peer2).什么叫连接被重置&#xff1f;1. socket 介绍2. 字节序从主机字节序到网络字节序的转换函数&#xff1a;htons、htonl&#xff1b; 从网络字节序到主机…

科创人·中建三局一公司尹奎:数字化变革能创造全新行业,其意义超越形式、范式创新

尹奎 中建三局一公司技术中心主任 教授级高级工程师&#xff0c;BIM领域资深专家&#xff0c;完成10余个基于BIM的相关研究课题&#xff0c;获省部级以上科技进步奖 13 项&#xff1b;公开出版专著3部&#xff0c;参与编写“十二五”国家重点图书出版规划项目《BIM应用施工》&a…

CCS5.5环境设置

CCS5.5环境设置 文件编码格式设置利用断点导入*.dat文件先用Python生成*.dat文件DSP代码&#xff08;sys/bios&#xff09; 步骤利用strip6x工具去除**.out文件中的调试信息硬件跟踪功能应用名词解释使用方法 ccs显示图片参数设置 文件编码格式设置 可分别对工作空间、工程、单…

Mysql下载安装

1.Mysql官网下载 MySQLhttps://www.mysql.com/ 有商业版和社区版&#xff0c;商业版使用收费&#xff0c;有试用期&#xff0c;社区版免费&#xff0c;选择社区版即可&#xff1a; 点击MySQL社区服务器&#xff1a; 选择要安装的版本&#xff1a; 进行下载即可&#xff1a; 2…

Docker设置http proxy代理

需求&#xff1a; 由于公司服务器无法正常访问公网&#xff0c;想要下载一些外部依赖包需要配置公司的内部代理。 Docker构建镜像或拉取镜像时需要通过代理访问外网&#xff0c;可以按照以下步骤设置HTTP代理 目录 创建目录 创建并编辑配置文件 重新加载Docker服务配置 重启…

Devops流程探究

1、DevOps面向对象 软件开发是由开发团队和运维团队共同协同配合才能完成一个软件的开发。 2、开发团队和运维团队 开发团队主要负责软件的开发和迭代更新&#xff0c;运维团队则是负责测试和部署上线。 3、解决问题 但是&#xff0c;这样会存在一个问题&#xff0c;只有当…

第五章 数据链路层与局域网

数据链路层服务 组帧&#xff1b;将要传输的数据封装成帧链路接入&#xff1b;可分为点对点链路&#xff08;独占&#xff09;和广播链路&#xff08;共享&#xff09;可靠交付&#xff1b;即在相邻节点间经数据链路实现数据报的可靠传输差错控制&#xff1b;检错纠错 差错控…

前端基础复习

1.什么叫HTML5&#xff1f;和原本的所说的HTML有什么区别&#xff1f; 本质上html和html5是一样的的。区别有&#xff1a; 1. 在文档类型声明上 HTML4.0 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loos…

密码加密之bcrypt

在这里是用的bcrypt加密算法&#xff0c;这种现在比较流行 而且无法进行解密 引入依赖 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</ar…

JetBrains AppCode 2023.1 (macOS x64、aarch64) - 适用于 iOS/macOS 开发的智能 IDE

Xcode 14.3 compatibility, Swift refactorings and intentions, the IDE’s UI, and Kotlin Multiplatform Mobile. 请访问原文链接&#xff1a;https://sysin.org/blog/jb-appcode-2023/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a…

技术分享 | OMS 初识

作者&#xff1a;高鹏 DBA&#xff0c;负责项目日常问题排查&#xff0c;广告位长期出租 。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 本文主要贡献者&#xff1a;进行OMS源码分析的…

GPT-4,大增长时代的序幕

虽然我们早在 2017 年就预测了超大模型的到来&#xff0c;因此才搞了分布式深度学习框架 OneFlow&#xff08;github.com/Oneflow-Inc/oneflow/&#xff09;&#xff0c;且 2020 年的 GPT-3 也掀起了大模型热潮&#xff08;OneFlow—— 让每一位算法工程师都有能力训练 GPT&…

BGP相关实验

实验要求及其拓扑图 划分好IP的拓扑图 实验分析 1,AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24该地址不能在任何协议中宣告&#xff0c;AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以互相…