第一次使用SpringBoot写一个小功能,表达的有点乱,见谅
SpringBoot是一种用来简化新Spring应用的初始搭建以及开发过程的全新框架。与传统的Spring框架相比,他有以下特点:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。
1.打开IDEA,新建一个项目,选中这个Spring Initializr(没有这个选项的朋友可以下载SpringAssistant的plugin,或者使用付费版的IDEA)
2. 一直next,然后在这个页面选择自己需要用到的依赖
3.最后finish则可以生成一个SpringBoot项目。
要测试自己的项目是否成功创建,可直接运行空项目中的DemoApplication的main函数,若出现以下结果,说明你成功啦
1.在创建项目时,我使用的是默认的服务网址https://start.spring.io,但显示无法连接上服务器,请教他人后得知将网址改成http://start.spring.io就能正常连接。
2.由于在选择依赖时,我选择了jdbc,而若测试时仍未配置好数据库的连接,也会报错。
由于只是简单的登录注册,我们只建了一个表,表内有三个属性:id、username、password
这里值得注意的就是我们要把id属性的AI(Automatic-Increase)填上,方便后面对id的自增操作。
faillogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>失败啦</p>
</body>
</html>
failregist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录失败</title>
</head>
<body>
<form action="/user/return" method="post">
<p>注册失败!用户名重复!</p>
<input type="submit" value="返回">
</form>
</body>
</html>
login.html
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/login" method="post">
用户名:<input name="username" type="text" required="required"><br>
密码:<input name="password" type="password" required="required"> <br>
<input type="submit" value="登录">
</form>
</body>
regist.html
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/user/regist" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="注册">
</form>
</body>
successlogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>成功啦</p>
</body>
</html>
这里定义了一个实体类,用于存储用户信息。以及一个Result类,用于存储返回信息。
public class User {
private long id;
private String Username;
private String password;
//...getter and setter
}
public class Result<T> {
//返回信息
private String msg;
//数据是否正常请求
private boolean success;
//具体返回的数据
private T detail;
//... getter and setter
}
Dao层实际上就是基本操作的底层实现(包括数据库的增删改查、基础逻辑实现等)
@Component
@Mapper
@Repository
public interface UserMapper {
@Select(value = "select u.username,u.password from user u where u.username=#{username}")
@Results
({@Result(property = "username",column = "username"),
@Result(property = "password",column = "password")})
User findUserByName(@Param("username") String username);
@Insert("insert into user values(#{id},#{username},#{password})")
//加入该注解可以保存对象后,查看对象插入id
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
void regist(User user);
@Select("select u.id from user u where u.username = #{username} and password = #{password}")
Long login(User user);
}
这里我们可以看到函数的具体实现都以注解的方式呈现,如果发现自己的编译器无法识别这些注解,则在你的xml文件里加入以下依赖吧
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
@Service
@Transactional(rollbackFor = RuntimeException.class)
public class UserService {
//@Autowired
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
/**
* 注册
* @param user 参数封装
* @return Result
*/
public Result regist(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
try {
User existUser = userMapper.findUserByName(user.getUsername());
if(existUser != null){
//如果用户名已存在
}else{
userMapper.regist(user);
//System.out.println(user.getId());
result.setSuccess(true);
result.setDetail(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
/**
* 登录
* @param user 用户名和密码
* @return Result
*/
public Result login(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
try {
Long userId= userMapper.login(user);
if(userId == null){
}else{
result.setSuccess(true);
user.setId(userId);
result.setDetail(user);
}
} catch (Exception e) {
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
}
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/regist")
public String regist(User user){
Result result=userService.regist(user);
if(result.isSuccess())
{
return "login";
}
else
return "failregist";
}
@RequestMapping(value = "/login")
public String login(User user){
boolean success=userService.login(user).isSuccess();
if(success==true)
return "successlogin";
else
return "faillogin";
}
@RequestMapping(value="/return")
public String rr(){
return "login";
}
}
RestController和Controller的使用
这份代码一开始是参考的另一篇文章,下面会贴出链接
这份代码中,我们可以看到Controller层中方法返回的是String类型,由于我们在依赖中加入了thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
编译时会自动识别以该字符串为名的html文件
这种情况需要我们将注解设为Controller,若设为RestController(Controller和RequestBody的合体),则会显示所返回的字符串
参考博客
springboot基本登录注册功能.