Spring Boot 整合 SSM
版本信息:JDK1.8,其他信息在pom.xml中可查。
项目目录结构如下:
第一步:添加依赖
pom.xml文件
<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>com.isoft</groupId> <artifactId>isoft-ssm</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 分页助手 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.7.5</version> </dependency> <dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>0.9.1</version> </dependency> <!-- 通用Mapper --> <dependency> <groupId>com.github.abel533</groupId> <artifactId>mapper</artifactId> <version>2.3.4</version> </dependency> <!-- MySql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <!-- JSP相关 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Apache工具组件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <!-- 排除传递spring依赖 --> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.ehcache</groupId> <artifactId>ehcache-clustered</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 资源文件拷贝插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第二步:创建配置文件
application.properties
用于设置端口号,日志级别,静态资源扫描等配置
该项目中使用默认配置,因此这个文件不需要写内容
第三步:创建资源文件
jdbc.properties
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false jdbc.driver=com.mysql.jdbc.Driver jdbc.user=root jdbc.password=root
第四步:创建mybatis-config配置文件
mybatis-config.xml
<?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> <typeAliases> <typeAlias type="com.isoft.model.Person" alias="Person" /> </typeAliases> <mappers> <mapper resource="com/isoft/dao/PersonMapper.xml"/> </mappers> </configuration>
第五步:创建Spring配置文件
1、数据库连接配置文件:DBApplication.java
package com.isoft.config; import java.beans.PropertyVetoException; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import com.mchange.v2.c3p0.ComboPooledDataSource; @Configuration // 表示这是配置文件类 @PropertySource(value= {"classpath:jdbc.properties"},ignoreResourceNotFound=true) @ComponentScan(basePackages="com.isoft") public class DBApplication { @Value("${jdbc.url}") private String jdbcUrl; @Value("${jdbc.driver}") private String driverClass; @Value("${jdbc.user}") private String user; @Value("${jdbc.password}") private String password; @Bean(destroyMethod="close") public DataSource dataSource() { ComboPooledDataSource cpds = new ComboPooledDataSource(); try { cpds.setDriverClass(driverClass); cpds.setJdbcUrl(jdbcUrl); cpds.setUser(user); cpds.setPassword(password); cpds.setMinPoolSize(10); cpds.setMaxPoolSize(20); cpds.setInitialPoolSize(15); cpds.setMaxIdleTime(120); // 指定连接数据库连接池的连接的最大空闲时间 cpds.setAcquireIncrement(5); // 当连接池中的连接耗尽时c3p0一次同时获取的连接数。Default:3 cpds.setMaxStatements(100); // JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 cpds.setIdleConnectionTestPeriod(60); // 每60秒检查所有连接池中的空闲连接。Default: 0 } catch (PropertyVetoException e) { e.printStackTrace(); } return cpds; } }
2、mybatis配置文件:MyBatisConfig.java
package com.isoft.config; import javax.sql.DataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; @Configuration @AutoConfigureAfter(DBApplication.class) // 条件注解:在DBApplication实例化之后才执行 public class MyBatisConfig { @Autowired private DataSource dataSource; @Bean public SqlSessionFactoryBean sqlSessionFactoryBean() { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); // 注入dataSource sqlSessionFactoryBean.setDataSource(dataSource); // 注入mybatis-config ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource resource = resolver.getResource("classpath:mybatis-config.xml"); // 创建源对象,用于注入配置文件 sqlSessionFactoryBean.setConfigLocation(resource); return sqlSessionFactoryBean; } }
3、mybatis-mapper配置文件:MapperScannerConfig.java
package com.isoft.config; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration // mapper映射的配置文件 @AutoConfigureAfter(MyBatisConfig.class) // 条件注解:在MybatisConfig实例化之后才执行 public class MapperScannerConfig { // 读取sqlSessionFactoryBean @Autowired private SqlSessionFactoryBean sqlSessionFactoryBean; // 创建映射文件扫描对象 @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setBasePackage("com.isoft.dao"); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean"); return mapperScannerConfigurer; } }
第六步:创建model层
Person.java
注:添加@Table(name=”person”)注解,表示数据库中对应的表名为person
package com.isoft.model; import javax.persistence.Table; @Table(name="person") public class Person { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
第七步:创建dao层
1、PersonDao.java接口文件
package com.isoft.dao; import java.util.List; import com.isoft.model.Person; public interface PersonDao { public List<Person> findAll(); }
2、PersonMapper.xml 映射文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.isoft.dao.PersonDao"> <select id="findAll" resultType="Person"> select * from person </select> </mapper>
第八步:创建Service层
PersonService.java:服务层文件
package com.isoft.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.isoft.dao.PersonDao; import com.isoft.model.Person; @Service @Transactional public class PersonService { @Autowired private PersonDao personDao; // 调用findAll @Transactional // 用事务管理当前方法,若发生异常,则事务回滚 public List<Person> queryList(){ return personDao.findAll(); } }
第九步:创建controller层
PersonController.java
package com.isoft.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.isoft.model.Person; import com.isoft.service.PersonService; @Controller public class PersonController { // 导入service @Autowired private PersonService personService; @RequestMapping("/list") @ResponseBody public String list(Model mode) { List<Person> list = personService.queryList(); return list.toString(); } }
第十步:创建主方法Main.java
- 注意文件放置的位置,该文件扫描的文件为当前包及其子包,因此放到其他包的上一级中,可以扫描其对应的所有配置文件
- 即放在com.isoft中
package com.isoft; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.isoft.config.DBApplication; @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(DBApplication.class,args); } }
测试:运行Main.java文件(Java Application运行)
运行结果如下: