2023.9.9日报
今天学习了springboot的相关知识,由于自己使用原生的Maven经常出现tomcat配置
与hive数据库冲突的问题,因此选择了内置tomcat不需要自己配置也更加先进的springboot
确实也该学习一些新的技术不能总是局限于原生的javaweb了
以下是今天踩的一些坑
1.用IDEA创建springboot项目时,尽量使用java8和springboot2.x.x的版本,一定要
注意创建的时候选择对应的版本,如果使用springboot3就需要换成java17 不然会显示
无效的发行版
2.建立controller的时候需要在Application的同级目录下,也就是默认创建的包内
在Springboot可以使用以下方式处理静态资源
1.webjars 代指一个三级目录,通过webjars的方式引入如jquerys等原来需要引入的
js文件,通过/webjars/.../..../...即可访问该文件,方便了开发,可以省去下载jquery
并引入的过程
2.public,static,/**,resources
3.优先级:resources>static>public
一般习惯把静态资源放在static中,很少使用webjars
目前实现了一个简单的登录页面,总结一下用法
1.创建项目,选择
java8,如果选择java8,next之后上方的SpringBoot版本要选2.x.x,然后进行创建即可
创建完成之后需要做以下几个事情
1.springboot官方推荐使用的是yaml文件,因此把application.properties的后缀改成yaml
不改也行 但是写法有所区别
然后在该文件中写的是数据库的内容 今天由于是刚刚开始 因此我用的mysql进行测试
在连接mysql之前先要添加依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> <exclusions> <exclusion> <artifactId>protobuf-java</artifactId> <groupId>com.google.protobuf</groupId> </exclusion> </exclusions> </dependency>
这里一定记得写上版本,否则在alimaven的网站中是找不到对应依赖的
之后是添加thymeleaf 这个很重要
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
然后创建controller包,在controller中创建处理方法
我以代码为例来进行阐述吧
package com.example.demo.controller; import com.example.demo.entity.User; import com.example.demo.repository.UserRepository; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.servlet.http.HttpSession; import java.util.Map; @Controller public class UserController { private final UserRepository userDao; public UserController(UserRepository userDao) { this.userDao = userDao; } //表示当获取到/user/add的请求时,返回到reg页面 @GetMapping("/user/add") public String addView(){ return "reg"; } @PostMapping("/user/add") public String add(@RequestParam String username, @RequestParam String password) { if (username == null || password == null || "".equals(username) || "".equals(password)) { return "用户名或密码不能为空"; } User user = new User(); user.setUsername(username); user.setPassword(password); userDao.save(user); return "redirect:/user/login"; } @GetMapping("/user/login") public String loginView() { return "login"; } @PostMapping("/user/login") public String login(@RequestParam String username, @RequestParam String password, HttpSession session) { if (username == null || password == null || "".equals(username) || "".equals(password)) { return "用户名或密码不能为空"; } User user = userDao.findByUsernameAndPassword(username, password).orElse(null); session.setAttribute("user", user); return "redirect:/home"; } @GetMapping("/home") public String home(Map<String, Object> map, HttpSession session) { map.put("user", session.getAttribute("user")); return "index"; } }
记得每个controller文件一定要有@controller的标识,不然springboot无法识别
之后就是像代码注释写的,当你打开浏览器输入连接的时候是get请求
返回的就是templates中的对应html文件,当你输入点击submit之后,是post请求
这个和javaweb的servlet是类似的,就会执行对应的方法
这里的save方法是这样的 userDao继承了UserRepository这个类,而这个类继承了
JpaRepository这个类,在这个类中封装了许多对数据库的处理方法,包括一些基础的
增删改查的操作,包括下面的登录也是用的这个方法。
然后需要创建一个entity包,这里我理解和javaweb的bean包类似,都是用于封装的
但是这里有一个区别,当你封装的时候对这个类需要加上@Entity的表示,表明这是一个实体类,而实体类需要主键,因此需要对主键变量进行@Id的标识
同时在这个文件中还需要标识访问的表名,不然会默认访问,但是我目前还没找到默认访问的设置位置在哪。
以代码为例
package com.example.demo.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity //@Entity表示这个类是一个实体类 //实体类要有主键 //最开始没有@Table,默认访问的是user表,但是我不清楚 // 它的默认访问规则是什么,因此还是采用了这种@的方式 @Table(name="test") public class User { @Id private String username; @Column private String password; public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public String getPassword() { return password; } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "username='" + username + '\'' + ", password='" + password + '\'' + '}'; } public User(){} }
这段代码默认连接的是user表,但是我不知道如何修改这个默认访问的表,因此用@Table标识了一下
然后是repository包,其中建立了类,这个类就是用于继承JpaRepository这个类,它其中封装了很多的方法。
然后单独要说一下的是数据库的连接,今天连接的是mysql,配置文件如下
spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver spring.datasource.url: jdbc:mysql://localhost:3306/你的数据库名称 spring.datasource.username: 你的用户名 spring.datasource.password: 你的密码 spring: jpa: hibernate: ddl-auto=update:
最后这段是自动更新表结构的配置
至此加上html文件,基本上就可以实现注册和登录的操作了,访问css和js文件还需要Thyme的一些操作,然后就要着手进行连接hive或者hbase进行增删改查了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步