技术标签: spring boot java maven mybatis bootstrap
这是一个基于SpringBoot+mybatis的增删改查Demo,其功能是可以对书籍进行增删改查这些基本的操作。
开发工具:IDEA
核心技术:SpringBoot+mybatis;
前端:Bootstrap;
数据库:mysql;
数据库连接池:druid;
模板引擎:Thymeleaf;
用户进行书籍增删改查操作之前需要进行登录。
当用户忘记密码时,可以通过此功能找回密码。
用户可以对书籍执行添加功能。
用户可以通过选中相应的书籍进行删除,同时,支持批量删除。
用户可以对书籍进行修改操作。
@Controller
public class UserController {
@Autowired
UserService userService;
/**
* 用户名检查 不能注册相同用户名
* @param username
* @return
*/
@RequestMapping("/checkName.do")
@ResponseBody
public String checkName(@RequestParam("username") String username) {
User user = userService.getUserByName(username);
if (user == null) {
return "success";
}
return "false";
}
/**
* 注册功能
* @param username
* @param password
* @param email
* @return
*/
@RequestMapping("/addUser.do")
@ResponseBody
public int addUser(@RequestParam("userName") String username,
@RequestParam("password") String password,
@RequestParam("email") String email) {
int result = userService.addUser(username, password, email);
int flag = 0;
if (result > 0) {
flag = 1;
return flag;
}
return flag;
}
/**
* 密码找回功能
* @param username
* @param email
* @return
*/
@RequestMapping("/findPwd.do")
@ResponseBody
public int findPwd(@RequestParam("userName") String username,
@RequestParam("email") String email) {
User user = userService.findPwd(username, email);
Integer pwd = 0;
if (user != null) {
@Controller
public class BookController {
@Autowired
private BookService bookService;
/**
* 获取全部书籍信息
* @param pn
* @return
*/
@RequestMapping("/getAllBook")
@ResponseBody
public PageInfo<Book> getAllBook(@RequestParam(value = "pn", defaultValue = "1") Integer pn) {
//在查询之前只需要调用,传入页码,以及每页的大小
PageHelper.startPage(pn, 3);
//startPage后面紧跟的这个查询就是一个分页查询
List<Book> books = bookService.getAllBook();
//使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了
//封装了详细的分页信息,包括我们查询出来的数据,传入连续显示的页数
return new PageInfo(books, 5);
}
/**
* 添加书籍功能
* @param bookPic
* @param bookName
* @param bookType
* @param bookIntro
* @param model
* @return
*/
@RequestMapping("/addBook")
@ResponseBody
public String addBook(@RequestPart("bookPic") MultipartFile bookPic,
@RequestParam("bookName") String bookName,
@RequestParam("bookType") Integer bookType,
@RequestParam("bookIntro") String bookIntro,
Model model) {
Book book = new Book();
try {
//根据创建时间对文件进行重命名
String fileName = System.currentTimeMillis() + bookPic.getOriginalFilename();
//上传文件存储的位置
String destFileName = "D://BookPic/images/" + File.separator + fileName;
//防止改文件夹不存在,创建一个新文件夹
File destFile = new File(destFileName);
destFile.getParentFile().mkdirs();
//将文件存储到该位置
bookPic.transferTo(destFile);
//传递文件
model.addAttribute("fileName", fileName);
//将文件名存储到数据库中,以便查询调用
book.setBookPic(fileName);
String pic = book.getBookPic();
bookService.addBook(bookName, bookType, bookIntro, pic);
} catch (FileNotFoundException e) {
e.printStackTrace();
return "上传失败," + e.getMessage();
} catch (IOException e) {
e.printStackTrace();
return "上传失败," + e.getMessage();
}
return "success";
}
/**
* 删除书籍功能
* @param bookId
* @return
*/
@RequestMapping("/delBook")
@ResponseBody
public int delBook(@RequestParam(value = "bookId") Integer bookId) {
int result = bookService.delBook(bookId);
int flag = 0;
if (result > 0) {
flag = 1;
}
return flag;
}
/**
* 根据id查询书籍信息
* @param bookId
* @return
*/
@RequestMapping("/queryBookById")
@ResponseBody
public Book updateBook(@RequestParam(value = "bookId") Integer bookId) {
return bookService.queryBookById(bookId);
}
/**
* 批量删除书籍功能
* @param ids
* @return
*/
@RequestMapping("/delAllBook")
@ResponseBody
public int delAllBook(@RequestParam(value = "ids") String ids) {
int result = 0;
//批量删除
if(ids.contains("-")){
List<Integer> del_ids = new ArrayList<>();
String[] str_ids = ids.split("-");
//组装id的集合
for (String string : str_ids) {
del_ids.add(Integer.parseInt(string));
}
result = bookService.deleteBatch(del_ids);
} else{
Integer id = Integer.parseInt(ids);
result = bookService.delBook(id);
}
int flag = 0;
if (result > 0) {
flag = 1;
}
return flag;
}
/**
* 修改书籍功能
* @param book
* @return
*/
@RequestMapping("/updateBookById/{bookId}")
@ResponseBody
public int updateBookById(Book book) {
int result = bookService.updateBookById(book);
int flag = 0;
if (result > 0) {
flag = 1;
}
return flag;
}
/**
* 根据输入信息查询书籍功能
* @param pn
* @param request
* @return
*/
@RequestMapping("/searchBook")
@ResponseBody
public PageInfo<Book> searchBook(@RequestParam(value = "pn", defaultValue = "1") Integer pn, HttpServletRequest request) {
String searchBook = request.getParameter("searchBook");
//在查询之前只需要调用,传入页码,以及每页的大小
PageHelper.startPage(pn, 3);
//startPage后面紧跟的这个查询就是一个分页查询
List<Book> books = bookService.searchBook(searchBook);
//使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了
//封装了详细的分页信息,包括我们查询出来的数据,传入连续显示的页数
return new PageInfo(books, 5);
}
}
//拦截器
@Configuration
public class MyWebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pic/**").addResourceLocations("file:D://BookPic/images/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**") //所有请求都被拦截,包括静态资源
.excludePathPatterns("/", "/*.do", "/assets/**", "/bootstrap-3.4.1-dist/**", "/css/**", "/images/**", "/js/**", "/white/**", "/favicon.ico"); //放行的请求
}
}
Demo之Gitee地址:基于SpringBoot+mybatis的增删改查Demo
Demo之GitHub地址:基于SpringBoot+mybatis的增删改查Demo
自动填充教务系统课程评教和教师评教所有题,节省学子宝贵的学习时间!方法简单,适合年龄12周岁以上。_国科大一键评估
今天网友给我传过来《疯狂的程序员》漫画,一幅四格漫画和一幅插图,觉得很有意思,不敢独享,赶紧拿出来和大家分享一下。两个风格不一样,不知道大家都喜欢哪种风格。我觉得还是比较喜欢漫画的,但是BOSS Liu他们说我欣赏水平有问题。唉。我想,如果大家都喜欢,就再央他们多画点,以后还能收到出版的书里面去。...
文件:百度云:链接:https://pan.baidu.com/s/1RYjn4sqm73AZ2BxqDzOoMg提取码:2333网上连这种笔刷都拿来卖钱,真心是服啊!所以我利用Maya和ZB制作了一个笔刷。过程还是简单的,像风格化头发也是能够通过这种方法制作。如果想了解原理的话,B站有教程。如果可以的话,点个关注支持一下:https://space.bilibili.com/73749036..._zbrush麻花辫
强化学习作为行为主义人工智能学派的典型代表,近几年与深度神经网络相结合形成的深度强化学习(DRL),达到了令人惊叹的智能水平:2015年DQN智能体玩视频游戏超越人类水平,2017年基于PPO算法的Open Five在《Dota》游戏中战胜人类顶尖职业玩家,2019年基于DRL的AlphaStar在《星际争霸II》游戏中战胜人类顶尖职业玩家。然而,深度强化学习理论较为抽象,学习曲线陡峭,需要大量的时间和精力才能入门,很多硕士和博士往往浪费了大量时间在入门阶段,耽误了学习和科研进度。_深度强化学习实战
如下两个类 public class UserInfoRoleInfo { public int UserId { get; set; } public string UserNumber { get; set; } public string UserName { get; set; } public RoleInfo..._datapropertyname
1.首先,在KRPano资源分析工具中,打开某个720think的全景网址:例如如下的网址:https://www.720think.com/t/306aus3d32.在左侧资源查看器搜索xml文件3.由于720think网站的xml已经被加密,我们可以使用批量解密替换功能进行解密4.打开解密后的XML文件进行查看,可以看到17765.xml_t150..._720think下载
1 VRP基本原理车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一。VRP关注有一个供货商与K个销售点的路径规划的情况,可以简述为:对一系列发货点和收货点,组织调用一定的车辆,安排适当的行车路线,使车辆有序地通过它们,在满足指定的约束条件下(例如:货物的需求量与发货量,交发货时间,车辆容量限制,行驶里程限制,行驶时间限制等),力争实现一定的目标(如车辆空驶总里程最短,运输总费用最低,车辆按一定时间到达,使用的车辆数最小等)。2 问题属性与常见问题。_matlab中转站选址问题
Verlog——单周期8指令CPU实现_irverlog
//【程序38】//题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。#include<stdio.h>int main(){ int a[20],i,*p,*max,*min,max_index,min_index,n,tmp; //不允许把一个数赋予指针变量,故下面的赋值是错误的: int *p; p=1000; scanf("%d..._使用指针完成输入数组,最大的数与第一个元素交换,最小的数与最后一个元素交换,输
Unicode 字符串Python 中定义一个 Unicode 字符串和定义一个普通字符串一样简单:引号前小写的"u"表示这里创建的是一个 Unicode 字符串。如果你想加入一个特殊字符,可以使用 Python 的 Unicode-Escape 编码。如下例所示:被替换的 \u0020 标识表示在给定位置插入编码值为 0x0020 的 Unicode 字符(空格符)。在Python2中,普通字符...
使用selenium报找不到浏览器安装路径错误解决办法如下:1.重新安装firefox在默认路径下; OS Expected Location of Firefox Linux firefox (found using "which") Mac /Applications/Firefox.app/Contents/MacOS/firefox Windows...
最近在使用darknet做目标检测,但是需求是在windos下配置好cuda,cudnn并且使用github上的darknet网络,因此菜了很多坑,但是目前已经将darknet的exe文件已经编译出来了。在编译darknet的过程中也有 一个错误也是说什么main已经在XXX中已定义,然后找到这个文件,将main函数注释掉。但是这个obj文件是不能打开的,因此很头疼。然后找了好多也解决不了..._main在xx中已被定义