SpringBoot从入门到精通教程(六)

之前学了,这么多东西
thyemeaf、MyBatis还有 配置文件等等,今天我们就来做一个小案例
CRUD,程序员的必备
项目结构

pom.xml
<!-- mybatis 相关依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- thymeleaf 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
3. application.properties
logging.level.org.springframework=DEBUG
#springboot mybatis
mybatis.mapper-locations = classpath:mapper/*Mapper.xml
mybatis.config-location = classpath:mapper/config/sqlMapConfig.xml
mybatis.type-aliases-package = com.spiritmark.demo.model
#数据库
spring.datasource.driver-class-name= com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/springboot_test?serverTimezone=GMT
spring.datasource.username = root
spring.datasource.password = 123qwe
- UserController.java
package com.spiritmark.demo.controller;
import java.util.List;
import com.spiritmark.demo.model.User;
import com.spiritmark.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/index")
public String showUser(Model model){
List<User> list = userService.findAll();
model.addAttribute("list",list);
return "index";
}
// 进入添加界面
@RequestMapping("/intoAdd")
public String intoAdd(){
return "add";
}
// 添加用户
@RequestMapping("/add")
public String add(User user){
userService.add(user);
return "redirect:/index";
}
// 删除用户
@RequestMapping("/delete")
public String delete(int id){
userService.delete(id);
return "redirect:/";
}
// 进入修改用户
@RequestMapping("/intoUpdate")
public String intoUpdate(Model model,int id){
User user = userService.findById(id);
model.addAttribute("user",user);
return "update";
}
// 修改用户
@RequestMapping("/update")
public String update(User user){
userService.update(user);
return "redirect:/index";
}
}
- UserMapper.java
package com.spiritmark.demo.mapper;
import com.spiritmark.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
// 获取所有
List<User> findAll();
// 新增
void add(User user);
// 删除
void delete(int id);
// 编辑
void update(User user);
// 查询
User findById(int id);
}
- UserServiceImpl.java
package com.spiritmark.demo.service.impl;
import java.util.List;
import java.util.Map;
import com.spiritmark.demo.mapper.UserMapper;
import com.spiritmark.demo.model.User;
import com.spiritmark.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
// 获取所有
@Override
public List<User> findAll() {
return userMapper.findAll();
}
// 新增
@Override
public void add(User user) {
userMapper.add(user);
}
// 删除
@Override
public void delete(int id) {
userMapper.delete(id);
}
// 修改
@Override
public void update(User user) {
userMapper.update(user);
}
// 查询
@Override
public User findById(int id) {
return userMapper.findById(id);
}
}
- UserService.java
package com.spiritmark.demo.service;
import com.spiritmark.demo.model.User;
import java.util.List;
public interface UserService {
// 获取所有
List<User> findAll();
// 新增
void add(User user);
// 删除
void delete(int id);
// 编辑
void update(User user);
// 查询
User findById(int id);
}
- UserMapper.xml
<?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.spiritmark.demo.mapper.UserMapper">
<select id="findAll" resultType="com.spiritmark.demo.model.User">
select * from user
</select>
<insert id="add" parameterType="com.spiritmark.demo.model.User">
insert into user (username, password)
values (#{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR})
</insert>
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id= #{id,jdbcType=INTEGER}
</delete>
<select id="findById" resultType="com.spiritmark.demo.model.User">
select * from user where id= #{id,jdbcType=INTEGER}
</select>
<update id="update" parameterType="com.spiritmark.demo.model.User">
update user set
username= #{username,jdbcType=VARCHAR},
password = #{password,jdbcType=VARCHAR}
where id= #{id,jdbcType=INTEGER}
</update>
</mapper>
index.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title></title>
</head>
<body>
<a th:href="@{/intoAdd}">添加</a>
<table>
<thead>
<tr>
<th>id</th>
<th>username</th>
<th>password</th>
<th>op</th>
</tr>
</thead>
<tbody>
<tr th:each="user : ${list}">
<td th:text="${user.id}"></td>
<td th:text="${user.username}"></td>
<td th:text="${user.password}"></td>
<td><a th:href="@{/delete(id=${user.id})}">删除</a><a th:href="@{/intoUpdate(id=${user.id})}">修改</a></td>
</tr>
</tbody>
</table>
</body>
</html>
add.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title></title>
</head>
<body>
<form th:action="@{/add}" method="post">
<input type="text" id="username" name="username">
<input type="text" id="password" name="password">
<input type="submit">
</form>
</body>
</html>
update.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<title></title>
</head>
<body>
<form th:action="@{/update}" th:object="${user}" method="post">
<input type="hidden" name="id" th:value="*{id}">
<input type="text" name="username" id="username" th:value="*{username}">
<input type="text" name="password" id="password" th:value="*{password}">
<input type="submit">
</form>
</body>
</html>

大功告成
SpringBoot从入门到精通教程(六)的更多相关文章
- SpringBoot从入门到精通教程(二)
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- SpringBoot从入门到精通教程(七)
今天,我们继续讲SpringBoot整合Redis ,也就缓存,它将与我们的Springboot整合 Redis 简介 Redis 是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语 ...
- SpringBoot从入门到精通教程(三)
在上一篇中,我们已经讲了,SpringBoot 如何构建项目,和SpringBoot的HelloWorld, 那这一节我们继续讲 Thymeleaf Thymeleaf 官网: Thymeleaf T ...
- SpringBoot从入门到精通教程(一)
写在前面的话: 在很早之前,记笔记时候,我就一直在思考一个问题,我记笔记是为了什么,我一直想不明白 ,后面发现技术跟新迭代的速度实在太快了,笔记刚纪完,技术又跟新了,于是我想了想干脆边写博客,边记笔记 ...
- SpringBoot从入门到精通教程(八)
本主要介绍ElasticSearch 和 SpringBoot 的整合 ,对您有帮助的话,点个关注哦 ElastSearch 介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供 ...
- SpringBoot从入门到精通教程(五)
上节,我们讲了 SpringBoot 如何使用MyBatis 今天我们讲讲 Springboot Logo自定义的问题, 我们在启动 SpringBoot 时,控制台会打印 SpringBoot Lo ...
- SpringBoot从入门到精通教程(四)
前端时间整合SSM ,发现了一个现象,在整合的时候 配置文件过于复杂. 1.建工程,建目录,导入jar包. 2.配置 数据源 映射信息 等等 ... 3. 还有 各种 拦截器,控制器 ,头都大了... ...
- 深入浅出!springboot从入门到精通,实战开发全套教程!
前言 之前一直有粉丝想让我出一套springboot实战开发的教程,我这边总结了很久资料和经验,在最近总算把这套教程的大纲和内容初步总结完毕了,这份教程从springboot的入门到精通全部涵盖在内, ...
- Spring Boot从入门到精通(六)集成Redis实现缓存机制
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...
随机推荐
- 3种办法教你解决Vegas预览画面卡顿问题
做视频的小伙伴都知道,剪视频的时候最烦躁的就是卡顿,不能编辑,不能预览.最近很多同学就反映在使用Vegas的时候,预览窗口播放非常卡顿,有时候根本预览不了,这该如何解决呢? 制作视频并不是简单的拼拼凑 ...
- tcp连接的三次握手
为什么tcp连接需要三次握手才能建立连接 主要是为了初始化sequence number的初始值,通信的双方要互相通知双方的sequence number,这个要作为以后数据通信的序号,保证以后不会因 ...
- WPF有关控件和模板样式设计的微软官方文档
说明 如果你正在使用WPF开发应用程序,相信这篇博客会对你有用.希望你能认真的阅读 正文 此文主要以Button为例进行介绍此文档的组成部分. Button Parts Button控件没有任何命名的 ...
- appium服务器参数
appium服务器初始化参数 Appium服务器初始化参数(功能) 设置能力 能力参数项 获取appPackage与appActivity 查看当前活动名称 使用uiautomatorviewer定位 ...
- Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree 题解(贪心+易错)
题目链接 题目大意 给你一课树,要你给每一条边分权值,每条边的权值大于0,他们的乘积等于k,而且要使得n-1条边1的数量尽可能少,定义 f(u,v)为u到v的边权和求 \(\max \sum_{i=1 ...
- java base64加解密
接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...
- 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!
距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...
- 【Golang】基础-操作 csv 文件
1. csv plugins,自带极简 1.1 写数据到csv文件 知识点:encoding/csv 库的 Write 方法使用[]string的切片格式追加方式写入数据 1.1.1 追加写入 pac ...
- java基础之一:基本数据类型
在java中有基本数据类型和引用类型两种,今天来说下基本数据类型和其对应的包装类的之间的关系. 一.概述 java中的基本数据类型有八种,分别是char.byte.short.int.long.flo ...
- guava中的SettableFuture分析
当缓存中没有要找的数据时,则要从数据库中去查询,而当并发量比较大时可能会击穿数据库,所以guava cache对同一值的查询做了合并请求的处理.其中就用到了SettableFuture,类似一把锁,只 ...