赞
踩
SpringBoot是一个默认就集成了Spring、SpringMVC及相关常用框架的集合,并默认完成了常规的配置。关于配置,SpringBoot的理念是“约定大于配置”,在使用过程中,不必做配置的同时,也要遵守SpringBoot完成的配置值。
打开https://start.spring.io,在页面中填写创建项目的参数,必要的话,勾选所需要添加的依赖,点击Generate按钮,以下载项目。
解压下载的项目压缩包,得到项目文件夹,应该将该文件夹移动到Workspace中,在Eclipse中,通过Import > Existing Maven Projects导入项目。
导入时,务必保证当前计算机能够连接到Maven服务器!此次项目需要从Maven服务器下载大量依赖的jar包!
如果项目没有开始自动更新,可以对项目点击右键,选择Maven > Update Project,并在弹出的对话框中勾选Force update …并尝试更新,如果仍无法更新,可以尝试降低依赖的springboot的版本。
推荐使用Eclipse Oxygen(4.7)以上版本,如果使用的是较低版本的Eclipse,在pom.xml文件中可能会提示Maven版本错误!可以无视这个错误,并不影响项目的运行!
创建好的项目结构例如:
[Java Resources]
[src/main/java]
[cn.tedu.springboot]
ServletInitializer.java
SpringbootApplication.java
[src/main/resources]
[static]
[templates]
application.properties
[src/test/java]
[cn.tedu.springboot]
SpringbootApplicationTests.java
注意:以上cn.tedu.springboot包是根据创建项目时设置的Group和Artifact决定的,也是当前项目设置的组件扫描的根包!所以,后续在编程时,所有的组件类(例如控制器类)必须放在这个包或其子包中!
注意:SpringbootApplication类的名称也是根据创建项目时设置的Artifact决定的,这个类是SpringBoot项目的启动类,当需要运行时,执行该类中的main()方法即可!
注意:SpringBoot项目内置了Tomcat,运行启动类时,就会将项目部署到内置的Tomcat中!
注意:在src/main/resources下的static文件夹是用于存放静态资源的文件夹,例如存放.html、.css、.js及图片等!
注意:在src/main/resources下的templates文件夹是用于存放模版页面的,例如使用Thymeleaf时,就应该把相关的模版页面放在这里!
注意:在src/main/resources下的application.properties文件是SpringBoot项目唯一的配置文件,所有自定义配置都应该配置在该文件中!也有一些SpringBoot项目使用的配置文件是application.yml,与application.properties的区别只是配置的语法不同,功能与定位完全相同!
注意:在src/test/java下有cn.tedu.springboot包,这个包名也是创建项目时决定的,在SpringBoot项目中所有的单元测试类都必须放在这个包或子包中!否则,执行单元测试时,将无法加载Spring环境!在SpringbootApplicationTests测试类中,类的声明语句之前的2条注解,也是每个单元测试类必须添加的注解!
在src/main/resources/static下创建index.html,内容可以自行设计,完成后,启动项目(执行SpringbootApplication类中的main()方法),打开浏览器,通过http://localhost:8080/即可访问到该页面!
因为index.html是默认的欢迎页面的文件名,所以,在访问时,不必在URL中显式的使用http://localhost:8080/index.html。
在src/main/resources下的application.properties中添加配置:
server.port=8888
HTTP协议的默认端口号是80,也可以将端口号修改为这个值,如果使用的是Linux操作系统,使用80端口需要进行相关的权限设置。
在项目的根包cn.tedu.springboot下创建子包controller,并在该子包中创建控制器类HelloController,并在类之前添加@RestController注解:
package cn.tedu.springboot.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
}
@RestController相当于@Controller + @ResponseBody,即:添加该注解后,当前类就是控制器类,并且,当前类中所有处理请求的方法都是响应正文,相当于每个处理请求的方法之前都添加了@ResponseBody!@RestController并不是SpringBoot项目才有的注解,在普通的SpringMVC项目中也可以使用该注解,只是需要另行配置!
注意:SpringBoot项目默认已经配置了SpringMVC的DispatcherServlet,并且,映射的路径是/,所以,在使用SpringBoot开发时,设计请求路径并不需要使用.do作为后缀!*
然后,在控制器类中添加处理请求:
@GetMapping("hello")
public String showHello() {
return "Hello, <b>SpringBoot</b>!!!";
}
以上@GetMapping相当于@RequestMapping(method=RequestMethod.GET),即限制请求方式必须是GET类型的请求!除此以外,还有@PostMapping……
正常的开发流程,应该是最后做页面!
在src/main/resources/static下创建用户注册页面。
为了便于接收用户提交的注册数据,首先,应该创建cn.tedu.springboot.entity.User用户数据的实体类:
创建cn.tedu.springboot.controller.UserController控制器类,在控制器类之前添加@RestController和@RequestMapping(“user”):
@RequestMapping("user")
@RestController
public class UserController {
}
然后,添加方法以接收并处理请求:
@PostMapping("reg")
public void reg(User user) {
// 目前无法确定注册成功与否,暂时使用void作为返回值类型
System.err.println("UserController.reg()");
System.err.println("\t" + user);
// TODO 将用户数据写入到数据库中
}
在前端页面中确定注册请求是提交到/user/reg的,如果无误,则启动项目,观察用户的注册数据是否可以提交到服务器端的控制器中!
SpringBoot项目默认并没有集成数据库编程所需的依赖!可以在创建项目时添加,也可以在项目创建成功后再在pom.xml中补充相关依赖!
关于MyBatis和MySQL的依赖是:
<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>
注意:如果在SpringBoot项目中添加了数据库相关依赖,却没有配置数据库连接相关信息,则启动项目时会报错,因为SpringBoot在启动时就会加载连接数据库的相关信息!
然后,需要在application.properties中添加配置:
spring.datasource.url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
在配置数据库连接时,可以不必配置driverClassName,SpringBoot会自动从数据库连接的jar包中查找!
添加以上配置后,即使配置值是错误的,也不影响项目启动!但是,应该及时检查配置是否正确!则可以通过单元测试,来尝试获取数据库连接,如果能够连接,则配置正确,如果无法连接,则配置错误,或者相关jar包是损坏的!
在SpringbootApplicationTests编写并执行单元测试:
@Autowired
private DataSource dataSource;
@Test
public void getConnection() throws SQLException {
Connection conn = dataSource.getConnection();
System.err.println(conn);
}
由于SpringBoot的单元测试在执行之前,会加载整个项目中的配置和Spring环境,所以,在传统的SpringMVC项目中可以通过getBean()获取的对象,在SpringBoot项目中都可以自动装配!
创建cn.tedu.springboot.mapper.UserMapper接口,并在接口中添加抽象方法:
Integer insert(User user);
然后,需要配置接口文件的位置!可以直接在接口的声明语句之前添加@Mapper注解!使用这种做法时,每个MyBatis的接口都需要添加该注解!也有另一种做法,在启动类之前添加@MapperScan注解进行配置:
@SpringBootApplication
@MapperScan("cn.tedu.springboot.mapper")
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
在src/main/resources下创建名为mappers的文件夹,专门用于存放配置SQL语句的XML文件,并在该文件夹下复制粘贴得到UserMapper.xml文件,进行配置:
<mapper namespace="cn.tedu.springboot.mapper.UserMapper"> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> INSERT INTO t_user ( username, password, age, phone, email, is_delete, department_id ) VALUES ( #{username}, #{password}, #{age}, #{phone}, #{email}, #{isDelete}, #{departmentId} ) </insert> </mapper>
在SpringBoot项目中,仍然需要配置XML文件的位置,则需要在application.properties中添加配置:
mybatis.mapper-locations=classpath:mappers/*.xml
完成后,编写并执行单元测试:
@Autowired
private UserMapper userMapper;
@Test
public void insert() {
User user = new User();
user.setUsername("boot");
user.setPassword("1234");
Integer rows = userMapper.insert(user);
System.err.println("rows=" + rows);
}
为了保证“用户名唯一”,可以在用户尝试注册之前,检查用户名是否已经被注册,则“根据用户名查询用户数据”,判断查询结果是否为null,即可判断得到答案!
所以,在UserMapper.java接口中添加:
User findByUsername(String username);
并在UserMapper.xml中配置SQL映射:
<select id="findByUsername"
resultType="cn.tedu.springboot.entity.User">
SELECT
*
FROM
t_user
WHERE
username=#{username}
</select>
完成后,还是应该编写并执行单元测试:
@Test
public void findByUsername() {
String username = "root";
User user = userMapper.findByUsername(username);
System.err.println(user);
}
然后,将以上方法应用到控制器的处理请求的过程中:
@PostMapping("reg") public JsonResult reg(User user) { System.err.println("UserController.reg()"); System.err.println("\t" + user); JsonResult jsonResult = new JsonResult(); // 检查该用户名是否已经被注册 String username = user.getUsername(); User result = userMapper.findByUsername(username); // 判断查询结果是否为null if (result == null) { // 将用户数据写入到数据库中 userMapper.insert(user); jsonResult.setState(1); } else { // 用户名已经被注册 jsonResult.setState(2); jsonResult.setMessage("您尝试注册的用户名(" + username + ")已经被占用!"); } return jsonResult; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。