一:背景介绍
SSM框架集合了Spring,MyBatis两个开源框架(SpringMVC是Spring中的部分内容),常用来开发数据源较为简单的web项目的框架
二:创建工程
1.新建一个Maven项目,选择根据maven-archetype-webapp这个原型构建web项目(之后就是根据提示一步步点即可)
2.项目创建完成以后.删除pom.xml文件中<name></name>后面的内容
3.在src目录下的main目录下手动创建缺失的目录(java,resources)
4.在pom.xml添加依赖和项目运行所需要的插件
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
5.创建如下项目包结构
三:Spring整合MyBatis
1.创建数据库和表的sql语句查询这里就不再展示了,不是本章节的研究重点
2.在resources目录下创建jdbc.properties文件,定义数据源(记得改成自己的配置)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=root
3.在config目录下编写jdbc的配置类JdbcConfig
//Jdbc配置类,加载properties配置项
public class JdbcConfig {
@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;
}
//配置Spring事务管理需要的平台事务管理器对象
@Bean
public PlatformTransactionManager transactionManager(@Autowired DataSource datasource){
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(datasource);
return ds;
}
}
4.在config目录下编写MyBatis的配置类MyBatisConfig
//编写MyBatis配置类
public class MyBatisConfig {
@Bean //定义SqlsessionfactoryBean
public SqlSessionFactoryBean sqlSessionFactory(@Autowired DataSource dataSource) {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.example.domain");
return factoryBean;
}
@Bean //定义映射配置
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.example.dao");
return msc;
}
}
四:Spring整合SpringMVC
Spring的配置类代码
@Configuration
@ComponentScan({"com.example.service"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}
Spring整合SpringMVC总共需要两步:
1.在config目录下编写SpringMVC的配置类SpringMvcConfig
@Configuration
@ComponentScan("com.example.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
2.在config目录下编写ServletConfig配置类,加载SpringMvcConfig和SpringConfig配置类
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
五:功能代码编写
1.数据层开发(BookDao)
Book实体类
public class Book {
private Integer id;
private String type;
private String name;
private String description;
@Override
public String toString() {
return "Book{" +
"id=" + id +
", type='" + type + '\'' +
", name='" + name + '\'' +
", description='" + description + '\'' +
'}';
}
//变量的get方法和set方法省略自己利用构造器生成
}
BookDao接口
public interface BookDao {
@Insert("insert into tbl_book(type,name,description)values(#{type},#{name},#{description})")
public void save(Book book);
@Update("update tbL_book set type=#{type},name=#{name}, description=#{description} where id =#{id}")
public void update(Book book);
@Delete("delete from tbl_book where id =#{id}")
public void delete(Integer id);
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
@Select("select * from tbl_book")
public List<Book> getAll();
}
2.业务层开发(BookServie&BookServiceImpl)
BookService接口
@Transactional //表示对所有方法进行事务管理
public interface BookService {
/**
* 保存图书
* @param book
* @return
*/
public boolean save(Book book);
/**
* 修改图书内容
* @param book
* @return
*/
public boolean update(Book book);
/**
* 根据id删除图书内容
* @param id
* @return
*/
public boolean delete(Integer id);
/**
* 根据id查询图书内容
* @param id
* @return
*/
public Book getById(Integer id);
/**
* 查询全部图书内容
* @return
*/
public List<Book> getAll();
}
BookServiceImpl实现类
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public boolean save(Book book) {
bookDao.save(book);
return true;
}
@Override
public boolean update(Book book) {
bookDao.update(book);
return true;
}
@Override
public boolean delete(Integer id) {
bookDao.delete(id);
return true;
}
@Override
public Book getById(Integer id) {
return bookDao.getById(id);
}
@Override
public List<Book> getAll() {
return bookDao.getAll();
}
}
3. 表现层开发(BookController)
BookController控制器类(使用RESTful风格快速开发)
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookService bookService;
@PostMapping
public boolean save(@RequestBody Book book){
return bookService.save(book);
}
@PutMapping
public boolean update(@RequestBody Book book){
return bookService.update(book);
}
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Integer id){
return bookService.delete(id);
}
@GetMapping("/{id}")
public Book getById(@PathVariable Integer id ){
return bookService.getById(id);
}
@GetMapping
public List<Book> getAll(){
return bookService.getAll();
}
}
六:测试运行
1.使用Junit测试业务层编写的方法(在test目录下创建com.example.service.BookServiceTest类)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
public void testGetById(){
Book book = bookService.getById(1);
System.out.println(book);
}
@Test
public void testGetAll(){
List<Book> all = bookService.getAll();
for (Book book : all) {
System.out.println(book);
}
}
}
2.使用postman测试表现层接口(根据不同业务选择不同的请求方式以及请求参数)
---如测试查询全部图书内容,选择GET请求,不携带任何参数,
请求路径为http://localhost:8080/springmvc_08_ssm/books
---如测试修改图书内容,选择POST请求,请求体中的json数据为
{
"id": 8,
"type": "计算机理论",
"name": "计算机组成原理",
"description": "你想要了解计算机组成原理的必备教材,值得拥有"
}
请求路径为http://localhost:8080/springmvc_08_ssm/books
---如测试根据id删除指定图书内容,选择DELETE请求,携带任何参数为id=1
请求路径为http://localhost:8080/springmvc_08_ssm/books/9?id=9
七:最终项目结构
好啦, 一个简单的ssm项目就构建完成啦~,完结撒花