第一章、传统SSM开发回顾以及问题
Spring + SpringMVC + Mybatis SSM 实现一个简单功能 员工添加、查询...
SSM项目简单实现
-
项目
需求分析 --->概要设计 --->(库表设计) ---> 详细设计 --->(验证库表正确性) ---> 编码(环境搭建+业务代码)--->测试 --->部署上线
这是一般整个项目的开发步骤,但是我们选择简单项目实现
-
功能:员工添加、查询所有
选择mysql数据库,库:ssm,表:emp,字段:id name birthday salary
-
编码
sql建库建表
sqlcreate DATABASE ssm; use ssm; create TABLE emp( id int(11) auto_increment PRIMARY KEY, name VARCHAR(40), birthday TIMESTAMP, salary DOUBLE )
环境搭建 引入依赖
xml<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.6</version> </dependency> <!--springmvc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.6</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>3.0.0</version> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.19</version> </dependency> <!--aspect--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.8</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.3</version> </dependency> <!--jackson 转换json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.14.2</version> </dependency> </dependencies>
spring.xml
xml<!--开启注解扫描--> <context:component-scan base-package="com.baizhi.service"/> <!--创建数据源--> <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> <!--创建sqlSessionFactory--> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:com.baizhi.mapper/*.xml"/> <property name="typeAliasesPackage" value="com.baizhi.entity"/> </bean> <!--创建DAO--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.baizhi.dao"/> </bean> <!--创建事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--开启注解事务生效--> <tx:annotation-driven/>
Mapper配置文件
xml<!--useGeneratedKeys:开启自动生成主键,keyProperty:让该字段自动生成主键; 该功能仅MySQL支持--> <insert id="save" parameterType="Emp" useGeneratedKeys="true" keyProperty="id"> INSERT into emp values(#{id},#{name},#{birthday},#{salary}) </insert> <select id="findAll" resultType="com.baizhi.entity.Emp"> select id,name,birthday,salary from emp </select>
java@Service @Transactional public class EmpServiceImpl implements EmpService { private final EmpDAO empDAO; @Autowired public EmpServiceImpl(EmpDAO empDAO) { this.empDAO = empDAO; } @Override public void save(Emp emp) { empDAO.save(emp); } @Override public List<Emp> findAll() { return empDAO.findAll(); } }
一步一步来,先测试Spring+Mybatis:
javapublic class TestEmpServiceImpl { public static void main(String[] args) { //1.运行工厂 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); //2.工厂中获取对象 EmpService empService = (EmpService) context.getBean("empServiceImpl"); empService.save(new Emp(null, "小米", new Date(), 44.564)); //3.调用方法 empService.findAll().forEach(emp -> System.out.println(emp)); } }
可以正常执行,进入下一步mvc的整合,springmvc.xml
xml<!--开启注解扫描--> <context:component-scan base-package="com.baizhi.controller"/> <!--开启mvc注解驱动--> <mvc:annotation-driven/> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <property name="suffix" value=".jsp"/> </bean>
web.xml
xml<!-- 加载spring.xml--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <!--配置spring工厂启动--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--配置springmvc--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
控制器
java@RestController //代表类中返回值转为json响应到浏览器 public class EmpController { private final EmpService empService; @Autowired public EmpController(EmpService empService) { this.empService = empService; } //保存 @RequestMapping("save") public void save(Emp emp) { empService.save(emp); } //查询所有 @RequestMapping("findAll") public List<Emp> findAll() { return empService.findAll(); } }
测试结果,可以正常添加和查询所有
现有SSM开发存在问题
- 配置繁琐:SSM框架需要进行大量的配置,包括XML配置文件、注解配置、依赖注入等。这些配置可能会变得繁琐,以及maven配置的冗余代码。
- 版本兼容性:maven引入的库,他们的版本必须一致,否则产生版本不兼容的问题
第二章、Spring Boot的引言
2.1 Spring Boot是什么
Spring Boot是由Pivotal团队提供的一套开源框架,Spring Boot的目标是让开发者更多地关注业务特性。它通过自动配置来简化开发流程,例如,当检测到Spring MVC在类路径上时,Spring Boot会自动添加必要的bean,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
Spring Boot 作用:简化Spring应用初始搭建和开发过程
如何简化:开发使用SpringBoot只要基于特定方式进行配置,就可以简化Spring使用
SpringBoot 微框架:5分钟完成之前ssm中的项目搭建,大大提高开发效率
SpringBoot (微框架)= SpringMVC(控制器) + Spring core(项目管理)
2.2 Spring Boot的优势
- 创建完整独立的Spring应用程序 ,只有一个容器;父子容器间的问题不存在。
- 嵌入的Tomcat,无需部署WAR文件 应用跑在内嵌服务器
- 简化Maven配置,自动配置Spring,没有XML配置
2.3 Spring Boot的约定
- SpringBoot遵循"约定优于配置 "的原则,提供了一些默认的约定必须遵守,以简化项目的配置和开发流程:
- 入口类 :Spring Boot 项目必须设置入口类,通常位于项目的根目录下,命名为
Application
或Main
,并且使用@SpringBootApplication
注解进行标记。 - 配置文件 :Spring Boot 必须在项目根目录存在一个名为application.properties 或application.yml的配置文件。这些配置文件通常位于 src/main/resources 目录下。
- 项目结构:Spring Boot 项目通常采用标准的 Maven 或 Gradle 项目结构,主要包括 src 目录、main 目录和 test 目录。主要的 Java 代码文件通常位于 src/main/java 目录下,资源文件位于 src/main/resources 目录下。
- 入口类 :Spring Boot 项目必须设置入口类,通常位于项目的根目录下,命名为
下一章:Spring Boot学习随笔-第一个SpringBoot项目快速启动(org.springframework.boot、@SpringBootApplication、application.yml)