国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit

這篇具有很好參考價值的文章主要介紹了DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一 第三方資源配置管理

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

1 管理DataSource連接池對象

問題導入

配置數(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é)果
DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

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配置文件解耦。

問題導入

問題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屬性文件
DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring
小技巧:如果同學們覺得上述復制粘貼方式不好改或者容易改錯,其實idea是有提示功能的,注意不要選錯就行了。有些版本的idea沒有這個提示,那么就按照上面復制粘貼的方式改,改完之后可以做成live template模板,后期直接用。
DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

<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核心容器介紹

問題導入

問題:按照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)

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

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接口提供基礎的bean操作相關(guān)方法,通過其他接口擴展其功能
  • ApplicationContext接口常用初始化類
    • ClassPathXmlApplicationContext(常用)
    • FileSystemXmlApplicationContext
2.2 bean相關(guān)

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

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

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

三 Spring注解開發(fā)

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

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

問題導入

問題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.xsd
        http://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);
        //按類型獲取bean
        BookService bookService = ctx.getBean(BookService.class);
        System.out.println(bookService);
    }
}

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

運行結(jié)果
DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

1.2 @Component三個衍生注解

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

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

@Service
public class BookServiceImpl implements BookService {
}

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

問題導入

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

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

  • Spring3.0開啟了純注解開發(fā)模式,使用Java類替代配置文件,開啟了Spring快速開發(fā)賽道
  • Java類代替Spring核心配置文件
    DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring
  • @Configuration注解用于設定當前類為配置類
  • @ComponentScan注解用于設定掃描路徑,此注解只能添加一次,多個數(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")
//設置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);
        //按類型獲取bean
        BookService bookService = ctx.getBean(BookService.class);
        System.out.println(bookService);
    }
}

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

問題導入

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

3.1 bean作用范圍注解配置

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

3.2 bean生命周期注解配置

  • 使用@PostConstruct
    • 設置bean的初始化方法
  • @PreDestroy
    • 設置bean的銷毀方法
@Repository
@Scope("singleton")
public class BookDaoImpl implements BookDao {
    public BookDaoImpl() {
        System.out.println("book dao constructor ...");
    }
    @PostConstruct
    public void init(){
        System.out.println("book init ...");
    }
    @PreDestroy
    public 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包被移除了,也就是說這兩個注解就用不了了,可以額外導入一下依賴解決這個問題。

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

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

問題導入

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

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

@Service
public class BookServiceImpl implements BookService {
    //@Autowired:注入引用類型,自動裝配模式,默認按類型裝配
    @Autowired
    private BookDao bookDao;

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

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

注意:自動裝配基于反射設計創(chuà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

問題導入

導入自己定義的配置類有幾種方式?

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

public class JdbcConfig {
    //@Bean:表示當前方法的返回值是一個bean對象,添加到IOC容器中
    @Bean
    public 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注解導入式
@Configuration
@ComponentScan("com.itheima")
//@Import:導入配置信息
@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注入資源

問題導入

配置類中如何注入簡單類型數(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容器中
    @Bean
    public 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定義方法設置形參即可,容器會根據(jù)類型自動裝配對象

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

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

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

1 Spring整合mybatis

1.1 思路分析

問題導入

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

1.1.1 MyBatis程序核心對象分析

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

1.1.2 整合MyBatis

DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

  • 使用SqlSessionFactoryBean封裝SqlSessionFactory需要的環(huán)境信息
    DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring
  • 使用MapperScannerConfigurer加載Dao接口,創(chuàng)建代理對象保存到IOC容器中
    DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring

1.2 代碼實現(xiàn)

問題導入

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

【前置工作】
  1. 在pom.xml中添加spring-context、druid、mybatis、mysql-connector-java等基礎依賴。
  2. 準備service和dao層基礎代碼
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 {

    @Autowired
    private 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);
}
【第一步】導入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;

    @Bean
    public 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對象
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.itheima.domain");
        ssfb.setDataSource(dataSource);
        return ssfb;
    }
    //定義bean,返回MapperScannerConfigurer對象
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }
}
【第四步】創(chuàng)建SpringConfig主配置類進行包掃描和加載其他配置類
@Configuration
@ComponentScan("com.itheima")
//@PropertySource:加載類路徑jdbc.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單元測試

問題導入

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

【第一步】導入整合的依賴坐標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
    @Autowired
    private AccountService accountService;

    @Test
    public void testFindById(){
        System.out.println(accountService.findById(1));
    }

    @Test
    public void testFindAll(){
        System.out.println(accountService.findAll());
    }
}

注意:junit的依賴至少要是4.12版本,可以是4.13等版本,否則出現(xiàn)如下異常:
DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit,框架,java,spring文章來源地址http://www.zghlxwxcb.cn/news/detail-626088.html

