SSM整合流程
1.创建工程
2.SSM整合
- Sping
- SpingConfig
- MyBatis
- MybatisConfig
- JdbcConfig
- jdbc.properties
- SpingMVC
- ServletConfig
- SpingMvcConfig
3.功能模块
- 表与实现类
- dao(接口+自动代理)
- service(接口+实现类)
- 业务层接口测试(整合JUnit)
- controller
- 表现层接口测试(PostMan)
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
SpingConfig
package com.text.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author McxYint
* @date 2022/10/18
*/
@Configuration
@ComponentScan({"top.mcxyint.servlet"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}
mybtais
-
MybatisConfig
package com.text.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
/**
* @author McxYint
* @date 2022/10/18
*/
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean sessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage("top.mcxyint.domain");
return sqlSessionFactoryBean;
}
@Bean
public MapperScannerConfigurer configurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("top.mcxyint.dao");
return mapperScannerConfigurer;
}
}
-
JdbcConfig
package com.text.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * @author McxYint * @date 2022/10/18 */ public class JdbcConfig { @Value("${driverClassName}") private String driver; @Value("${url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setDriverClassName(driver); druidDataSource.setUrl(url); druidDataSource.setUsername(username); druidDataSource.setPassword(password); return druidDataSource; } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(dataSource); return dataSourceTransactionManager; } }
-
jdbc.properties
url=jdbc:mysql://127.0.0.1:3306/ssmtest?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
driverClassName=com.mysql.jdbc.Driver
jdbc.password=123456
jdbc.username=root
SpingMVC
- ServletConfig
package com.text.config;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import javax.servlet.Filter;
/**
* @author McxYint
* @date 2022/10/18
*/
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[]{"/"};
}
//乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
-
SpingMvcConfig
package com.text.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
/**
* @author McxYint
* @date 2022/10/18
*/
@Configuration
@ComponentScan("top.mcxyint.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
功能模块
-
表与实现类
- 数据库新建
2.domain.Book
package com.text.daomain;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @author McxYint
* @date 2022/10/18
*/
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}
dao(接口+自动代理)
package com.text.dao;
import com.text.daomain.Book;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
public interface BookDao {
@Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
void save(Book book);
@Update("update tbl_book set type=#{type},name=#{name},description=#{description} where id = #{id}")
void update(Book book);
@Delete("delete from tbl_book where id=#{id}")
void delete(Integer id);
@Select("select * from tbl_book where id=#{id}")
Book getById(Integer id);
@Select("select * from tbl_book")
List<Book> all();
}
service(接口+实现类)
package top.mcxyint.servlet;
import org.springframework.transaction.annotation.Transactional;
import top.mcxyint.domain.Book;
import java.util.List;
@Transactional
public interface BookServlet {
/**
* book新增
* @return
*/
boolean save(Book book);
/**
* book修改
* @param book
* @return
*/
boolean updata(Book book);
/**
* book按id删除
* @param id
* @return
*/
boolean delete(Integer id);
/**
* book按id查询
* @param id
* @return
*/
Book getbyId(Integer id);
/**
* 查询全部
* @return
*/
List<Book> all();
}
实现类
package top.mcxyint.servlet.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.mcxyint.dao.BookDao;
import top.mcxyint.domain.Book;
import top.mcxyint.servlet.BookServlet;
import java.util.List;
/**
* @author McxYint
* @date 2022/10/19
*/
@Service
public class BookServletImpl implements BookServlet {
@Autowired
private BookDao bookDao;
public boolean save(Book book) {
bookDao.save(book);
return true;
}
public boolean updata(Book book) {
bookDao.update(book);
return true;
}
public boolean delete(Integer id) {
bookDao.delete(id);
return true;
}
public Book getbyId(Integer id) {
Book byId = bookDao.getById(id);
return byId;
}
public List<Book> all() {
return bookDao.all();
}
}
业务层接口测试(整合JUnit)
package top.mcxyint.servlet;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import top.mcxyint.config.SpringConfig;
import top.mcxyint.domain.Book;
import java.util.List;
/**
* @author McxYint
* @date 2022/10/19
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServletText {
@Autowired
private BookServlet bookServlet;
@Test
public void testGetByid(){
Book book = bookServlet.getbyId(2);
System.out.println(book);
}
@Test
public void testGetList(){
List<Book> all = bookServlet.all();
System.out.println(all);
}
}
-
controller
-
表现层接口测试(PostMan)
-
package top.mcxyint.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import top.mcxyint.domain.Book;
import top.mcxyint.servlet.BookServlet;
import java.util.List;
/**
* @author McxYint
* @date 2022/10/19
*/
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private BookServlet bookServlet;
@PostMapping("/{book}")
public boolean save(@RequestBody Book book) {
return bookServlet.save(book);
}
@PutMapping("/{book}")
public boolean updata(@RequestBody Book book) {
return bookServlet.updata(book);
}
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Integer id) {
return bookServlet.delete(id);
}
@GetMapping("/{id}")
public Book getbyId(@PathVariable Integer id) {
return bookServlet.getbyId(id);
}
@GetMapping
public List<Book> all() {
return bookServlet.all();
}
}