1、创建配置类

SpringConfig.java

package com.day02Jdbc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 9:25 2018/11/10
 */
@Configuration//指定该类是一个配置类、等价于一个spring的配置文件
@ComponentScan(basePackages="com.day02Jdbc")//指定扫包范围
@Import(JdbcConfig.class) //引入JdbcConfig.class文件
public class SpringConfig {

}

 

2、创建jdbc配置类

JdbcConfig.java

public class JdbcConfig {


    /**
     * Bean注解:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
     * name属性:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
     * @return
     */
    @Bean(name="dataSource")
    public DataSource createDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }


    @Bean(name="jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }

}

 

3、引入jdbc属性文件

创建Jdbc属性文件 resources/jdbc.properties

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=sswqzx

在jdbcConfig中引入jdbc属性资源文件

package com.day02Jdbc.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;

//import javax.sql.DataSource;


/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 9:28 2018/11/10
 */
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {

    @Value("${jdbc.driverClass}")
    private String driver;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String user;

    @Value("${jdbc.password}")
    private String password;



    /**
     * Bean注解:该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
     * name属性:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
     * @return
     */
    @Bean(name="dataSource")
    public DataSource createDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }


    @Bean(name="jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
}

注意:

@Bean注解也可以不用指定name,因为基本上都是按照类型注入;如果不指定name,默认是@Bean注解所在的方法的名字。

在SpringConfig中引入JdbcConfig

package com.day02Jdbc.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 9:25 2018/11/10
 */
@Configuration//指定该类是一个配置类、等价于一个spring的配置文件
@ComponentScan(basePackages="com.day02Jdbc")//指定扫包范围
@Import(JdbcConfig.class) //引入JdbcConfig.class文件
public class SpringConfig {

}

4、在实现类上加上对应的注解

注意:在使用@Component、@Service、@Repository注解时,可以不指定bean的id,因为基本上都是按照类型注入;如果不指定id,默认是类名首字母小写。

CustomerServiceImpl.java

package com.day02Jdbc.service.Impl;

import com.day02Jdbc.dao.CustomerDao;
import com.day02Jdbc.domain.Customer;
import com.day02Jdbc.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 17:06 2018/11/8
 */
@Service("customerService")
public class CustomerServiceImpl implements CustomerService {

    @Autowired
    private CustomerDao customerDao ;

//    public void setCustomerDao(CustomerDao customerDao){
//        this.customerDao = customerDao;
//    }

    @Override
    public List<Customer> findAllCustomer() {
        List<Customer> list = customerDao.findAll();
        return list;

    }
}

CustomerDaoImpl.java

package com.day02Jdbc.dao.Impl;

import com.day02Jdbc.dao.CustomerDao;
import com.day02Jdbc.domain.Customer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 17:09 2018/11/8
 */
@Repository("customerDao")
public class CustomerDaoImpl implements CustomerDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;//不需要实例化,通过spring依赖注入进来,采用xml配置,需要提供set方法

//    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
//        this.jdbcTemplate = jdbcTemplate;
//    }

    @Override
    public List<Customer> findAll() {
        List<Customer> list = jdbcTemplate.query("select * from cst_customer",new BeanPropertyRowMapper<Customer>(Customer.class));
        return list;
    }
}

5、测试

package com.day02Jdbc.test;

import com.day02Jdbc.config.SpringConfig;
import com.day02Jdbc.domain.Customer;
import com.day02Jdbc.service.CustomerService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;

/**
 * @ Author     :ShaoWei Sun.
 * @ Date       :Created in 9:44 2018/11/10
 */
//@RunWith(SpringJUnit4ClassRunner.class)//指定采用spring的运行器来执行单元测试方法
//@ContextConfiguration("classpath:applicationContext.xml")//指定spring配置文件的路径
public class TestFindAnno {

    @Test
    public  void test1(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
        CustomerService customerService = (CustomerService) ac.getBean("customerService");
        List<Customer> list = customerService.findAllCustomer();
        for (Customer customer : list) {
            System.out.println("customer = " + customer);
        }

    }
}

Spring --09.Spring注解整合JdbcTemplate_bc

6、新注解总结

@Configuration

作用:

用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解
。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。

属性:

value:用于指定配置类的字节码

 

Spring --09.Spring注解整合JdbcTemplate_bc_02

@ComponentScan

作用:

用于指定spring在初始化容器时要扫描的包。常在SpringConfig配置文件中
作用和在spring的xml配置文件中的:<context:component-scan base-package="com.itheima"/>是一样的。

属性:

basePackages:用于指定要扫描的包。和该注解中的value属性作用一样。

Spring --09.Spring注解整合JdbcTemplate_Spring注解_03

@Bean

作用:

该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。

属性:

name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。如果不写name、默认就是方法的名称

Spring --09.Spring注解整合JdbcTemplate_spring_04

@PropertySource

作用:

用于加载.properties文件中的配置。例如我们配置数据源时,(加载jdbc.properties)
可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置

属性:

value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath。

Spring --09.Spring注解整合JdbcTemplate_Source_05

@Import

作用:

用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解。当然,写上也没问题

属性:

value[]:用于指定其他配置类的字节码。

Spring --09.Spring注解整合JdbcTemplate_Spring注解_06