Spring+SpringMVC+Mybatis纯注解整合

1.创建一个Maven工程

       我的idea版本是2023的,所以创建maven工程会和其他版本的界面不一样

这里的jdk版本就个人需求选择,我这里直接生成了webapp版本,工程会自动创建webapp文件

2.在pom.xml文件中导入相应坐标

        导入的依赖如下,可以直接复制,但是复制完不要忘了让maven重新加载

<!--  用来进行版本锁定,有些依赖版本不一致会报错-->
  <properties>
    <spring.version>5.2.8.RELEASE</spring.version>
  </properties>


  <dependencies>
<!-- 导入springframework坐标-->
<!--   这里只需导入一个webmvc就可以,因为依赖传递,这个包里面有spring的所有核心包了-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
<!--      导入上方自定义的值,用来做版本锁定-->
      <version>${spring.version}</version>
    </dependency>


<!--    导入aspectj,spring实现aop需要这个包-->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.6</version>
    </dependency>

<!--    导入servlet包,因为springmvc还是采用了servlet技术-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

<!--    导入jackson包,用于将显示给浏览器的数据转换为json-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>

<!--    导入springJDBC包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>


<!--    导入数据源,这里用阿里的druid,也可以用其他的,或者系统默认的,这是个数据库连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.20</version>
    </dependency>


<!--    导入mysql,因为我们连接的数据库是mysql,需要mysql提供的驱动包-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.11</version>
    </dependency>

<!--    导入mybatis,我们数据访问层选择mybatis给我们自动代理-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>

<!--    导入mybatis给我们提供的和spring整合的依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.1</version>
    </dependency>
  </dependencies>

3.创建基本项目骨架

        采用三层架构,数据层Mapper,业务层Service,控制层Controller,还有一个配置层,这个是一定要有的,因为我们采用的是纯注解的方式,需要一个配置类来代替原有的xml配置方式,

其中数据层之所以取名为mapper,是因为我们采用了mybatis技术,你想取名为dao层也没有问题

           

4 .创建Spring配置类,SpringMvc配置类,初始化Servlet容器

        在com.lh.config下创建SpringConfig.java,SpringMvcConfig.java,ServletContainerInitConfig.java

SpringConfig.java        

package com.lh.config;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

//规定这个文件为spring的配置类
@Configuration

//规定这个配置类扫描哪个包
@ComponentScan({"com.lh.service"})

//规定mapper层是哪个,由mybatis自动生成代理对象
@MapperScan("com.lh.mapper")
public class SpringConfig {

}

SpringMvcConfig.java

package com.lh.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration

@ComponentScan({"com.lh.controller"})

//上面几个注解作用已讲解,但下面这个很重要,没有这个注解,springmvc就搭建不成,这个注解作用很多,就不列举了
@EnableWebMvc

public class SpringMvcConfig {
}

               ServletContainerInitConfig.java

package com.lh.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    //告诉处理器spring的配置类是哪个
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    //告诉处理器springmvc的配置类是哪个
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    //规定springmvc管理的路径范围,/代表全都管,只要访问这个项目有关的任何请求,springmvc都会拦截处理
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

5创建连接数据库的配置文件db.properties

        在src/main/resources下创建db.properties文件,用于连接mysql数据库

        格式如下,这是mysql8.0的配置,5.0的话,jdbc.driverClassName得换种写法

                                com.mysql.jdbc.Driver

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名称?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456

        然后在SpringConfig中加以下注解,来将这个文件交给Spring

                @PropertySource("classpath:db.properties")

6.将需要的第三方bean交给Spring中的IOC容器管理,实现解耦

          刚开始我们在pom.xml文件中导入了Druid数据源和Mybatis,他们是第三方提供的bean,无法直接用注解直接交给IOC,需要我们做一些小配置交给IOC,Mybatis的自动代理需要注入SqlSession对象,而Mybatis需要我们注入的数据源

                在com.lh.config下创建DruidConfig.java,MybatisConfig.java

                最后需要在SpringConfig配置文件导入这两个配置类,

                @Import({DruidConfig.class,MybatisConfig.class})

   DruidConfig.java

package com.lh.config;

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

public class DruidConfig {
    //di,为属性注入值,而这个值就是刚才配置交给Spring 的db.properties文件中的值
    @Value("${jdbc.driverClassName}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    //将这个第三方bean交给ioc,并给他设置名字
    @Bean("druidDataSource")
    public DruidDataSource druidDataSource () {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}

       MybatisConfig.java

package com.lh.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

public class MybatisConfig {
    //这个交给IOC容器的对象就是用来生成动态代理的对象,用来与mysql数据库进行操作
    @Bean("sqlSessionFactoryBean")
    public SqlSessionFactoryBean sqlSessionFactoryBean(DruidDataSource druidDataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(druidDataSource);
        return sqlSessionFactoryBean;
    }

    @Bean("mapperScannerConfigurer")
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.lh.mapper");
        return mapperScannerConfigurer;
    }
    
}

最后配置类的样子

7.补充

        实际上,已经整合好ssm框架了,但这个mapper层和普通的dao层不一样,不需要在此下面new一个impl包了,只需要new 一个接口,然后在src/resources下面new一个同样的包,并配置对应接口的xml配置文件,就写完了,需要一定的mybatis基础。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值