介绍:
SSM相信大家都不陌生,在spring boot出现之前,SSM一直是Java在web开发中的老大哥。现在虽说有了spring boot能自动整合第三方框架了,但是现在市面上任然有很多老项目是基于SSM技术的。因此,能熟练掌握SSM进行开发也是非常重要的。对于新的项目,我当然是推荐直接用spring boot,但是对于像SSM技术的项目,我们必须也能够熟练上手。(虽说现在电动车很方便,但我们也要会骑自行车)
SSM(Spring+SpringMVC+MyBatis)是一种经典的Java Web开发框架组合。现在的spring boot框架可以看作是SSM的进一步整合。
整合SSM:
本次使用到的版本为Java8、spring5.3.7
创建一个maven项目,并将项目添加为WEB项目。(可以在创建项目时直接选定模板,也可以先创建一个普通的maven项目,再将maven项目设置为web项目)
项目的目录结果如下:
引入一些基础的maven依赖:
<dependencies>
<!-- tomcat相关依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.73</version>
</dependency>
<!-- 如果需要JSP支持,还需要添加以下依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>9.0.73</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.7</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.20</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
先创建一个spring配置类,用来扫描整合项目路径:
@Configuration
@ComponentScan("com.zq.ssmdemo")
public class SpringConfig {
}
接下来就是重点了,我们要在项目中创建一个tomcat容器
(当然,你也可以使用本地的tomcat部署,效果都是一样的。spring boot的内部也是内嵌了一个tomcat)。我们在maven坐标中已经引入了tomcat的依赖了(注意版本的差异。tomcat版本过高的话就要升级jdk的版本。我目前时jdk8,使用tomcat9)
public class TomcatConfig {
public static void main(String[] args) {
AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext();
applicationContext.register(SpringConfig.class);
applicationContext.refresh();
startTomcat(applicationContext);
}
static void startTomcat(WebApplicationContext applicationContext){
// 创建一个Tomcat实例
Tomcat tomcat = new Tomcat();
Server server = tomcat.getServer();
Service service = server.findService("Tomcat");
Connector connector = new Connector();
connector.setPort(8080);
Engine engine = new StandardEngine();
engine.setDefaultHost("localhost");
Host host = new StandardHost();
host.setName("localhost");
String contextPath = "";
Context context = new StandardContext();
context.setPath(contextPath);
context.addLifecycleListener(new Tomcat.FixContextListener());
host.addChild(context);
engine.addChild(host);
service.setContainer(engine);
service.addConnector(connector);
tomcat.addServlet(contextPath, "dispatcher", new
DispatcherServlet(applicationContext));
// 设置默认的Servlet
context.addServletMappingDecoded("/*", "dispatcher");
try {
tomcat.start();
} catch (LifecycleException e) {
e.printStackTrace();
}
}
}
现在,这个项目就是一个springMVC项目了。我们可以创建一个controller,写一个映射路径来检验一下我们的代码是否正确。
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping("/hello")
public String get() {
System.out.println("hello,test!");
return "hello,test!";
}
}
启动项目,(运行TomcatConfig中的main方法)
访问我们定义的映射路径:
可以看到能正确的访问到控制类。
整合mybatis:
在resources资源目录下新建整合mybatis的资源:
新建一个数据库连接文件:
jdbc.driver= com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/bank
jdbc.username=root
jdbc.password=123456
新建一个mybatis的配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC
"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 设置驼峰标识 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 打印SQL语句 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<plugins>
<!-- 分页插件 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>
<mappers>
<package name="com.zq.ssmdemo.mapper"/>
</mappers>
</configuration>
注意这两个文件的位置:
配置mybatis的连接信息:
@PropertySource("classpath:jdbc.properties")
public class MybatisConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
//指定mybatis配置文件
ClassPathResource classPathResource = new ClassPathResource("mybatis-config.xml");
sqlSessionFactoryBean.setConfigLocation(classPathResource);
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.zq.ssmdemo.mapper");
return mapperScannerConfigurer;
}
}
在spring的配置类中引入mybatis的配置类:
@Configuration
@ComponentScan("com.zq.ssmdemo")
@Import({MybatisConfig.class})
public class SpringConfig {
}
现在,启动一下这个项目:
可以看到打印除了pageHelp插件的logo,而我们pageHelp插件是在mybatis的配置文件中配置的,所以,我们的mybatis配置文件是肯定被spring项目扫描到的。
现在,我们进行一下简单的测试,看能否使用mybatis进行数据库的操作:
创建一个mapper接口,进行测试:
public interface UsersMapper {
// 查询所有用户
@Select("select * from users")
List<Users> selectAll();
}
创建一个controller进行测试:
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UsersMapper usersMapper;
@GetMapping("/list")
public Object add(){
PageHelper.startPage(1, 2);
List<Users> users = usersMapper.selectAll();
PageInfo<Users> page = new PageInfo<>(users);
System.out.println(page);
return page;
}
}
输出结果如下:
可以看到正确输出了数据库中的信息,表明我们能成功连接到数据库。