读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
-
如果是
json
格式的,使用@RequestBody
注释; -
如果是
/
格式的,使用@PathVariable(value = "")
注释; -
如果是
?
格式的,使用@RequestParam(value = "")
注释。
构建工程结构
- 创建一个
model
文件夹,用于存放数据类。注:下列创建方式都一样。
-
创建一个
dao
文件夹,用于存放抽象接口。 -
创建一个
controller
文件夹,用于存放控制器类。 -
创建一个
service
文件夹,用于存放逻辑接口和具体实现。 -
创建一个
tools
文件夹,用于存放错误信息提示和消息通知工具类。 -
在
resources
文件夹中创建mapper
文件夹,用于存放数据库操作文件。
- 最终形成的工程结构如下图所示。
增加数据
- 根据数据库表的格式在
model
文件夹下创建数据类对象——Book
。
@Data
//采用注解,默认存在get和set方法
public class Book {
//数据类型和名称尽量和数据库表中的一致
private int bno;
private String bname;
private String bauth;
}
- 在
dao
文件夹下创建抽象接口,内部加入增加数据的方法。
@Mapper //采用注解,表示其为抽象接口类
public interface BookMapper {
//增加数据方法
//传入的是整本书籍的数据
int addBook(Book book);
}
- 在
service
文件夹下创建逻辑接口和具体实现类,利用dao
层抽象接口实现具体功能。
//逻辑接口
public interface BookService {
int addBook(Book book);
}
@Service //利用注解证明其为具体实现类
public class BookServiceImpl implements BookService{
//利用dao层抽象接口方法实现
@Autowired
BookMapper bookMapper;
@Override
public int addBook(Book book) {
//实现功能
return bookMapper.addBook(book);
}
}
- 创建工具类,里面存储异常信息和通知消息。
package com.huncm.springbootdemo.tools;
import java.util.HashMap;
import java.util.Map;
/**
* 返回数据封装类
*/
public class Result extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public Result() {
put("code", 0);
put("msg", "success");
}
public static Result error() {
return error(500, "未知异常,请联系管理员");
}
public static Result error(String msg) {
return error(500, msg);
}
public static Result error(int code, String msg) {
Result r = new Result();
r.put("code", code);
r.put("msg", msg);
return r;
}
public static Result ok(String msg) {
Result r = new Result();
r.put("msg", msg);
return r;
}
public static Result ok(Map<String, Object> map) {
Result r = new Result();
r.putAll(map);
return r;
}
public static Result ok() {
return new Result();
}
public Result put(String key, Object value) {
super.put(key, value);
return this;
}
}
package com.huncm.springbootdemo.tools;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import java.sql.SQLException;
@ControllerAdvice
public class MyControllerAdvice {
@ResponseBody
@ExceptionHandler(value = SQLException.class)
public Result sqlHandler(Exception ex) {
return Result.error(501,ex.getMessage());
}
/**
* 全局异常捕捉处理
*
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = Exception.class)
public Result errorHandler(Exception ex) {
return Result.error(500,ex.getMessage());
}
}
- 在
controller
文件夹下创建控制器类,进行接口的实现,利用工具类提示信息。
@RestController //控制器注解
@CrossOrigin //跨域注解
public class BookController {
@Autowired
BookService bookService;
@RequestMapping("addBook")
public Result addBook(Book book) {
//打印需要加入的书籍信息
System.out.println(book);
//利用服务层接口方法进行功能实现
int result = bookService.addBook(book);
//判断是否成功
if(result > 0){
return Result.ok("增加书籍成功");
}
return Result.error("增加书籍失败");
}
}
- 在
mapper
文件夹下创建数据库操作文件,进行数据库操作,真正实现功能。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huncm.springbootdemo.dao.BookMapper">
<!-- 增加操作 使用insert
id 数据接口方法名
parameterType 是传入的数据类型
中间是SQL语句进行数据库操作 -->
<insert id="addBook" parameterType="com.huncm.springbootdemo.model.Book">
insert into bookinfo(bname,bauth) values (#{bname},#{bauth});
</insert>
</mapper>
删除数据
- 在
dao
层接口中加入删除数据的方法。
//删除数据方法 根据书籍编号删除
int deleteBook(int bno);
- 在
service
层进行实现。注:service
层的接口方法和dao
层一致,不再复写。
@Override
public int deleteBook(int bno) {
return bookMapper.deleteBook(bno);
}
- 在
controller
层调用实现。
@RequestMapping("deleteBook")
public Result deleteBook(int bno) {
//打印删除的书籍编号
System.out.println(bno);
//利用服务层接口方法进行功能实现
int result = bookService.deleteBook(bno);
//判断是否成功
if(result > 0){
return Result.ok("删除书籍成功");
}
return Result.error("删除书籍失败");
}
- 在
mapper
层操作数据库。
<!-- 删除操作 使用delete
id 数据接口方法名
parameterType 是传入的数据类型
中间是SQL语句进行数据库操作 -->
<delete id="deleteBook" parameterType="Integer">
delete from bookinfo where bno = #{bno};
</delete>
修改数据
- 在
dao
层接口中加入修改数据的方法。
//修改数据方法 根据书籍编号修改数据内容
int updateBook(Book book);
- 在
service
层进行实现。
@Override
public int updateBook(Book book) {
return bookMapper.updateBook(book);
}
- 在
controller
层调用实现。
@RequestMapping("updateBook")
public Result updateBook(Book book) {
//打印修改的书籍信息
System.out.println(book);
//利用服务层接口方法进行功能实现
int result = bookService.updateBook(book);
//判断是否成功
if(result > 0){
return Result.ok("修改书籍成功");
}
return Result.error("修改书籍失败");
}
- 在
mapper
层操作数据库。
<!-- 修改操作 使用update
id 数据接口方法名
parameterType 是传入的数据类型
中间是SQL语句进行数据库操作 -->
<update id="updateBook" parameterType="com.huncm.springbootdemo.model.Book">
update bookinfo set bname = #{bname},bauth = #{bauth} where bno = #{bno};
</update>
查询数据
- 在
dao
层接口中加入查询数据的方法。
//注:查询一条数据,Book和List<Book>都可以
//注:查询多条数据,只能List<Book>
//注:所以为了方便,统一使用List<Book>
//查询数据方法 查询全部书籍
List<Book> findAllBook();
//查询数据方法 根据书籍编号进行查询
List<Book> findBookById(int bno);
//查询数据方法 根据书籍名称进行查询
List<Book> findBookByName(String bname);
- 在
service
层进行实现。
@Override
public List<Book> findAllBook() {
return bookMapper.findAllBook();
}
@Override
public List<Book> findBookById(int bno) {
return bookMapper.findBookById(bno);
}
@Override
public List<Book> findBookByName(String bname) {
return bookMapper.findBookByName(bname);
}
- 在
controller
层调用实现。
@RequestMapping("findAllBook")
public Result findAllBook() {
//返回json格式的数据,key构造为data
### 最后
**为什么我不完全主张自学?
①**平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。
②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
**应该学哪些技术才能达到企业的要求?(下图总结)**
![](https://img-blog.csdnimg.cn/img_convert/31c2efb0822ca8877517266027e60a78.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/a10dc4aa2d6a4de1da4c9b264d1e35c0.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。
如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没2W是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:
①价格:线上的价格基本上是线下的一半;
②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;
③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;
④课程:从课程内容来说,确实要比线下讲的更加深入。
**应该学哪些技术才能达到企业的要求?(下图总结)**
[外链图片转存中...(img-49HYorqQ-1715653342628)]
[外链图片转存中...(img-6RWVB73L-1715653342629)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**