详解(Spring配置数据源、Spring原注解、Spring整合JDBC,Junit)

Spring

Spring配置数据源

  1. 导入相关坐标
  2. 编写jdbc.properties文件
  3. 创建applicationContext.xml文件
  4. spring加载properties文件
  5. 配置Druid和Jdbc Template
  6. 创建数据库并添加数据
  7. 定义student类
    8.测试

1. 导入相关坐标

<dependencies>
        <!--添加lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.15</version>
        </dependency>
        <!--spring-jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--spring整合junit-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <!--spring和新坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

2. 编写jdbc.properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_test1?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=1234

3. 创建applicationContext.xml文件

<?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"
       xmlns:p="http://www.springframework.org/schema/p"
       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:component-scan base-package="com.lifly"/>
</beans>

4. spring加载properties文件

    <!--通过context:property-placeholder 记载jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>

5. 配置Druid和Jdbc Template

    <!--配置Druid数据库连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></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>

6. 创建数据库并添加数据

-- 创建数据库
CREATE DATABASE spring_test1;

-- 使用数据库
USE spring_test1;

-- 创建student表
CREATE TABLE student(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10) NOT NULL,
	age INT 
);

-- 添加数据
INSERT INTO student(NAME,age) VALUES ('张三',13);
INSERT INTO student(NAME,age) VALUES ('李四',14);

7. 定义student类

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
@Component
public class Student {
    private Long id;
    private String name;
    private int age;
}

8.测试

public class StudentTest {

    @Test
    public void studentTest(){
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = classPathXmlApplicationContext.getBean(JdbcTemplate.class);
        String sql = "select * from student";
        List<Student> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
        for (Student student : list) {
            System.out.println(student);
        }
    }
    
    @Test
    public void studentTest01(){
        ClassPathXmlApplicationContext cp = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService students = cp.getBean(StudentService.class);
        List<Student> student = students.getStudent();
        for (Student student1 : student) {
            System.out.println(student1);
        }
    }
}

Spring 原注解

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解是一种趋势,注解代替xml配置文件简化配置,提高开发效率
Spring5.0以前提供了注解成为原始注解

开启注解

    <!--开启注解-->
    <context:component-scan base-package="com.lifly"/>

base-package表示扫描包的范围,如果配置到某个包的路径,那么注解只能在该包下的文件使用注解,配置的越详细注解范围越小,相反配置越少,则使用的注解范围越大。

Ioc注解

注释说明
@Component使用在该类上用于实例化Bean相当于
@Controller使用在web层类上用于实例化Bean
@Service使用在service层类上用于实例化Bean
@Repositiry使用在dao层类上用于实例化Bean

例如以下代码

@Controller
public class helloController {
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("hello spring mvc");
        return "WEB-INF/jsp/hello.jsp";
    }
    
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;
    
@Repository
public class StudentDaoImpl implements StudentDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

DI注解

注释说明
@Autowired使用在字段上用于根据类型依赖注入,相当于根据类型注入
@Qualifier结合@Autowired一起使用,根据id查找同类型下的实例
@Resource相当于@Autowired+@Qualifier,按照名称进行注入

例如以下代码

@Service
@Scope("singleton")
public class UserServiceImpl implements UserService {
    /**
     * 当该接口有多个实现类,会出现以下问题
     *  No qualifying bean of type 'com.lifly.dao.UserDao' available:
     *  expected single matching bean but found 2: userDaoImpl,userMysqlDaoImpl
     *  这时需要添加@qualifier注解,表明使用当前的实现类
     * @Autowired and @Qualifier  == @Resource
     * @Autowired可以再set方法,也可以写在属性上
     */
    //@Autowired
    //@Qualifier("userMysqlDaoImpl")
    @Resource(name = "userMysqlDaoImpl")
    private UserDao userDao;

   /* public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }*/

其他注解

注释说明
@Scope标注Bean的作用范围
singleton:单例对象(默认)
prototype:多例对象
@PostConstruct使用在方法上标注该方法是Bean的初始化方法
@PreDestory使用在方法上标注该方法是Bean的销毁对象
@Value注入普通属性,主要用于读取配置文件中的值,并赋值给当前属性

例如以下代码

@Service
@Scope("singleton")
public class UserServiceImpl implements UserService {
	    @PostConstruct
    public void init(){
        System.out.println("init方法执行了");
    }

