中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

湛江論壇建站模板集客營銷軟件官方網(wǎng)站

湛江論壇建站模板,集客營銷軟件官方網(wǎng)站,網(wǎng)站布局怎么做,wordpress下載5.0.3目錄 一 第三方資源配置管理1 管理DataSource連接池對象問題導(dǎo)入1.1 管理Druid連接池1.2 管理c3p0連接池 2 加載properties屬性文件問題導(dǎo)入2.1 基本用法2.2 配置不加載系統(tǒng)屬性2.3 加載properties文件寫法 二 Spring容器1 Spring核心容器介紹問題導(dǎo)入1.1 創(chuàng)建容器1.2 獲取bean…

目錄

  • 一 第三方資源配置管理
    • 1 管理DataSource連接池對象
      • 問題導(dǎo)入
      • 1.1 管理Druid連接池
      • 1.2 管理c3p0連接池
    • 2 加載properties屬性文件
      • 問題導(dǎo)入
      • 2.1 基本用法
      • 2.2 配置不加載系統(tǒng)屬性
      • 2.3 加載properties文件寫法
  • 二 Spring容器
    • 1 Spring核心容器介紹
      • 問題導(dǎo)入
      • 1.1 創(chuàng)建容器
      • 1.2 獲取bean對象
      • 1.3 容器類層次結(jié)構(gòu)
      • 1.4 BeanFactory
    • 2 Spring核心容器總結(jié)
      • 2.1 容器相關(guān)
        • 2.2 bean相關(guān)
        • 2.3 依賴注入相關(guān)
  • 三 Spring注解開發(fā)
    • 1 注解開發(fā)定義Bean對象
      • 問題導(dǎo)入
      • 1.1 基本使用
      • 1.2 @Component三個衍生注解
    • 2 純注解開發(fā)模式
      • 問題導(dǎo)入
      • 2.1 純注解開發(fā)模式介紹
      • 2.2 代碼演示
    • 3 注解開發(fā)Bean作用范圍和生命周期管理
      • 問題導(dǎo)入
      • 3.1 bean作用范圍注解配置
      • 3.2 bean生命周期注解配置
    • 4 注解開發(fā)依賴注入
      • 問題導(dǎo)入
      • 4.1 使用@Autowired注解開啟自動裝配模式(按類型)
      • 4.2 使用@Qualifier注解指定要裝配的bean名稱
      • 4.3 使用@Value實現(xiàn)簡單類型注入
    • 5 注解開發(fā)管理第三方Bean
      • 問題導(dǎo)入
      • 【第一步】單獨定義配置類
      • 【第二步】將獨立的配置類加入核心配置
        • 方式1:@Import注解導(dǎo)入式
        • 方式2:@ComponentScan掃描式
    • 6 注解開發(fā)為第三方Bean注入資源
      • 問題導(dǎo)入
      • 6.1 簡單類型依賴注入
      • 6.2 引用類型依賴注入
    • 7 注解開發(fā)總結(jié)
  • 四 Spring整合其他技術(shù)
    • 1 Spring整合mybatis
      • 1.1 思路分析
        • 問題導(dǎo)入
        • 1.1.1 MyBatis程序核心對象分析
        • 1.1.2 整合MyBatis
      • 1.2 代碼實現(xiàn)
        • 問題導(dǎo)入
        • 【前置工作】
          • 【第一步】導(dǎo)入Spring整合Mybatis依賴
          • 【第二步】創(chuàng)建JdbcConfig配置DataSource數(shù)據(jù)源
          • 【第三步】創(chuàng)建MybatisConfig整合mybatis
          • 【第四步】創(chuàng)建SpringConfig主配置類進行包掃描和加載其他配置類
          • 【第五步】定義測試類進行測試
    • 2 Spring整合Junit單元測試
      • 問題導(dǎo)入
        • 【第一步】導(dǎo)入整合的依賴坐標spring-test
        • 【第二步】使用Spring整合Junit專用的類加載器
        • 【第三步】加載配置文件或者配置類

一 第三方資源配置管理

說明:以管理DataSource連接池對象為例講解第三方資源配置管理

1 管理DataSource連接池對象

問題導(dǎo)入

配置數(shù)據(jù)庫連接參數(shù)時,注入驅(qū)動類名是用driverClassName還是driver?

1.1 管理Druid連接池

數(shù)據(jù)庫準備

