首页 > 其他分享 >纯注解方式整合Spring和Mybatis框架

纯注解方式整合Spring和Mybatis框架

时间:2023-06-05 18:37:32浏览次数:45  
标签:xml 创建 等同于 Spring public new Mybatis 注解 class

一、配置信息介绍

application-dao.xml

   application-dao.xml配置文件中配置的内容包含以下4项:

  • 读取jdbc.properties文件中的数据连接信息。
  • 创建Druid对象,并将读取的数据连接信息注入到Druid数据连接池对象中。
  • 创建SqlSessionFactoryBean对象,将并将Druid对象注入到SqlSessionFactoryBean对象中。
  • 创建MapperScannerConfigurer对象,并指定扫描的Mapper的路径。

application-service.xml

      application-service.xml配置文件中只配置了包扫描,指定需要扫描到Spring 的Service层所在的包路径。

二、纯注解方式整合Spring和Mybatis框架

    接下来,将项目中的XML配置文件删除(注释),使用纯注解的配置类依次替换对应的XML文件内容,以完成 纯注解的SSM框架整合。具体实现步骤如下所示。

1、数据库配置类

创建名称为JdbcConfig的类,用于获取数据库连接信息并定义创建数据源的对象方法,并定义getDataSource()方法,用于创建DruidDataSource对象。