    @PreDestroy
    public void destroy(){
        System.out.println("destroy方法执行了");
    }
}
public class DataSourceConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    /**
     * 抽取数据源配置信息
     * @return
     */
    @Bean("dataSource")
    public DataSource getDataSource(){

        DruidDataSource dataSource = new DruidDataSource();
        //驱动
        dataSource.setDriverClassName(driverClassName);
        //url
        dataSource.setUrl(url);
        //username
        dataSource.setUsername(username);
        //password
        dataSource.setPassword(password);
        return dataSource;
    }
}

Spring注解整合JDBC

  1. 创建maven工程
  2. 编写Dao和实现类
  3. 编写Service和实现类
  4. 编写applicationContext.xml
  5. 编写测试类

1. 创建maven工程

2. 编写Dao和实现类

public interface StudentDao {

    /**
     * 创建方法
     */
    public List<Student> getStudent();
}
@Repository
public class StudentDaoImpl implements StudentDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 创建方法
     */
    @Override
    public List<Student> getStudent() {
        String sql = "select * from student";
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Student.class));
    }

}

3. 编写Service和实现类

public interface StudentService {

    /**
     * 获取所有学生信息
     * @return
     */
    public List<Student> getStudent();
}
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;
    
    @Override
    public List<Student> getStudent() {
        return studentDao.getStudent();
    }
}

4. 编写applicationContext.xml

  <!--开启注解-->
    <context:component-scan base-package="com.lifly"/>

    <!--通过context:property-placeholder 记载jdbc.properties文件-->
    <context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
    <!--配置Druid数据库连接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></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>

5. 编写测试类

    @Test
    public void studentTest01(){
        ClassPathXmlApplicationContext cp = new ClassPathXmlApplicationContext("applicationContext.xml");
        StudentService students = cp.getBean(StudentService.class);
        List<Student> student = students.getStudent();
        for (Student student1 : student) {
            System.out.println(student1);
        }
    }

在这里插入图片描述

Spring新注解

Spring5.0以后的注解成为新注解

注解说明
@Configuration表示当前类是一个配置类,用于代替配置文件,相当于applicationContext.xml文件
@Bean作用于方法上,用于将方法的返回值存入spring容器中
@PropertySource用于加载指定的配置文件,相当于<context:property-placeholder location=""/>
@ComponentScan用于指定扫描路径
Value:用于指定路径数组basePackage:和value一样相当于
<context:component-scan base-package=""/>
@Import用于合并配置类,相当于"<“import resource=”"><"/import">

例如

@Configuration   //配置类注解
@PropertySource("classpath:jdbc.properties")    //引入外置配置文件
@ComponentScan("com.lifly")
@Import(DataSourceConfig.class)
public class SpringApplicationContextConfig {

Spring 整合Junit

  1. 导入继承的依赖:pring-test.jar junit-4.12.jar
  2. 使用@Runwith指定运行时加载配置文件或配置类的主类SpringJunit4ClassRunner
  3. 使用@ContextConfiguration指定配置文件或配置类Value,locations:用来指定配置文件;Classes:用来指定配置类 使用@Autowired将依赖的bean自动注入

1. 导入继承的依赖:pring-test.jar junit-4.12.jar

 <dependency>
     <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
  </dependency>
  <!--spring整合junit-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.1.5.RELEASE</version>
  </dependency>

2. 加载配置文件

@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class SpringJunitTest {

    /**
     *Spring整合junit
     * @RunWith()指定运行时家在配置文件或配置类的主类SpringJunit4ClassRunner
     * @ContextConfiguration指定配置文件或配置类
     * Value,locations:用来指定配置文件
     * Classes:用来指定配置类
     * 使用@Autowired将依赖的bean自动注入
     */
    
    @Autowired
    private StudentService studentService;
    @Test
    public void test01(){
        List<Student> student = studentService.getStudent();
        for (Student student1 : student) {
            System.out.println(student1);
        }
    }
}

3. 加载配置类

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SpringApplicationContextConfig.class)
public class SpringJunitTest2 {

    /**
     * junit测试配置类SpringApplicationContextConfig.class
     */

    @Autowired
    private StudentService studentService;

    @Test
    public void test(){
        List<Student> student = studentService.getStudent();
        for (Student student1 : student) {
            System.out.println(student1);
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

double_lifly

点喜欢就是最好的打赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值