能够掌握SSM整合的流程
能够编写SSM整合功能模块类
能够使用Result统一表现层响应结果
能够编写异常处理器进行项目异常
能够完成SSM整合前端页面发送请求实现增删改查操作
能够编写拦截器并配置拦截器
请描述“SSM整合流程”中各个配置类的作用?
创建工程
SSM整合
Spring
MyBatis
SpringMVC
功能模块
表与实体类
dao(接口+自动代理)
service(接口+实现类)
controller

x
<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.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins></build>
xxxxxxxxxx
-- 创建ssm_db数据库CREATE DATABASE IF NOT EXISTS ssm_db CHARACTER SET utf8;-- 使用ssm_db数据库USE ssm_db;-- 创建tbl_book表CREATE TABLE tbl_book( id INT PRIMARY KEY AUTO_INCREMENT, -- 图书编号 TYPE VARCHAR(100), -- 图书类型 NAME VARCHAR(100), -- 图书名称 description VARCHAR(100) -- 图书描述);-- 添加初始化数据INSERT INTO tbl_book VALUES(NULL,'计算机理论','Spring实战 第5版','Spring入门经典教材,深入理解Spring原理技术内幕');INSERT INTO tbl_book VALUES(NULL,'计算机理论','Spring 5核心原理与30个类手写实战','十年沉淀之作,手写Spring精华思想');INSERT INTO tbl_book VALUES(NULL,'计算机理论','Spring 5设计模式','深入Spring源码剖析,Spring源码蕴含的10大设计模式');INSERT INTO tbl_book VALUES(NULL,'市场营销','直播就该这么做:主播高效沟通实战指南','李子柒、李佳琦、薇娅成长为网红的秘密都在书中');INSERT INTO tbl_book VALUES(NULL,'市场营销','直播销讲实战一本通','和秋叶一起学系列网络营销书籍');INSERT INTO tbl_book VALUES(NULL,'市场营销','直播带货:淘宝、天猫直播从新手到高手','一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');
xxxxxxxxxx
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssm_dbjdbc.username=rootjdbc.password=root
xxxxxxxxxx
public class JdbcConfig { ("${jdbc.driver}") private String driver; ("${jdbc.url}") private String url; ("${jdbc.username}") private String username; ("${jdbc.password}") private String password; //配置连接池 public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } //Spring事务管理需要的平台事务管理器对象 public PlatformTransactionManager transactionManager(DataSource dataSource){ DataSourceTransactionManager ds = new DataSourceTransactionManager(); ds.setDataSource(dataSource); return ds; }}
xxxxxxxxxx
public class MyBatisConfig { public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setTypeAliasesPackage("com.itheima.domain"); return factoryBean; } public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao"); return msc; }}
xxxxxxxxxx
({"com.itheima.service"})("classpath:jdbc.properties")({JdbcConfig.class,MyBatisConfig.class}) //开启Spring事务管理public class SpringConfig {}
xxxxxxxxxx
("com.itheima.controller")public class SpringMvcConfig {}
xxxxxxxxxx
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[]{"/"}; }}
xxxxxxxxxx
public class Book { private Integer id; private String type; private String name; private String description; //同学们自己添加getter、setter、toString()方法}
xxxxxxxxxx
public interface BookDao { //@Insert("insert into tbl_book values(null,#{type},#{name},#{description})") ("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})") public int save(Book book); //返回值表示影响的行数 ("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}") public int update(Book book); ("delete from tbl_book where id = #{id}") public int delete(Integer id); ("select * from tbl_book where id = #{id}") public Book getById(Integer id); ("select * from tbl_book") public List<Book> getAll();}
xxxxxxxxxx
//表示所有方法进行事务管理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();}
xxxxxxxxxx
public class BookServiceImpl implements BookService { private BookDao bookDao; public boolean save(Book book) { bookDao.save(book); return true; } public boolean update(Book book) { bookDao.update(book); return true; } public boolean delete(Integer id) { bookDao.delete(id); return true; } public Book getById(Integer id) { return bookDao.getById(id); } public List<Book> getAll() { return bookDao.getAll(); }}
xxxxxxxxxx
("/books")public class BookController { private BookService bookService; public boolean save( Book book) { return bookService.save(book); } public boolean update( Book book) { return bookService.update(book); } ("/{id}") public boolean delete( Integer id) { return bookService.delete(id); } ("/{id}") public Book getById( Integer id) { return bookService.getById(id); } public List<Book> getAll() { return bookService.getAll(); }}
xxxxxxxxxx
(SpringJUnit4ClassRunner.class)(classes = SpringConfig.class)public class BookServiceTest { private BookService bookService; public void testGetById(){ Book book = bookService.getById(1); System.out.println(book); } public void testGetAll(){ List<Book> all = bookService.getAll(); System.out.println(all); }}

这里就以保存图书为例,其他接口同学们自己测试