/*
等同于
<context:property-placeholder location="classpath*:jdbc.properties"/>
 */
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    /*
    使用注入的形式,读取properties文件中的属性值,
    等同于<property name="*******" value="${jdbc.driver}"/>
     */
    @Value("${jdbc.driverClassName}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    /*定义dataSource的bean, 等同于
   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
    */
    @Bean("dataSource")
    public DataSource getDataSource() {
        //创建对象
        DruidDataSource ds = new DruidDataSource();
               /*
	        等同于set属性注入<property name="driverClassName" value="driver"/>
	         */
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

2、创建Mybatis配置类

    创建名称为MyBatisConfig的类,在MyBatisConfig类中定义getSqlSessionFactoryBean()方法,用于创建SqlSessionFactoryBean对象并返回。

public class MyBatisConfig {
    /*
    定义MyBatis的核心连接工厂bean,
    等同于<bean class="org.mybatis.spring.SqlSessionFactoryBean">
     参数使用自动装配的形式加载dataSource,
    为set注入提供数据源,dataSource来源于JdbcConfig中的配置
     */
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactoryBean(
            @Autowired DataSource dataSource) {
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        //等同于<property name="dataSource" ref="dataSource"/>
        ssfb.setDataSource(dataSource);
        ssfb.setMapperLocations(resolveMapperLocations());
        return ssfb;
    }
    public Resource[] resolveMapperLocations() {
        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
        List<String> mapperLocations = new ArrayList<>();
        mapperLocations.add("classpath:mapper/BookMapper.xml");
        List<Resource> resources = new ArrayList();
        if (!CollectionUtils.isEmpty(mapperLocations)) {
            for (String mapperLocation : mapperLocations) {
                try {
                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
                    resources.addAll(Arrays.asList(mappers));
                } catch (IOException e) {
                    System.out.println("Get myBatis resources happened exception: " + e);
                }
            }
        }

        return resources.toArray(new Resource[resources.size()]);
    }

    /*
    定义MyBatis的映射扫描,
    等同于<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
     */
    @Bean
    public MapperScannerConfigurer getMapperScannerConfigurer() {
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        //等同于<property name="basePackage" value="com.itheima.dao"/>
        msc.setBasePackage("com.gqx.dao");
        return msc;
    }


}

3、创建Spring配置类

    创建名称为SpringConfig的类作为项目定义Bean的源头,并扫描Service层对应的包。 

@Configuration
@Import({MyBatisConfig.class, JdbcConfig.class})
/*
等同于<context:component-scan base-package="com.itheima.service">
 */
@ComponentScan(value = "com.gqx.service")
/*
将MyBatisConfig类和JdbcConfig类交给Spring管理
 */
public class SpringConfig {
}

4、创建测试类

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = {"classpath:application-service.xml",
//        "classpath:application-dao.xml"})
@ContextConfiguration(classes = SpringConfig.class) //加载配置类
public class BookServiceTest {
    @Autowired
    private BookService bookService;
    @Test
    public void findBookById() {
        Book book = bookService.findBookById(1);
        // 输出语句输出:图书id、图书名称、作者、出版社,省略
        System.out.println(book.toString());
    }
}

 

标签:xml,创建,等同于,Spring,public,new,Mybatis,注解,class
From: https://www.cnblogs.com/helloworldcode/p/17458658.html

相关文章

  • springboot +nginx 配置http2
    说明nginx端使用http2+https,如果不使用https,浏览器会默认走http1.1后台使用http2,不使用https,因为内部服务之间没必要每次校验证书nginx配置#userroot;worker_processesauto;error_logD://nginx-log/error.log;#error_log/dev/null;#pidlogs/ngin......
  • 【Log4j】ログのツールーSpringBoot
    ログのUtilクラス:packagecom.example.demoaop.common;importcom.sun.deploy.config.DefaultConfig;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.util.HashMap;importjava.util.Map;publicclassLogUtils{/***系统默认配置......
  • springboot中使用cache和redis
    知识点:springboot中使用cache和redis (1)springboot中,整合了cache,我们只需要,在入口类上加 @EnableCaching 即可开启缓存 例如:在service层使用@Cacheable和CacheEvict //添加缓存@Cacheable(cacheNames="TestCACHE",key="#root.methodName+'_'+#id")publicMap<String,......
  • Spring注解校验@Valid的手动调用
    在做Spring项目的时候,@Valid可以完成优雅的参数校验,但是在不少特殊场景下,会有字段组合校验的场景.这种情况下,就需要在后台手动校验,那么如何在后端也优雅的参数校验,避免一堆判断和抛异常呢,可以试试在满足校验场景下手动触发@Valid校验.1.第一步:定义校验对象点击查看代......
  • Spring Bean生命周期详解
    本文结合Spring源码5.1.7.RELEASE,详细分析SpringBean生命周期,包括主要流程以及Spring一系列的扩展方法,最后通过测试实例演示主要步骤。Spring提供的Bean扩展方法大致分为三类,一类是BeanPostProcessor接口,一类是BeanFactoryProcessor接口,还有一类是Aware接口。Sprin......
  • spring中默认标签alias、import标签解析
    1、Alias标签在bean标签里边有一个alias属性和name属性,可以指定bean的别名,但是有的场景下,在定义bean的时候就把他的别名都指定好是不适用的。比如这个Bean在组件A中,想把他叫做componentA,但是在组件B中又想把他叫做componetB,所以还有一个单独的标签:<alias>专门解决上述场景的。<......
  • 使用powermock写springboot2.7业务类的测试用例
    1,引入powermock依赖<dependency><groupId>org.powermock</groupId><artifactId>powermock-core</artifactId><version>2.0.9</version><scope>test</......
  • Java之基于注解的Excel导出
    数据库Excel导出操作代码过于冗长惨不忍睹,无法复用。【推荐使用阿里巴巴组件:关于Easyexcel|EasyExcel】目录第一步:自定义注解:第二步:实体类:第三步:解析工具类:第四步:使用:依赖:<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base<......
  • #yyds干货盘点#Mybatis如何执行SQL语句
    mybatis操作数据库的过程//第一步:读取mybatis-config.xml配置文件InputStreaminputStream=Resources.getResourceAsStream("mybatis-config.xml");//第二步:构建SqlSessionFactory(框架初始化)SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().buli......
  • 【SpringBoot】如何配置静态资源的地址与访问路径
    静态资源,例如HTML文件、JS文件,设计到的SpringBoot配置有两项,一是“spring.mvc.static-path-pattern”,一是“spring.resources.static-locations”,很多人都难以分辨它们之间的差异,所以经常出现的结果就是404错误,无法找到静态资源。1.spring.mvc.static-path-patternspring.mvc.sta......