Sfoglia il codice sorgente

2025年11月30日-依赖注入&spring容器&注解开发&spring整合mybatis

WanJL 4 giorni fa
parent
commit
3191cb58fd
30 ha cambiato i file con 965 aggiunte e 1 eliminazioni
  1. 91 0
      springAndMybatis/pom.xml
  2. 39 0
      springAndMybatis/src/main/java/com/sf/config/JdbcConfig.java
  3. 59 0
      springAndMybatis/src/main/java/com/sf/config/MybatisConfig.java
  4. 25 0
      springAndMybatis/src/main/java/com/sf/config/SpringConfig.java
  5. 44 0
      springAndMybatis/src/main/java/com/sf/entity/Tea.java
  6. 64 0
      springAndMybatis/src/main/java/com/sf/mapper/TeaMapper.java
  7. 27 0
      springAndMybatis/src/main/java/com/sf/service/TeaService.java
  8. 79 0
      springAndMybatis/src/main/resources/com/sf/mapper/TeaMapper.xml
  9. 6 0
      springAndMybatis/src/main/resources/jdbc.properties
  10. 36 0
      springAndMybatis/src/test/java/com/sf/service/TeaServiceTest.java
  11. 33 0
      springDemo/src/main/java/com/sf/di/Main.java
  12. 13 0
      springDemo/src/main/java/com/sf/di/mapper/BookMapper.java
  13. 13 0
      springDemo/src/main/java/com/sf/di/mapper/TeacherMapper.java
  14. 26 0
      springDemo/src/main/java/com/sf/di/mapper/impl/BookMapperImpl.java
  15. 27 0
      springDemo/src/main/java/com/sf/di/mapper/impl/TeacherMapperImpl.java
  16. 13 0
      springDemo/src/main/java/com/sf/di/service/BookService.java
  17. 13 0
      springDemo/src/main/java/com/sf/di/service/TeacherService.java
  18. 27 0
      springDemo/src/main/java/com/sf/di/service/impl/BookServiceImpl.java
  19. 31 0
      springDemo/src/main/java/com/sf/di/service/impl/TeacherServiceImpl.java
  20. 2 0
      springDemo/src/main/java/com/sf/ioc/service/impl/UserServiceImpl.java
  21. 24 1
      springDemo/src/main/resources/applicationContext.xml
  22. 47 0
      springDemo02/pom.xml
  23. 38 0
      springDemo02/src/main/java/com/sf/Main.java
  24. 39 0
      springDemo02/src/main/java/com/sf/config/JdbcConfig.java
  25. 25 0
      springDemo02/src/main/java/com/sf/config/SpringConfig.java
  26. 13 0
      springDemo02/src/main/java/com/sf/mapper/UserMapper.java
  27. 28 0
      springDemo02/src/main/java/com/sf/mapper/impl/UserMapperImpl.java
  28. 13 0
      springDemo02/src/main/java/com/sf/service/UserService.java
  29. 59 0
      springDemo02/src/main/java/com/sf/service/impl/UserServiceImpl.java
  30. 11 0
      springDemo02/src/main/resources/jdbc.properties

+ 91 - 0
springAndMybatis/pom.xml

