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基础。