create database if not exists spring_db character set utf8;
use spring_db;
create table if not exists tbl_account(id int primary key auto_increment,name varchar(20),money double
);
insert into tbl_account values(null,'Tom',1000);
insert into tbl_account values(null,'Jerry',1000);

【第一步】添加Druid連接池依賴

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version>
</dependency>

注意:除了添加以上兩個依賴之外,別忘了添加spring-context依賴。

【第二步】配置DruidDataSource連接池Bean對象

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;rewriteBatchedStatements=true"/><property name="username" value="root"/><property name="password" value="root"/>
</bean>

【第三步】在測試類中從IOC容器中獲取連接池對象并打印

public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}
}

打印結(jié)果
在這里插入圖片描述

1.2 管理c3p0連接池

【第一步】添加c3p0連接池依賴

<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.2</version>
</dependency>

【第二步】配置c3p0連接池Bean對象

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;rewriteBatchedStatements=true"/><property name="user" value="root"/><property name="password" value="root"/></bean>

注意:同一個Spring容器中不能有兩個id="dataSource"的連接池。

【第三步】在測試類中從IOC容器中獲取連接池對象并打印

public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");DataSource dataSource = (DataSource) ctx.getBean("dataSource");System.out.println(dataSource);}
}

運行結(jié)果:

com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge0yzax1fmo0yo1qse2m7|4f7d0008, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge0yzax1fmo0yo1qse2m7|4f7d0008, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]

2 加載properties屬性文件

目的:將數(shù)據(jù)庫的連接參數(shù)抽取到一個單獨的文件中,與Spring配置文件解耦。

問題導(dǎo)入

問題1:如何解決使用EL表達式讀取屬性文件中的值結(jié)果讀取到了系統(tǒng)屬性問題?
問題2:加載properties文件寫法標準寫法該怎么寫?

2.1 基本用法

【第一步】編寫jdbc.properties屬性文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=root

【第二步】在applicationContext.xml中開啟開啟context命名空間,加載jdbc.properties屬性文件
在這里插入圖片描述
小技巧:如果同學(xué)們覺得上述復(fù)制粘貼方式不好改或者容易改錯,其實idea是有提示功能的,注意不要選錯就行了。有些版本的idea沒有這個提示,那么就按照上面復(fù)制粘貼的方式改,改完之后可以做成live template模板,后期直接用。
在這里插入圖片描述

<context:property-placeholder location="jdbc.properties"/>

【第三步】在配置連接池Bean的地方使用EL表達式獲取jdbc.properties屬性文件中的值

<bean class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/>
</bean>

配置完成之后,運行之前的獲取Druid連接池代碼,可以獲取到連接池對象就表示配置成功。

2.2 配置不加載系統(tǒng)屬性

問題

如果屬性文件中配置的不是jdbc.username,而是username=root666,那么使用${username}獲取到的不是root666,而是計算機的名稱。

原因

系統(tǒng)屬性的優(yōu)先級比我們屬性文件中的高,替換了我們的username=root666。

解決

解決1:換一個名稱,例如不叫username,叫jdbc.username。

解決2:使用system-properties-mode="NEVER"屬性表示不使用系統(tǒng)屬性。

<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>

2.3 加載properties文件寫法

  • 不加載系統(tǒng)屬性
<context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
  • 加載多個properties文件
<context:property-placeholder location="jdbc.properties,msg.properties"/>
  • 加載所有properties文件
<context:property-placeholder location="*.properties"/>
  • 加載properties文件 標準格式
<context:property-placeholder location="classpath:*.properties"/>
  • 從路徑或jar包中搜索并加載properties文件
<context:property-placeholder location="classpath*:*.properties"/>

二 Spring容器

1 Spring核心容器介紹

問題導(dǎo)入

問題:按照Bean名稱獲取Bean有什么弊端,按照Bean類型獲取Bean有什么弊端?

1.1 創(chuàng)建容器

  • 方式一:類路徑加載配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  • 方式二:文件路徑加載配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
  • 加載多個配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean1.xml", "bean2.xml");

1.2 獲取bean對象

  • 方式一:使用bean名稱獲取
    • 需要自己強制類型轉(zhuǎn)換
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
  • 方式二:使用bean名稱獲取并指定類型
    • 推薦使用
BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
  • 方式三:使用bean類型獲取
    • 如果IOC容器中同類型的Bean對象有多個,此處獲取會報錯
BookDao bookDao = ctx.getBean(BookDao.class);