@@ -0,0 +1,91 @@
+<?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>
+
+    <groupId>com.sf</groupId>
+    <artifactId>springAndMybatis</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>5.2.10.RELEASE</version>
+        </dependency>
+
+        <!--引入Java操作MySQL依赖-->
+        <!--
+            如果artifactId是多个单词组成,并且中间使用-进行分隔,那么就是某个厂商为了和另一个组织框架进行连接整合而开发的
+            开发的组织就是前面的那个单词
+            横线后面的是要整合的,要符合后面组织的依赖
+            比如:mysql-connector-j
+            MySQL官方针对Java语言,专门开发的框架依赖
+        -->
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+
+        <!--引入阿里巴巴提供的管理数据库的数据源(连接池)依赖-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.16</version>
+        </dependency>
+        <!--引入mybatis的依赖坐标-->
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis</artifactId>
+            <version>3.5.7</version>
+        </dependency>
+        <!--引入spring封装jdbc的依赖坐标-->
+        <!--
+            spring官方开发出来为了符合jdbc的规则的依赖框架
+        -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-jdbc</artifactId>
+            <version>5.2.10.RELEASE</version>
+        </dependency>
+        <!--引入spring操作mybatis的依赖坐标-->
+        <!--
+            mybatis官方为了符合spring的整合规则开发出来的框架依赖
+        -->
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis-spring</artifactId>
+            <version>1.3.0</version>
+        </dependency>
+        <!--引入Lombok依赖-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.26</version>
+        </dependency>
+
+        <!--引入junit依赖-->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13</version>
+            <scope>test</scope>
+        </dependency>
+        <!--引入spring整合junit依赖-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+            <version>5.2.10.RELEASE</version>
+        </dependency>
+    </dependencies>
+
+</project>

+ 39 - 0
springAndMybatis/src/main/java/com/sf/config/JdbcConfig.java

@@ -0,0 +1,39 @@
+package com.sf.config;
+
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+
+import javax.sql.DataSource;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title JdbcConfig
+ * @description 用来配置连接数据库的相关信息
+ * @create 2025/11/30
+ */
+public class JdbcConfig {
+    //EL表达式
+    @Value("${jdbc.driver}")
+    private String driver;
+    @Value("${jdbc.url}")
+    private String url;
+    @Value("${jdbc.username}")
+    private String username;
+    @Value("${jdbc.password}")
+    private String password;
+    //怎样将第三方库提供的类,作为bean注入到IOC容器中
+    @Bean   // 表示当前方法的返回值作为bean对象,注入到IOC容器中
+    public DataSource getDataSource() {
+        //创建了德鲁伊Druid提供的第三方数据源,作为Java连接数据库的数据源对象
+        DruidDataSource ds = new DruidDataSource();
+        ds.setDriverClassName(driver);
+        ds.setUrl(url);
+        ds.setUsername(username);
+        ds.setPassword(password);
+        return ds;
+    }
+
+}

+ 59 - 0
springAndMybatis/src/main/java/com/sf/config/MybatisConfig.java

@@ -0,0 +1,59 @@
+package com.sf.config;
+
+
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+
+import javax.sql.DataSource;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title MybatisConifg
+ * @description Mybatis核心配置类
+ * @create 2025/11/30
+ */
+public class MybatisConfig {
+    /*
+        之前在使用mybatis的时候,需要手动创建SqlSessionFactory(SQL会话工厂)对象,
+        通过工厂对象开启一个SqlSession会话对象。
+        在使用spring整合mybatis的时候,SqlSessionFactory和Mapper对象都可以交给spring管理。
+        我们只需要向IOC容器注入Bean就可以了
+        为了方便我们注入Bean,mybatis-spring依赖为我们提供了一个类
+        就是SqlSessionFactoryBean类型,通过创建它的对象,把它注入到IOC容器作为bean对象
+        以后我们也是通过IOC容器获取到SqlSessionFactoryBean对象
+        然后再获取到SqlSessionFactory对象,就可以创建SqlSession对象
+
+        之所以这么麻烦,因为以spring、mybatis为代表的框架,属于通用型框架,作用是为了让一切项目都可以使用,
+        所以步骤会很多。
+     */
+    @Bean
+    public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) {
+        //创建SqlSessionFactory(SQL会话工厂)对象的bean对象
+        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
+        //1、扫描整个包,为里面的所有实体类取别名
+        bean.setTypeAliasesPackage("com.sf.entity");
+        //2、设置mybatis使用的数据源(连接池)
+        bean.setDataSource(dataSource); //会在IOC容器中找到这个对象,传入方法,如果没有就报错--这种方式属于注入引用数据类型
+        //把这个对象作为bean注入到IOC容器
+        return bean;
+    }
+
+    /*
+        MapperScannerConfigurer对象直译就是Mapper扫描的配置类
+        MapperScannerConfigurer替换的就是mybatis核心配置文件中的<mappers>标签
+        用来自动扫描mapper接口并且创建接口的代理对象,自动注入到IOC容器中。
+        mapper接口是定了访问数据库的方法接口
+        我们在service层就可以直接使用mapper接口了
+        MapperScannerConfigurer作用:
+            1、扫描指定路径下所有mapper接口
+            2、把扫描到的mapper接口生成代理对象,注入到IOC容器中
+     */
+    @Bean
+    public MapperScannerConfigurer getMapperScannerConfigurer() {
+        MapperScannerConfigurer msc = new MapperScannerConfigurer();
+        msc.setBasePackage("com.sf.mapper");
+        return msc;
+    }
+}

