JdbcTemplate

66 阅读2分钟

1.简介

2.准备工作

1.搭建子模块

搭建子模块 spring-jdbc-tx

2.加入依赖

在本模块下加入 spring-jdbc,MySQL驱动,druid 数据源的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.atguigu</groupId>
        <artifactId>spring</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>spring-jdbc-tx</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--spring jdbc Spring 持久化层支持jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>6.0.2</version>
        </dependency>

        <!--Mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <!--数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.15</version>
        </dependency>
    </dependencies>

</project>

3.创建 jdbc.properties (数据库属性文件)

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

4.配置spring 配置文件

beans.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 
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!--引入外部属性文件,创建数据源-->
    <context:property-placeholder location="classpath:jdbc.properties" />

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>
    <!--创建jdbcTemplate对象,注入数据源-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"> </property>
    </bean>
</beans>

5.准备数据库与测试表

3.实现CRUD

2.2.1,搭建子模块spring6-ioc-xml

在父工程目录下新建一个子工程,

并将所需的 spring-context , junit,log4j2 等相关依赖引入父工程的pom文件

遇到的问题: maven侧边栏父工程报错红色波浪线,相关子工程也报错

解决: 检查maven是否开启离线模式,删除相关依赖,重新导入或更新依赖版本

2.2.2,实验一 :获取bean

方式一:根据id获取

由于id属性指定了bean的唯一标识,所以根据bean标签属性的id属性可以精确获取到一个组件对象

public class TestUser {
public static void main(String[] args) {
     ApplicationContext context=
        new ClassPathXmlApplicationContext("bean.xml");
    //根据id获取bean
     User user = (User) context.getBean("user");
     System.out.printf("根据id获取bean:"+user);
    }
}

方式二:根据类型获取bean

类.class

//根据类型获取bean
User user2 = context.getBean(User.class);
System.out.print("根据类型获取bean:"+user2);

方式三:根据id和类型获取bean

id和类型组合

//根据id和类型获取bean
User user3 = context.getBean("user",User.class);
System.out.print("根据类型获取bean:"+user3);

注意: 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个

如果IOC容器一个配置了两个

那么根据类型获取时就会抛出异常 !

ioc容器期望是单实例对象。

扩展:

如果组件实现了接口,根据接口类型可以获取bean吗?

可以,前提是bean唯一

如果一个接口有多个实现类,这些实现类都配置了bean,可以根据接口类型获取bean吗?

不行,因为bean不唯一!

结论