1.3 容器類層次結(jié)構(gòu)

在這里插入圖片描述

1.4 BeanFactory

  • 類路徑加載配置文件
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
BookDao bookDao = bf.getBean("bookDao", BookDao.class);
bookDao.save();
  • BeanFactory創(chuàng)建完畢后,所有的Bean均為延遲加載,也就是說我們調(diào)用getBean()方法獲取Bean對象時才創(chuàng)建Bean對象并返回給我們

2 Spring核心容器總結(jié)

2.1 容器相關(guān)

  • BeanFactory是IoC容器的頂層接口,初始化BeanFactory對象時,加載的bean延遲加載
  • ApplicationContext接口是Spring容器的核心接口,初始化時bean立即加載
  • ApplicationContext接口提供基礎(chǔ)的bean操作相關(guān)方法,通過其他接口擴展其功能
  • ApplicationContext接口常用初始化類
    • ClassPathXmlApplicationContext(常用)
    • FileSystemXmlApplicationContext

2.2 bean相關(guān)

在這里插入圖片描述

2.3 依賴注入相關(guān)

在這里插入圖片描述

三 Spring注解開發(fā)

1 注解開發(fā)定義Bean對象

目的:xml配置Bean對象有些繁瑣,使用注解簡化Bean對象的定義

問題導(dǎo)入

問題1:使用什么標簽進行Spring注解包掃描?
問題2:@Component注解和@Controller、@Service、@Repository三個衍生注解有什么區(qū)別?

1.1 基本使用

【第一步】在applicationContext.xml中開啟Spring注解包掃描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!--掃描com.itheima包及其子包下的類中注解--><context:component-scan base-package="com.itheima"/>
</beans>

【第二步】在類上使用@Component注解定義Bean。

//@Component定義bean
@Component("bookDao")
public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}
}
@Component
public class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}public void save() {System.out.println("book service save ...");bookDao.save();}
}

補充說明:如果@Component注解沒有使用參數(shù)指定Bean的名稱,那么類名首字母小寫就是Bean在IOC容器中的默認名稱。例如:BookServiceImpl對象在IOC容器中的名稱是bookServiceImpl。

【第三步】在測試類中獲取Bean對象

public class AppForAnnotation {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");BookDao bookDao = (BookDao) ctx.getBean("bookDao");System.out.println(bookDao);//按類型獲取beanBookService bookService = ctx.getBean(BookService.class);System.out.println(bookService);}
}

注意:在測試類中不要調(diào)用bookService的save方法,因為還沒有給BookServiceImpl中的bookDao賦值,調(diào)用bookService的save方法會出現(xiàn)空指針異常。

運行結(jié)果
在這里插入圖片描述

1.2 @Component三個衍生注解

說明:加粗的注解為常用注解

  • Spring提供 @Component 注解的三個衍生注解
    • @Controller:用于表現(xiàn)層bean定義
    • @Service:用于業(yè)務(wù)層bean定義
    • @Repository:用于數(shù)據(jù)層bean定義
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
}@Service
public class BookServiceImpl implements BookService {
}

2 純注解開發(fā)模式

問題導(dǎo)入

問題1:配置類上使用什么注解表示該類是一個配置類?
問題2:配置類上使用什么注解進行Spring注解包掃描?

2.1 純注解開發(fā)模式介紹

  • Spring3.0開啟了純注解開發(fā)模式,使用Java類替代配置文件,開啟了Spring快速開發(fā)賽道
  • Java類代替Spring核心配置文件
    在這里插入圖片描述
  • @Configuration注解用于設(shè)定當前類為配置類
  • @ComponentScan注解用于設(shè)定掃描路徑,此注解只能添加一次,多個數(shù)據(jù)請用數(shù)組格式
