Spring - 整合mybatis、junit及如何管理第三方bean

160 阅读2分钟

导入坐标

  • 主要用到mysql,mybatis,整合mybatis
<?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>org.example</groupId>
    <artifactId>spring</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--spring核心容器坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <!--数据库连接池坐标-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!--mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--mysql坐标-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--spring整合druid坐标-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <!--spring整合mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
    </dependencies>

</project>

创建配置类

1、配置类

package com.itheima.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;

@Configuration //定义当前类为配置类
@ComponentScan("com.itheima") //扫描路径包下的bean
@PropertySource("classpath:jdbc.properties") //加载properties文件
@Import({JdbcConfig.class, MybatisConfig.class}) //导入管理第三方bean
public class SpringConfig {
}

2、创建管理mybatis类 获取SqlSessionFactory对象

package com.itheima.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MybatisConfig {
    @Bean //注入引用类型只需要在方法参数上添加需要的参数即可 但是必须有这个bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); //创建sqlSessionFactoryBean
        sqlSessionFactoryBean.setTypeAliasesPackage("com.itheima.pojo");  //设置类型别名
        sqlSessionFactoryBean.setDataSource(dataSource); // 设置数据库连接信息 这个对象在jdbcConfig类里已经定义好了
        return sqlSessionFactoryBean;
    }
    @Bean
    public MapperScannerConfigurer configurer(){
        MapperScannerConfigurer configurer = new MapperScannerConfigurer(); //创建MapperScannerConfigurer
        configurer.setBasePackage("com.itheima.mapper");  // 设置对映射文件的访问路径
        return configurer;
    }
}

3、创建jdbcConfig创建dataSource对象

package com.itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class JdbcConfig {
    @Value("${jdbc.driverClassName}") //注入简单类型 使用@Value注解设置变量的值
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.userName}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    @Bean //管理第三方bean定义方法 加上@Bean注解 使用@Impact注解将bean导入到配置类中即可
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver); //设置对应属性
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;
    }
}

4、创建Mapper接口,Spring整合Mybatis只需要写Mapper接口即可实现类由自动代理创建

package com.itheima.mapper;

import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper {
    @Select("select * from user where id = #{id};") //使用注解映射Sql Spring整合Mybatis只需要写Mapper接口即可实现类由自动代理创建
    User selectById(int id);
}

5、创建Service接口和实现类

package com.itheima.service.impl;

import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired //主动装配
    private UserMapper userMapper;
    @Override
    public User selectById(int id) {
        return userMapper.selectById(id);
    }
}

main

package com.itheima;

import com.itheima.config.SpringConfig;
import com.itheima.pojo.User;
import com.itheima.service.impl.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;



public class App {
    public static void main(String[] args) {
        ApplicationContext text = new AnnotationConfigApplicationContext(SpringConfig.class); //创建AnnotationConfigApplicationContext对象
        UserServiceImpl bean = text.getBean(UserServiceImpl.class); //获取UserServiceImplBean
        User users = bean.selectById(2);//调用UserServiceImpl的selectById方法
        System.out.println(users);
    }
}

整合junit

1、导入坐标

<!--junit坐标-->
    <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.2.10.RELEASE</version>
    </dependency>
</dependencies>

2、创建测试类

package com.itheima;

import com.itheima.config.SpringConfig;
import com.itheima.service.UserService;
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;

@RunWith(SpringJUnit4ClassRunner.class)//spring整合Junit专用类加载器
@ContextConfiguration(classes = SpringConfig.class) //指定上下文配置类
public class ServiceTest {
    @Autowired //自动装配 想测什么就加载什么
    private UserService userService;

    @Test
    public void selectByIdTest(){
        System.out.println(userService.selectById(2));
    }
}