1. SpringBoot
作用:1.简化SSM的大量重复配置,
2.本质可以理解为一个集成框架,且不需要大量配置。
2. 创建项目:
1.在浏览器中访问`https://start.spring.io/`,配置相关
信息,最后生成项目
注意:不过度追求新版本。推荐主流版本,比较稳定。
2.导入到eclipse中,修改pox.xml文件版本号:
第一步:2.1.6改成2.1.3这个版本会比较稳定
第二步:如果eclipse没有自动下在jar包,则可以选择更新Maven,勾
选强制更新。
第三步:如果发现Maven的jar包下载有有遗漏,可以选择删除存储jar包的.m2。
然后重启Eclipse.
3 . 启动SpringBoot
1.导入完成的项目中,默认就已经存在创建时配置的包,例如`cn.tedu.springboot`,该包是项目的根包,SpringBoot不需要配置组件扫描,默认就扫描这个根包,所以,在项目中创建的任何组件类都必须在这个根包或
其子孙包中。
2.SpringBoot项目内置了Tomcat,并且在启动时就会将项目部署到内置的Tomcat中,该Tomcat默认也是使用**8080**端口的,所以,务必保证端口不冲突!
4. 显示前端页面
1.在SpringBoot项目中,在**src/main/resources**下默认已经存在**static**文件夹,该文件夹就是用于存放静态资源的文件夹,例如用于存放html、css、js、图片文件等。
2.可以对**static**文件夹点击右键,创建HTML文件,在弹出的对话框中,默认选中的是**webapp**文件夹,需要手动选中**resources/static**,然后再创建HTML文件,例如创建**index.html**。
3.其实将HTML创建在webapp中依然是可行的,只是SpringBoot建议将静态资源存放在static中。
4.创建完成后,运行启动类,以启动项目,打开浏览器,通过**http://localhost:8080/**即可访问创建的HTML页面。
5.通过启动日志可以看到:
Tomcat started on port(s): 8080 (http) with context path ‘’
即:将Tomcat启动在8080端口,并上下文路径是空字符串。
6.另外,**index.html**也是SpringBoot设置的默认访问资源,所以,访问该页面时,URL中可以不必显式的表现资源名。
#################### 以上大纲步骤 测试1 ##################
1.创建项目
2.修改版本号
3.创建默认访问的HTML界面
4.运行的类:SpringbootApplication
5.运行效果为:浏览器显示index的内容
5. 访问SpringMVC的控制器
1.首先,创建`register.html`用户注册页面,将提交到`user/handle_register`位置。
2.在SpringBoot项目中,处理SpringMVC框架相关内容时,默认已经配置好了`DispatcherServlet`,且映射的路径是`/*`,所以,在设计URL时,控制器相关资源不需要使用`.do`作为后缀,甚至SpringBoot项目推荐使用RESTful的API风格,根本就不推荐使用任何后缀。
3.然后,需要创建`cn.tedu.springboot.controller.UserController`类,在类之前添加`@RestController`和`@RequestMapping("user")`,并在类中添加处理请求的方法:
@RequestMapping("user")
@RestController
public class UserController {
@RequestMapping("handle_register")
public String handleRegister(User user) {
System.err.println("UserController.handleRegister()");
System.err.println("\t" + user);
return "成功";
}
}
4.@RestController注解相关于@Controller和@ResponseBody的组合使用,只不过该注解是添加在控制器类之前的,使得该控制器类中所有处理请求的方法都是响应正文的!
5.SpringBoot项目默认并不支持使用jsp,如果一定需要使用jsp,还需要另外添加依赖!
以后控制器类中将@Controller改成@RestController
6.如果需要响应JSON数据,依然需要自定义响应结果的类型,例如创建`JsonResult`类,然后将方法的返回值类型声明为该类型即可,在SpringBoot中默认已经添加了Jackson相关依赖,并完成了相关配置,所以,直接使用即可。
#################### 以上大纲步骤 测试2 ##################
1.创建register.html注册页面
2.创建控制器
3.创建User实体类
4.游览器访问:
http://localhost:8080/user/handle_register
a.点击注册失败,可以检查注册页面按钮类型是否为submit
b.form表单action中的响应是否和控制器请求方法相同
5.成功效果为控制台输出:
UserController.handleRegister()(打桩)
User [id=null, username=管理员, password=1234, age=22, phone=17336606653, email=admin@qq.com](注册自定义填写的信息)
浏览器输出:成功(控制器返回的字符串)
6. 添加数据库编程相关依赖
1.因为SpringBoot并不确定某个项目使用哪种数据库(MySQL / Oracle / SQL Server等),也不确定将使用哪种持久层框架(MyBatis / Hibernate等),所以,在SpringBoot项目中,默认并没有添加数据库编程相关的依赖,需要在创建项目时手动勾选,或在项目创建完成后,在**pom.xml**中另行添加。
2.如果使用MySQL和MyBatis,需要添加的依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
3.SpringBoot项目会推荐使用某些依赖的版本,当自行添加依赖时,大多不需要指定版本号,SpringBoot会自动使用较新的、稳定的版本!
4.当添加以上依赖后,如果直接启动项目,就报告错误且启动失败,因为SpringBoot会认为当前项目需要使用数据库编程,会自动读取数据库相关配置,然后目前并没有添加相关配置,就会读取失败,所以发生错误,则需要在**src/main/resources/application.properties**文件中进行配置:
spring.datasource.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characeterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=
5.SpringBoot项目会自动的在**mysql-connector-java**的包中查找驱动类的全名,所以,无需配置`driver`或`driverClassName`属性。
6.配置完以上内容后,再次启动项目,将启动成功,且,即使以上配置信息有误,也并不影响项目启动,因为启动时只会读取以上配置信息,并不会尝试连接数据库!
#################### 以上大纲步骤 测试3 ##################
1.添加依赖
2.配置数据库文件:application.properties
3.运行效果:项目像上一步测试一样正常启动则为正常。
7. 检查是否可以正确的获取连接对象
1.在**src/test/java**下,默认已经存在根包及单元测试类,且测试类中有1个空的测试方法:
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootApplicationTests {
@Test
public void contextLoads() {
}
}
2.首先,应该执行该空测试方法,如果整个执行过程中没有报告任何错误,则表示当前环境是正确的,相关jar包是完整的。
3.SpringBoot项目中,执行单元测试时,也会加载整个环境,例如加载Spring环境,所以,可以通过自动装配的方式获取数据源对象,然后执行获取连接:
@Autowired
private DataSource dataSource;
@Test
public void getConnection() throws SQLException {
Connection conn = dataSource.getConnection();
System.err.println(conn);
}
4.如果能正常输出显示连接对象,则表示关于数据库连接的配置信息是正确的!
#################### 以上大纲步骤 测试4 ##################
1.添加测试方法
2.运行测试
3.测试效果:控制台输出连接对象地址
HikariProxyConnection@250702170 wrapping com.mysql.cj.jdbc.ConnectionImpl@58860997
8. 开发持久层功能
1.先创建持久层接口`cn.tedu.springboot.mapper.UserMapper`,为了使得框架能知道接口在哪里,可以为接口添加`@Mapper`注解:
@Mapper
public interface UserMapper {
Integer addnew(User user);
}
2.通常,并不推荐使用这样的方式配置接口文件的位置,更推荐的是在启动类之前添加`@MapperScan("cn.tedu.springboot.mapper")`注解配置:
@SpringBootApplication
@MapperScan("cn.tedu.springboot.mapper")
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
使用了`@MapperScan`注解后,就不必在每个接口之前添加`@Mapper`
注解了。
3.添加User findByUsername(String username)方法,进行
查询
4.总的来看,关于MyBatis的开发,并不是SpringBoot的特性,只是接口文件在哪里和XML映射文件在哪里的这2处的配置方式不同。
5.在src/main/resources中创建文件夹'mappers'
复制UserMapper.xml文件,里面是一些sql代码,增删改等。
这个文件是在其他项目里面复制过来的,没有的话,要自己写。
文件中对应的接口复制过来的要进行修改
改成:
<!-- namespace:对应的接口 -->
6.接下来,和此前的MyBatis开发步骤相同,配置XML映射。
然后,需要在application.properties中添加配置,以确定XML映射文件的位置:
mybatis.mapper-locations=classpath:mappers/*.xml
7.全部完成后,应该执行单元测试,以检验所开发的功能是否可以正确
运行:
@Autowired
private UserMapper mapper;
@Test
public void addnew() {
User user = new User();
user.setUsername("SpringBoot");
user.setPassword("888888");
Integer rows = mapper.addnew(user);
System.err.println("rows=" + rows);
}
@Test
public void findByUsername() {
String username = "SpringBoot";
User result = mapper.findByUsername(username);
System.err.println(result);
}
#################### 以上大纲步骤 测试5 ##################
1.创建持久层接口UserMapper.java
2.SpringbootApplication.java中添加代码
3.UserMapper.java中添加查询
4.UserMapper.xml中,书写sql代码
5.单元测试
9. 开发业务层
1.在完整的服务器端数据处理流程中,应该有业务层,它的主要作用是设计业务流程和业务逻辑,从而保障数据安全,即数据是根据开发人员所设定的规则而产生或发生变化或访问的。
2.在编写代码时,应该先创建业务层的接口,例如创建`cn.tedu.springboot.service.IUserService`,并在该接口中添加抽象方法:
public interface IUserService {
void register(User user);
}
在设计抽象方法时,**仅以操作成功为前提来设计方法的返回值**,在具体实现时,如果认定操作失败,将抛出异常。
3.然后,创建`cn.tedu.springboot.service.UserServiceImpl`业务层实现类,实现以上`IUserService`接口,该类的对象是需要被Spring进行管理的,所以需要添加`@Service`注解。在类中,将调用持久层开发的方法来完成数据的验证及最终插入用户数据,所以,还需要声明`@Autowired private UserMapper userMapper;`持久层对象:
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
}
5.IUserService.java类中,重写接口中定义的抽象方法:
@Override
public void register(User user) {
// 根据参数user获取尝试注册的用户名,并根据用户名查询数据
String username = user.getUsername();
User result = userMapper.findByUsername(username);
// 判断查询结果是否为null
if (result == null) {
// 是:用户名未被占用,允许注册
userMapper.addnew(user);
} else {
// 否:用户名已经被占用,不允许注册,抛出异常
throw new IllegalArgumentException(
"尝试注册的用户名(" + username + ")已经被占用!");
}
}
6.最后,仍需要编写并执行单元测试:
@Autowired
IUserService service;
@Test
public void register() {
try {
User user = new User();
user.setUsername("Service");
user.setPassword("888888");
service.register(user);
System.err.println("注册成功!");
} catch (IllegalArgumentException e) {
System.err.println(e.getMessage());
}
}
注意:关于业务层的开发依然不是SpringBoot的特性!
#################### 以上大纲步骤 测试6 ##################
1.创建新包和一个类加一个接口
cn.tedu.springboot.service.IUserService
cn.tedu.springboot.service.UserServiceImpl (接口)
2.分别给这两个类添加相应的代码
3.测试类里面添加测试方法
4.测试效果:
控制台显示:注册成功。
10. 完成控制器层的开发
1.首先,应该创建`cn.tedu.springboot.util.JsonResult`类,用于表示控制器端的响应结果的类型。
2.然后,在控制器中对“注册”请求进行处理:
@RequestMapping("handle_register")
public JsonResult<Void> handleRegister(User user) {
System.err.println("UserController.handleRegister()");
System.err.println("\t" + user);
JsonResult<Void> jr = new JsonResult<Void>();
try {
userService.register(user);
jr.setState(1);
} catch (IllegalArgumentException e) {
jr.setState(2);
jr.setMessage(e.getMessage());
}
return jr;
}
3.完成后,可以通过`http://localhost:8080/user/handle_register?username=Project&password=000000`进行测试。
#################### 以上大纲步骤 测试7 ##################
1.创建Json实体类
2.控制器中写代码
3.测试:
http://localhost:8080/user/handle_register?username=Project&password=000000`进行测试。
显示1成功:
{"state":1,"message":null,"data":null}
刷新之后
显示2成功
11.Ajax
1.修改register文件
按钮submit改成button
2.修改里面的内容
3.将js复制过来放在register同一文件夹
4.浏览器检验:
localhost:8080/register.html
5.成功效果为:
异步刷新成功
用户名查询不到,则弹出窗口提示:注册成功
查到了,用户名窗口右边就显示:用户名已注册
注意:关于以上部分开发依然步是SpringBoot的特性。
1.Spring:创建和管理对象
2.SpringMVC:如何接收请求,如何发送响应 响应正文(json)、
拦截器,(@RestController)
3.Mybatis:简化持久层的开发,如何设计抽象方法。
4.Ajax:实现异步请求。(请体,破化原有提交方式。)
好处就是块,用户体验好。 出现的也是json数据
5.SpringBoot:创建项目更快。配置少。