到了這里,關(guān)于DAY02_Spring第三方資源配置管理&Spring容器&Spring注解開發(fā)&Spring整合Mybatis和Junit的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 從入門到精通:掌握Spring IOC/DI配置管理第三方bean的技巧

    從入門到精通:掌握Spring IOC/DI配置管理第三方bean的技巧

    以后我們會用到很多第三方的bean,我們以數(shù)據(jù)源是 Druid(德魯伊) 和 C3P0 來配置舉個例子。 1.1.1 環(huán)境準備 先來準備下案例環(huán)境: 1.1.2 思路分析 需求:使用Spring的IOC容器來管理Druid連接池對象 1.使用第三方的技術(shù),需要在pom.xml添加依賴 2.在配置文件中將【第三方的類】制作成一個

    2024年02月02日
    瀏覽(23)
  • day5:Node.js 第三方庫

    day5:Node.js 第三方庫

    使用 Express.js 構(gòu)建 Web 應用 Express框架是Node.js生態(tài)系統(tǒng)中的一種流行的Web應用程序框架。其核心功能主要包括以下幾個方面: 路由 :Express提供了一種方便的方式來定義路由,使得開發(fā)人員可以基于不同的HTTP方法(如GET、POST等)和URL來定義處理請求的函數(shù)。 中間件 :這是

    2024年02月07日
    瀏覽(46)
  • Spring第三方bean管理

    Spring第三方bean管理

    1.1 @Bean 首先看一下目錄結(jié)構(gòu),APP里面就初始化了SpringConfig文件 SpringConifg中就一句話,管理第三方bean由于不能將配置寫到別人的源代碼中。所以必須通過編程的方式來配置了 將方法的返回值定義為一個bean在方法上添加一個注解@Bean就可以實現(xiàn)方法的返回值為一個bean。bean的名

    2024年02月07日
    瀏覽(33)
  • spring中怎樣優(yōu)化第三方bean?

    需求:將數(shù)據(jù)庫連接四要素提取到properties配置文件,spring來加載配置信息并使用這些信息來完成屬性注入。第三方bean屬性優(yōu)化的思路如下: 1.在resources下創(chuàng)建一個jdbc.properties(文件的名稱可以任意) 2.將數(shù)據(jù)庫連接四要素配置到配置文件中 3.在Spring的配置文件中加載properties文件

    2024年02月16日
    瀏覽(21)
  • Spring xml 方式整合mybatis 第三方框架

    MyBatis提供了mybatis-spring.jar專門用于兩大框架的整合。 ①:第一步: 導入MyBatis整合Spring的相關(guān)坐標; ②:第二步: 編寫Mapper和Mapper.xml ③:第三步: 配置SqlSessionFactoryBean和MapperScannerConfigurer ④:第四步: 編寫測試代碼

    2024年02月13日
    瀏覽(97)
  • Day31:安全開發(fā)-JS應用&WebPack打包器&第三方庫JQuery&安裝使用&安全檢測

    Day31:安全開發(fā)-JS應用&WebPack打包器&第三方庫JQuery&安裝使用&安全檢測

    目錄 打包器-WebPack-使用安全 第三方庫-JQuery-使用安全 思維導圖 JS知識點: 功能:登錄驗證,文件操作, SQL 操作,云應用接入,框架開發(fā),打包器使用等 技術(shù):原生開發(fā), DOM ,常見庫使用,框架開發(fā)( Vue , NodeJS ),打包器 ( Webpack ) 等 安全:原生開發(fā)安全, NodeJS 安全,

    2024年03月14日
    瀏覽(27)
  • Spring Boot 配置靜態(tài)資源路徑

    在Spring Boot 2.7.2版本中,查看默認靜態(tài)資源路徑,在 WebProperties.class 中如下 可以看到默認資源路徑有4個。 使用 Spring Initializr 新建Spring Boot項目,自帶 static 目錄,直接將前端資源文件放到該目錄下,啟動項目,訪問 http://localhost:端口號/資源目錄/名稱.html 即可; 例如,有一個

    2023年04月15日
    瀏覽(18)
  • 【100天精通python】Day15:python 第三方模塊和包,模塊如何以主程序形式執(zhí)行

    目錄 1 常用的第三方模塊 2. 第三方模塊的安裝和使用 2.1 安裝第三方模塊:

    2024年02月15日
    瀏覽(90)
  • SpringBoot 自動掃描第三方包及spring.factories失效的問題

    SpringBoot 自動掃描第三方包及spring.factories失效的問題

    Spring 依賴注入 就是要讓spring找到要注入的類 并且識別到了 @Component、@Service 等注解。 1. 當在開發(fā)的第三方包里寫明了 @Component、@Service 等等 2. 引入了包,不論第三方庫的引入,還是本地jar??傊且氲焦こ痰?這時候還加入不到 IOC 容器,那就說明SpringBoot工程沒有掃描到

    2024年02月03日
    瀏覽(21)
  • Spring Boot整合OAuth2實現(xiàn)GitHub第三方登錄

    Github OAuth 第三方登錄示例 第三方登錄的原理是借助OAuth授權(quán)來實現(xiàn),首先用戶先向客戶端提供第三方網(wǎng)站的數(shù)據(jù)證明自己的身份獲取授權(quán)碼,然后客戶端拿著授權(quán)碼與授權(quán)服務器建立連接獲得一個Access Token,之后客戶端就可以通過Access Token來與資源服務器進行交互。 使用O

    2024年02月08日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包