@ComponentScan({com.itheima.service","com.itheima.dao"})
  • 讀取Spring核心配置文件初始化容器對象切換為讀取Java配置類初始化容器對象
//加載配置文件初始化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//加載配置類初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

2.2 代碼演示

【第一步】定義配置類代替配置文件

//聲明當前類為Spring配置類
@Configuration
//Spring注解掃描,相當于<context:component-scan base-package="com.itheima"/>
@ComponentScan("com.itheima")
//設(shè)置bean掃描路徑,多個路徑書寫為字符串數(shù)組格式
//@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpringConfig {
}

【第二步】在測試類中加載配置類,獲取Bean對象并使用

public class AppForAnnotation {public static void main(String[] args) {//AnnotationConfigApplicationContext加載Spring配置類初始化Spring容器ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao = (BookDao) ctx.getBean("bookDao");System.out.println(bookDao);//按類型獲取beanBookService bookService = ctx.getBean(BookService.class);System.out.println(bookService);}
}

3 注解開發(fā)Bean作用范圍和生命周期管理

問題導(dǎo)入

在類上使用什么注解定義Bean的作用范圍?

3.1 bean作用范圍注解配置

  • 使用@Scope定義bean作用范圍
    • 單例模式:@Scope(“singleton”)
    • 非單例模式:@Scope(“prototype”)
@Repository
@Scope("singleton")
public class BookDaoImpl implements BookDao {
}

3.2 bean生命周期注解配置

  • 使用@PostConstruct
    • 設(shè)置bean的初始化方法
  • @PreDestroy
    • 設(shè)置bean的銷毀方法
@Repository
@Scope("singleton")
public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("book dao constructor ...");}@PostConstructpublic void init(){System.out.println("book init ...");}@PreDestroypublic void destroy(){System.out.println("book destory ...");}
}
public class AppForAnnotation {public static void main(String[] args) {//AnnotationConfigApplicationContext加載Spring配置類初始化Spring容器AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);BookDao bookDao1 =ctx.getBean(BookDao.class);BookDao bookDao2 =ctx.getBean(BookDao.class);System.out.println(bookDao1);System.out.println(bookDao2);ctx.close();

注意:@PostConstruct和@PreDestroy注解是jdk中提供的注解,從jdk9開始,jdk中的javax.annotation包被移除了,也就是說這兩個注解就用不了了,可以額外導(dǎo)入一下依賴解決這個問題。

<dependency><groupId>javax.annotation</groupId><artifactId>javax.annotation-api</artifactId><version>1.3.2</version>
</dependency>

4 注解開發(fā)依賴注入

問題導(dǎo)入

問題1:請描述@Autowired注解是如何進行自動裝配的?
問題2:請描述@Qualifier注解的作用

4.1 使用@Autowired注解開啟自動裝配模式(按類型)

@Service
public class BookServiceImpl implements BookService {//@Autowired:注入引用類型,自動裝配模式,默認按類型裝配@Autowiredprivate BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}
}

說明:不管是使用配置文件還是配置類,都必須進行對應(yīng)的Spring注解包掃描才可以使用。@Autowired默認按照類型自動裝配,如果IOC容器中同類的Bean有多個,那么默認按照變量名和Bean的名稱匹配,建議使用@Qualifier注解指定要裝配的bean名稱

注意:自動裝配基于反射設(shè)計創(chuàng)建對象并暴力反射對應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無需提供setter方法。

4.2 使用@Qualifier注解指定要裝配的bean名稱

目的:解決IOC容器中同類型Bean有多個裝配哪一個的問題

@Service
public class BookServiceImpl implements BookService {//@Autowired:注入引用類型,自動裝配模式,默認按類型裝配@Autowired//@Qualifier:自動裝配bean時按bean名稱裝配@Qualifier("bookDao")private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}
}

注意:@Qualifier注解無法單獨使用,必須配合@Autowired注解使用

4.3 使用@Value實現(xiàn)簡單類型注入

@Repository("bookDao")
public class BookDaoImpl implements BookDao {//@Value:注入簡單類型(無需提供set方法)@Value("${name}")private String name;public void save() {System.out.println("book dao save ..." + name);}
}

以上@Value注解中使用${name}從屬性文件中讀取name值,那么就需要在配置類或者配置文件中加載屬性文件。

@Configuration
@ComponentScan("com.itheima")
//@PropertySource加載properties配置文件
@PropertySource({"classpath:jdbc.properties"}) //{}可以省略不寫
public class SpringConfig {
}

注意:@PropertySource()中加載多文件請使用數(shù)組格式配置,不允許使用通配符*

5 注解開發(fā)管理第三方Bean

問題導(dǎo)入

導(dǎo)入自己定義的配置類有幾種方式?

【第一步】單獨定義配置類

public class JdbcConfig {//@Bean:表示當前方法的返回值是一個bean對象,添加到IOC容器中@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName("com.mysql.cj.jdbc.Driver");ds.setUrl("mysql://localhost:3306/spring_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true");ds.setUsername("root");ds.setPassword("root");return ds;}
}

【第二步】將獨立的配置類加入核心配置

方式1:@Import注解導(dǎo)入式

@Configuration
@ComponentScan("com.itheima")
//@Import:導(dǎo)入配置信息
@Import({JdbcConfig.class})
public class SpringConfig {
}

方式2:@ComponentScan掃描式

@Configuration
@ComponentScan({"com.itheima.config","com.itheima.service","com.itheima.dao"})  //只要com.itheima.config包掃到了就行,三個包可以合并寫成com.itheima
public class SpringConfig {
}

6 注解開發(fā)為第三方Bean注入資源

問題導(dǎo)入

配置類中如何注入簡單類型數(shù)據(jù),如何注入引用類型數(shù)據(jù)?

6.1 簡單類型依賴注入

public class JdbcConfig {//1.定義一個方法獲得要管理的對象@Value("com.mysql.cj.jdbc.Driver")private String driver;@Value("jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true")private String url;@Value("root")private String userName;@Value("root")private String password;//2.@Bean:表示當前方法的返回值是一個bean對象,添加到IOC容器中@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}

說明:如果@Value()中使用了EL表達式讀取properties屬性文件中的內(nèi)容,那么就需要加載properties屬性文件。

6.2 引用類型依賴注入

//Spring會自動從IOC容器中找到BookDao對象賦值給參數(shù)bookDao變量,如果沒有就會報錯。
@Bean 
public DataSource dataSource(BookDao bookDao){System.out.println(bookDao);DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;
}

說明:引用類型注入只需要為bean定義方法設(shè)置形參即可,容器會根據(jù)類型自動裝配對象

7 注解開發(fā)總結(jié)

在這里插入圖片描述

四 Spring整合其他技術(shù)

1 Spring整合mybatis

1.1 思路分析

問題導(dǎo)入

mybatis進行數(shù)據(jù)層操作的核心對象是誰?

1.1.1 MyBatis程序核心對象分析

在這里插入圖片描述

1.1.2 整合MyBatis

在這里插入圖片描述