+ 25 - 0
springAndMybatis/src/main/java/com/sf/config/SpringConfig.java

@@ -0,0 +1,25 @@
+package com.sf.config;
+
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SpringConfig
+ * @description
+ * @create 2025/11/30
+ */
+//1、告诉Spring,这个类是spring框架的核心配置类,作用就是替代spring框架的核心配置文件applicationContext.xml
+@Configuration
+//2、告诉spring,要扫描哪些类的对象作为IOC容器的bean
+@ComponentScan({"com.sf.service","com.sf.mapper"})
+//3、告诉spring,要扫描哪些属性文件  classpath:指的是当前项目路径下面的资源目录resources目录
+@PropertySource({"classpath:jdbc.properties"})
+//4、告诉spring,要导入某个类作为配置类
+@Import({JdbcConfig.class,MybatisConfig.class})
+public class SpringConfig {
+}

+ 44 - 0
springAndMybatis/src/main/java/com/sf/entity/Tea.java

@@ -0,0 +1,44 @@
+package com.sf.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Tea 茶叶实体类,它是和数据库中的tea表有对应关系的
+ * @description
+ * @create 2025/10/12
+ */
+//第一个注解:帮我们自动生成get set equals hashCode toString方法
+@Data
+@AllArgsConstructor //生成全部参数的构造方法
+@NoArgsConstructor  //生成无参的构造方法
+public class Tea {
+    /**
+     * 茶叶id
+     */
+    private Integer id;
+    /**
+     * 茶叶名称
+     */
+    private String teaName;
+    /**
+     * 茶叶类型id
+     */
+    private Integer teaTypeId;
+    /**
+     * 排序号
+     */
+    private Integer ordered;
+    /**
+     * 介绍说明
+     */
+    private String description;
+    /**
+     * 茶叶状态
+     */
+    private Integer status;
+}

+ 64 - 0
springAndMybatis/src/main/java/com/sf/mapper/TeaMapper.java

@@ -0,0 +1,64 @@
+package com.sf.mapper;
+
+import com.sf.entity.Tea;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeaMapper
+ * @description
+ * @create 2025/10/26
+ */
+@Repository
+public interface TeaMapper {
+    /**
+     * 查询所有茶叶信息
+     * @return
+     */
+    List<Tea> selectAll();
+
+    /**
+     * 新增茶叶信息
+     * @param tea 封装茶叶信息的对象
+     * @return 受到影响的行数
+     */
+    Integer insert(Tea tea);
+
+    /**
+     * 修改茶叶信息
+     * @param tea
+     * @return
+     */
+    Integer update(Tea tea);
+
+    /**
+     * 删除茶叶信息
+     * @param id
+     * @return
+     */
+    Integer delete(Integer id);
+
+    /**
+     * 根据id查询单个茶叶信息
+     * @param id
+     * @return
+     */
+    Tea selectById(Integer id);
+
+    /**
+     * 根据条件查询茶叶信息,查询条件封装到Tea对象中
+     * @param tea
+     * @return
+     */
+    List<Tea> selectByCondition(Tea tea);
+
+    /**
+     * 根据id列表查询茶叶信息
+     * @param ids
+     * @return
+     */
+    List<Tea> selectByIds(List<Integer> ids);
+}