  • 使用SqlSessionFactoryBean封裝SqlSessionFactory需要的環(huán)境信息
    在這里插入圖片描述
  • 使用MapperScannerConfigurer加載Dao接口,創(chuàng)建代理對象保存到IOC容器中
    在這里插入圖片描述

1.2 代碼實現(xiàn)

問題導(dǎo)入

問題1:Spring整合mybatis的依賴叫什么?
問題2:Spring整合mybatis需要管理配置哪兩個Bean,這兩個Bean作用分別是什么?

【前置工作】

  1. 在pom.xml中添加spring-context、druid、mybatis、mysql-connector-java等基礎(chǔ)依賴。
  2. 準備service和dao層基礎(chǔ)代碼
public interface AccountService {void save(Account account);void delete(Integer id);void update(Account account);List<Account> findAll();Account findById(Integer id);}
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;public void save(Account account) {accountDao.save(account);}public void update(Account account){accountDao.update(account);}public void delete(Integer id) {accountDao.delete(id);}public Account findById(Integer id) {return accountDao.findById(id);}public List<Account> findAll() {return accountDao.findAll();}
}
public interface AccountDao {@Insert("insert into tbl_account(name,money)values(#{name},#{money})")void save(Account account);@Delete("delete from tbl_account where id = #{id} ")void delete(Integer id);@Update("update tbl_account set name = #{name} , money = #{money} where id = #{id} ")void update(Account account);@Select("select * from tbl_account")List<Account> findAll();@Select("select * from tbl_account where id = #{id} ")Account findById(Integer id);
}
【第一步】導(dǎo)入Spring整合Mybatis依賴
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.18</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.18</version></dependency></dependencies>
【第二步】創(chuàng)建JdbcConfig配置DataSource數(shù)據(jù)源
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=root
public class JdbcConfig {@Value("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String userName;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource ds = new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(userName);ds.setPassword(password);return ds;}
}
【第三步】創(chuàng)建MybatisConfig整合mybatis
public class MybatisConfig {//定義bean,SqlSessionFactoryBean,用于產(chǎn)生SqlSessionFactory對象@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage("com.itheima.domain");ssfb.setDataSource(dataSource);return ssfb;}//定義bean,返回MapperScannerConfigurer對象@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.itheima.dao");return msc;}
}
【第四步】創(chuàng)建SpringConfig主配置類進行包掃描和加載其他配置類
@Configuration
@ComponentScan("com.itheima")
//@PropertySource:加載類路徑j(luò)dbc.properties文件
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}
【第五步】定義測試類進行測試
public class App {public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);AccountService accountService = ctx.getBean(AccountService.class);Account ac = accountService.findById(1);System.out.println(ac);}
}

2 Spring整合Junit單元測試

問題導(dǎo)入

Spring整合Junit的兩個注解作用分別是什么?

【第一步】導(dǎo)入整合的依賴坐標spring-test

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.18</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.18</version></dependency><!--spring整合junit--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.18</version><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>

【第二步】使用Spring整合Junit專用的類加載器

【第三步】加載配置文件或者配置類

//【第二步】使用Spring整合Junit專用的類加載器
@RunWith(SpringJUnit4ClassRunner.class)
//【第三步】加載配置文件或者配置類
@ContextConfiguration(classes = {SpringConfiguration.class}) //加載配置類
//@ContextConfiguration(locations={"classpath:applicationContext.xml"})//加載配置文件
public class AccountServiceTest {//支持自動裝配注入bean@Autowiredprivate AccountService accountService;@Testpublic void testFindById(){System.out.println(accountService.findById(1));}@Testpublic void testFindAll(){System.out.println(accountService.findAll());}
}

注意:junit的依賴至少要是4.12版本,可以是4.13等版本,否則出現(xiàn)如下異常:
在這里插入圖片描述

http://www.risenshineclean.com/news/36788.html

相關(guān)文章:

  • 商業(yè)網(wǎng)站建設(shè)案例課程圖片優(yōu)化是什么意思
  • wordpress網(wǎng)站音樂放不全百度搜索服務(wù)
  • 網(wǎng)站上的洗衣液瓶子做花瓶怎么材質(zhì)互聯(lián)網(wǎng)廣告代理商
  • wordpress云端采集插件廣州新塘網(wǎng)站seo優(yōu)化
  • 商務(wù)網(wǎng)站建設(shè)綜合實訓(xùn)信陽網(wǎng)絡(luò)推廣公司
  • 網(wǎng)站開發(fā)專業(yè)就業(yè)培訓(xùn)學(xué)校信息流優(yōu)化師沒經(jīng)驗可以做嗎
  • 網(wǎng)站圖片有什么要求嗎長春seo排名公司
  • 攀枝花 網(wǎng)站建設(shè)app拉新怎么對接渠道
  • 最好看免費觀看高清大全城中之城上海關(guān)鍵詞優(yōu)化排名哪家好
  • 怎么知道哪家公司網(wǎng)站做的好網(wǎng)站買賣交易平臺
  • 網(wǎng)絡(luò)組建設(shè)計與方案網(wǎng)站seo 優(yōu)化
  • jquery 特效 網(wǎng)站網(wǎng)絡(luò)推廣公司是干什么
  • 廣西住房城鄉(xiāng)建設(shè)廳官網(wǎng)站大數(shù)據(jù)培訓(xùn)班出來能就業(yè)嗎
  • 網(wǎng)站頁面數(shù)量開發(fā)網(wǎng)站的公司
  • 做網(wǎng)站圖片怎么弄一個自己的網(wǎng)站
  • 河北網(wǎng)站開發(fā)費用百度電話人工服務(wù)
  • 做門窗接活的網(wǎng)站廣告投放渠道
  • 做我女朋友好不好套路網(wǎng)站seo高級優(yōu)化技巧
  • 做局域網(wǎng)網(wǎng)站公司網(wǎng)站怎么弄
  • 家居企業(yè)網(wǎng)站建設(shè)如何豬八戒網(wǎng)接單平臺
  • 廣州 企業(yè)網(wǎng)站建設(shè)百度貼吧怎么做推廣
  • 新興建設(shè)網(wǎng)站頭條指數(shù)
  • 小型手機網(wǎng)站建設(shè)哪家好百度視頻
  • 收圖片的網(wǎng)站企業(yè)培訓(xùn)計劃方案
  • 三亞網(wǎng)站建設(shè)介紹首頁
  • 怎么做網(wǎng)盤搜索引擎網(wǎng)站抖音怎么推廣
  • 網(wǎng)站設(shè)計第一步怎么做今日國內(nèi)新聞10則
  • 站長平臺有哪些百度平臺營銷軟件
  • 建筑專業(yè)網(wǎng)站文明seo技術(shù)教程網(wǎng)
  • wordpress 添加icp舟山百度seo