+ 27 - 0
springAndMybatis/src/main/java/com/sf/service/TeaService.java

@@ -0,0 +1,27 @@
+package com.sf.service;
+
+
+import com.sf.entity.Tea;
+import com.sf.mapper.TeaMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeaService
+ * @description
+ * @create 2025/11/30
+ */
+@Service    //一定要添加这个数据,让spring启动的时候扫描到这个类,创建对象作为bean注入到IOC容器
+public class TeaService {
+    @Autowired
+    private TeaMapper teaMapper;
+
+
+    public List<Tea> queryAll(){
+        return teaMapper.selectAll();
+    }
+}

+ 79 - 0
springAndMybatis/src/main/resources/com/sf/mapper/TeaMapper.xml

@@ -0,0 +1,79 @@
+<?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">
+<!--namespace 命名空间-->
+<mapper namespace="com.sf.mapper.TeaMapper">
+    <!--
+        <insert>标签,插入SQL
+        id 唯一标识
+        parameterType 参数对象类型
+    -->
+    <insert id="insert" parameterType="tea">
+        INSERT INTO tea
+        VALUES (#{id},#{teaName},#{teaTypeId},#{ordered},#{description},#{status})
+    </insert>
+
+
+    <!--
+        <update>标签,修改功能标签
+        id 唯一标识
+        parameterType 参数对象类型
+        resultType 指定结果 映射的对象类型
+    -->
+    <update id="update" parameterType="tea">
+        UPDATE tea SET
+                       teaName=#{teaName},
+                       teaTypeId=#{teaTypeId},
+                       ordered=#{ordered},
+                       description=#{description},
+                       status=#{status}
+        WHERE id=#{id}
+    </update>
+    <!--
+        <delete> 删除功能标签
+    -->
+    <delete id="delete" parameterType="integer">
+        DELETE FROM tea WHERE id=#{id}
+    </delete>
+
+    <!--查询所有茶叶信息-->
+    <!--
+        select标签 查询功能的标签
+        id属性 唯一标识,对应Mapper接口中的方法名
+        resultType 指定查询结果的映射对象类型
+        parameterType   指定参数的映射对象类型
+    -->
+    <select id="selectAll" resultType="com.sf.entity.Tea" >
+        SELECT * FROM tea
+    </select>
+
+    <select id="selectById" resultType="com.sf.entity.Tea" parameterType="integer">
+        SELECT * FROM tea WHERE id=#{id}
+    </select>
+
+    <select id="selectByCondition" resultType="tea" parameterType="tea">
+        SELECT * FROM tea
+        <where>
+            <if test="id!=null">
+                id=#{id}
+            </if>
+            <if test="teaName!=null">
+                AND teaName=#{teaName}
+            </if>
+            <if test="description!=null">
+                AND description=#{description}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectByIds" resultType="com.sf.entity.Tea">
+        SELECT * FROM tea
+        <where>
+            <foreach collection="list" open="id IN(" close=")" item="id" separator=",">
+                #{id}
+            </foreach>
+        </where>
+    </select>
+
+</mapper>

+ 6 - 0
springAndMybatis/src/main/resources/jdbc.properties

@@ -0,0 +1,6 @@
+# jdbc.properties 保存数据库的连接信息
+# 连接MySQL数据库的信息
+jdbc.driver=com.mysql.cj.jdbc.Driver
+jdbc.url=jdbc:mysql://127.0.0.1:3306/db01
+jdbc.username=root
+jdbc.password=123456

+ 36 - 0
springAndMybatis/src/test/java/com/sf/service/TeaServiceTest.java

@@ -0,0 +1,36 @@
+package com.sf.service;
+
+import com.sf.config.SpringConfig;
+import com.sf.entity.Tea;
+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;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeaServiceTest
+ * @description
+ * @create 2025/11/30
+ */
+//是spring-test依赖库提供的,使用spring整合junit专用的类加载器
+@RunWith(SpringJUnit4ClassRunner.class)
+//加载spring的核心配置类,相当于在main方法中使用的加载核心配置类:
+//        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
+@ContextConfiguration(classes = {SpringConfig.class})
+public class TeaServiceTest {
+    @Autowired
+    TeaService teaService;
+
+    @Test
+    public void testQueryAll() {
+        List<Tea> teaList = teaService.queryAll();
+        for (Tea tea : teaList){
+            System.out.println(tea);
+        }
+    }
+}

+ 33 - 0
springDemo/src/main/java/com/sf/di/Main.java

@@ -0,0 +1,33 @@
+package com.sf.di;
+
+
+import com.sf.di.service.BookService;
+import com.sf.di.service.TeacherService;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.context.support.FileSystemXmlApplicationContext;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Main
+ * @description
+ * @create 2025/11/30
+ */
+public class Main {
+    public static void main(String[] args) {
+        //1、根据类路径加载配置文件
+        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
+        //2、根据文件路径加载配置文件
+        //ApplicationContext context =new FileSystemXmlApplicationContext("E:\\授课资料\\2025年授课资料\\就业班授课资料\\J250419\\授课代码\\springDemo\\src\\main\\resources\\applicationContext.xml");
+        //TeacherService teacherService = (TeacherService)context.getBean("teacherService");
+        //teacherService.servicePrint();
+        //1、通过bean的id和name获取bean
+        //BookService bookService = (BookService)context.getBean("bookService");
+        //2、通过bean的id|name以及bean的所属类型获取bean
+        //BookService bookService = context.getBean("bookService", BookService.class);
+        //3、通过bean所属类型获取bean
+        BookService bookService = context.getBean(BookService.class);
+        bookService.queryAllBook();
+    }
+}

+ 13 - 0
springDemo/src/main/java/com/sf/di/mapper/BookMapper.java

@@ -0,0 +1,13 @@
+package com.sf.di.mapper;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title BookMapper
+ * @description
+ * @create 2025/11/30
+ */
+public interface BookMapper {
+    void selectAllBook();
+}

+ 13 - 0
springDemo/src/main/java/com/sf/di/mapper/TeacherMapper.java

@@ -0,0 +1,13 @@
+package com.sf.di.mapper;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeacherMapper
+ * @description
+ * @create 2025/11/30
+ */
+public interface TeacherMapper {
+    void mapperPrint();
+}

+ 26 - 0
springDemo/src/main/java/com/sf/di/mapper/impl/BookMapperImpl.java

@@ -0,0 +1,26 @@
+package com.sf.di.mapper.impl;
+
+
+import com.sf.di.mapper.BookMapper;
+import com.sf.di.service.BookService;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title BookMapperImpl
+ * @description
+ * @create 2025/11/30
+ */
+public class BookMapperImpl implements BookMapper {
+
+    private int num;
+
+    public BookMapperImpl(int num) {
+        this.num = num;
+    }
+
+    @Override
+    public void selectAllBook() {
+        System.out.println("selectAllBook"+num);
+    }
+}

+ 27 - 0
springDemo/src/main/java/com/sf/di/mapper/impl/TeacherMapperImpl.java

@@ -0,0 +1,27 @@
+package com.sf.di.mapper.impl;
+
+
+import com.sf.di.mapper.TeacherMapper;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeacherMapperImpl
+ * @description
+ * @create 2025/11/30
+ */
+public class TeacherMapperImpl implements TeacherMapper {
+    private int num;
+
+    /*
+     * 采用setter方法注入---简单类型、基本数据类型
+     * @param num
+     */
+    public void setNum(int num) {
+        this.num = num;
+    }
+    @Override
+    public void mapperPrint() {
+        System.out.println("teacher mapper print"+num);
+    }
+}

+ 13 - 0
springDemo/src/main/java/com/sf/di/service/BookService.java

@@ -0,0 +1,13 @@
+package com.sf.di.service;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title BookService
+ * @description
+ * @create 2025/11/30
+ */
+public interface BookService {
+    void queryAllBook();
+}

+ 13 - 0
springDemo/src/main/java/com/sf/di/service/TeacherService.java

@@ -0,0 +1,13 @@
+package com.sf.di.service;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeacherService
+ * @description
+ * @create 2025/11/30
+ */
+public interface TeacherService {
+    void servicePrint();
+}

+ 27 - 0
springDemo/src/main/java/com/sf/di/service/impl/BookServiceImpl.java

@@ -0,0 +1,27 @@
+package com.sf.di.service.impl;
+
+
+import com.sf.di.mapper.BookMapper;
+import com.sf.di.service.BookService;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title BookServiceImpl
+ * @description
+ * @create 2025/11/30
+ */
+public class BookServiceImpl implements BookService {
+    private BookMapper  bookMapper;
+    //构造方法注入方式
+    public BookServiceImpl(BookMapper bookMapper) {
+        this.bookMapper = bookMapper;
+    }
+
+
+    @Override
+    public void queryAllBook() {
+        System.out.println("bookServiceImpl.queryAllBook");
+        bookMapper.selectAllBook();
+    }
+}

+ 31 - 0
springDemo/src/main/java/com/sf/di/service/impl/TeacherServiceImpl.java

@@ -0,0 +1,31 @@
+package com.sf.di.service.impl;
+
+
+import com.sf.di.mapper.TeacherMapper;
+import com.sf.di.service.TeacherService;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title TeacherServiceImpl
+ * @description
+ * @create 2025/11/30
+ */
+public class TeacherServiceImpl implements TeacherService {
+    //要依赖的teacherMapper对象
+    TeacherMapper teacherMapper;
+    /*
+        采用setter方法注入---引用类型
+     */
+    public void setTeacherMapper(TeacherMapper teacherMapper) {
+        this.teacherMapper = teacherMapper;
+    }
+
+
+
+    @Override
+    public void servicePrint() {
+        System.out.println("servicePrint.....");
+        teacherMapper.mapperPrint();
+    }
+}

+ 2 - 0
springDemo/src/main/java/com/sf/ioc/service/impl/UserServiceImpl.java

@@ -19,6 +19,8 @@ public class UserServiceImpl implements UserService {
         System.out.println("userService的构造方法.....");
     }
 
+
+    //要使用userMapper
     private UserMapper userMapper;
 
     /**

+ 24 - 1
springDemo/src/main/resources/applicationContext.xml

@@ -3,6 +3,7 @@
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
     <!--创建spring配置文件,配置对应的类,作为spring管理的bean-->
     <!--
         bean是专门指在IOC容器里的对象
@@ -18,7 +19,8 @@
     -->
     <bean id="UserMapper" name="userMapper,userMapperImpl,userMapperImpl1" class="com.sf.ioc.mapper.UserMapperImpl" scope="singleton" />
     <!--配置service和mapper之间的关系-->
-    <bean id="UserService" name="userService,userServiceImpl1" class="com.sf.ioc.service.impl.UserServiceImpl" scope="prototype">
+    <bean id="UserService" name="userService,userServiceImpl1"
+          class="com.sf.ioc.service.impl.UserServiceImpl" scope="prototype">
         <!--
             property标签:配置当前的bean的属性
             name属性:对应着具体的属性变量
@@ -43,5 +45,26 @@
     -->
     <bean id="TeaService" name="teaService"
           class="com.sf.beanLifeCycle.service.impl.TeaServiceImpl"/>
+
+
+    <bean id="teacherMapper" class="com.sf.di.mapper.impl.TeacherMapperImpl">
+        <property name="num" value="666"/>
+    </bean>
+
+    <bean id="teacherService" class="com.sf.di.service.impl.TeacherServiceImpl">
+        <property name="teacherMapper" ref="teacherMapper"/>
+    </bean>
+
+    <!--构造方法注入两个bean之间的关系-->
+    <bean id="bookMapper" class="com.sf.di.mapper.impl.BookMapperImpl">
+        <!--注入对象bean和简单类型的bean之间的关系-->
+        <constructor-arg name="num" value="128"/>
+    </bean>
+    <bean id="bookService" class="com.sf.di.service.impl.BookServiceImpl">
+        <!--注入对象bean和复杂类型(引用数据类型)的bean之间的关系-->
+        <constructor-arg name="bookMapper" ref="bookMapper"/>
+
+    </bean>
+
 </beans>
 

+ 47 - 0
springDemo02/pom.xml

@@ -0,0 +1,47 @@
+<?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>
+
+    <groupId>com.sf</groupId>
+    <artifactId>springDemo02</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>11</maven.compiler.source>
+        <maven.compiler.target>11</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <!--用来指定要依赖的外部库坐标-->
+    <dependencies>
+        <!--导入spring的坐标spring-context,对应版本是5.2.10.RELEASE-->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>5.2.10.RELEASE</version>
+        </dependency>
+
+        <!--引入Java操作MySQL依赖-->
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <version>8.0.33</version>
+        </dependency>
+
+        <!--引入阿里巴巴提供的管理数据库的数据源(连接池)依赖-->
+        <!--
+            数据库连接池
+                DBCP连接池——太老淘汰了
+                C3P0连接池——太老淘汰了
+                druid连接池——阿里巴巴提供的
+        -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+            <version>1.1.16</version>
+        </dependency>
+
+
+    </dependencies>
+</project>

+ 38 - 0
springDemo02/src/main/java/com/sf/Main.java

@@ -0,0 +1,38 @@
+package com.sf;
+
+import com.sf.config.SpringConfig;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title Main
+ * @description
+ * @create 2025/11/30
+ */
+public class Main {
+    public static void main(String[] args) throws SQLException {
+        ApplicationContext context=
+                new AnnotationConfigApplicationContext(SpringConfig.class);
+        //通过bean的所属类型获取bean对象
+        DataSource ds = context.getBean(DataSource.class);
+        //通过数据源获取到连接
+        Connection connection = ds.getConnection();
+        //通过连接创建Statement
+        Statement statement = connection.createStatement();
+        //执行sql语句
+        ResultSet resultSet = statement.executeQuery("select * from tea");
+        //遍历查询结果
+        while (resultSet.next()) {
+            System.out.println(resultSet.getString(2));
+        }
+        connection.close();
+    }
+}

+ 39 - 0
springDemo02/src/main/java/com/sf/config/JdbcConfig.java

@@ -0,0 +1,39 @@
+package com.sf.config;
+
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+
+import javax.sql.DataSource;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title JdbcConfig
+ * @description 用来配置连接数据库的相关信息
+ * @create 2025/11/30
+ */
+public class JdbcConfig {
+    //EL表达式
+    @Value("${jdbc.driver}")
+    private String driver;
+    @Value("${jdbc.url}")
+    private String url;
+    @Value("${jdbc.username}")
+    private String username;
+    @Value("${jdbc.password}")
+    private String password;
+    //怎样将第三方库提供的类,作为bean注入到IOC容器中
+    @Bean   // 表示当前方法的返回值作为bean对象,注入到IOC容器中
+    public DataSource getDataSource() {
+        //创建了德鲁伊Druid提供的第三方数据源,作为Java连接数据库的数据源对象
+        DruidDataSource ds = new DruidDataSource();
+        ds.setDriverClassName(driver);
+        ds.setUrl(url);
+        ds.setUsername(username);
+        ds.setPassword(password);
+        return ds;
+    }
+
+}

+ 25 - 0
springDemo02/src/main/java/com/sf/config/SpringConfig.java

@@ -0,0 +1,25 @@
+package com.sf.config;
+
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title SpringConfig
+ * @description
+ * @create 2025/11/30
+ */
+//1、告诉Spring,这个类是spring框架的核心配置类,作用就是替代spring框架的核心配置文件applicationContext.xml
+@Configuration
+//2、告诉spring,要扫描哪些类的对象作为IOC容器的bean
+@ComponentScan({"com.sf.service","com.sf.mapper"})
+//3、告诉spring,要扫描哪些属性文件  classpath:指的是当前项目路径下面的资源目录resources目录
+@PropertySource({"classpath:jdbc.properties"})
+//4、告诉spring,要导入某个类作为配置类
+@Import({JdbcConfig.class})
+public class SpringConfig {
+}

+ 13 - 0
springDemo02/src/main/java/com/sf/mapper/UserMapper.java

@@ -0,0 +1,13 @@
+package com.sf.mapper;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title UserMapper
+ * @description
+ * @create 2025/11/30
+ */
+public interface UserMapper {
+    void print();
+}

+ 28 - 0
springDemo02/src/main/java/com/sf/mapper/impl/UserMapperImpl.java

@@ -0,0 +1,28 @@
+package com.sf.mapper.impl;
+
+
+import com.sf.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title UserMapperImpl
+ * @description
+ * @create 2025/11/30
+ */
+@Repository("userMapper")
+public class UserMapperImpl implements UserMapper {
+    //@Value注解是用来做简单类型注入,不需要通过set方法
+    @Value("${name}")
+    private String name;
+    @Value("${age}")
+    private int age;
+
+    @Override
+    public void print() {
+        System.out.println("userMapperImpl"+name+age);
+    }
+}

+ 13 - 0
springDemo02/src/main/java/com/sf/service/UserService.java

@@ -0,0 +1,13 @@
+package com.sf.service;
+
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title UserService
+ * @description
+ * @create 2025/11/30
+ */
+public interface UserService {
+    void print();
+}

+ 59 - 0
springDemo02/src/main/java/com/sf/service/impl/UserServiceImpl.java

@@ -0,0 +1,59 @@
+package com.sf.service.impl;
+
+
+import com.sf.mapper.UserMapper;
+import com.sf.service.UserService;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author WanJl
+ * @version 1.0
+ * @title UserServiceImpl
+ * @description
+ * @create 2025/11/30
+ */
+//添加一个注解:Component
+/*
+@Component 注解及其所有子注解的作用,就是把它修饰的类,创建对象注入到IOC容器作为bean
+@Component包含三个衍生注解:
+    @Controller 用来修饰控制层的bean
+    @Service 用来修饰服务层的bean
+    @Repository 用来修饰持久层的bean
+ */
+@Service
+@Scope("singleton") //定义bean的作用范围
+//设置它的生命周期
+public class UserServiceImpl implements UserService, InitializingBean, DisposableBean {
+    //@Autowired 根据类型进行自动装配(自动的建立bean和bean之间的关系)
+    @Autowired  //默认是根据类型进行装配的
+    @Qualifier("userMapper")    //根据名称进行自动装配,要搭配@Autowired一起使用
+    private UserMapper userMapper;
+    /*
+        DI依赖注入的方式
+            构造方法注入
+            setter方法注入
+            自动装配---使用的暴力反射
+    */
+
+    @Override
+    public void print() {
+        System.out.println("userServiceImpl");
+        userMapper.print();
+    }
+
+    @Override
+    public void destroy() throws Exception {
+        System.out.println("userServiceImpl destroy");
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        System.out.println("UserServiceImpl afterPropertiesSet");
+    }
+}

+ 11 - 0
springDemo02/src/main/resources/jdbc.properties

@@ -0,0 +1,11 @@
+# jdbc.properties 保存数据库的连接信息
+# String
+name=root
+# int 简单类型注入
+age=25
+
+# 连接MySQL数据库的信息
+jdbc.driver=com.mysql.cj.jdbc.Driver
+jdbc.url=jdbc:mysql://127.0.0.1:3306/db01
+jdbc.username=root
+jdbc.password=123456