之前学了,这么多东西 thyemeafMyBatis 还有 配置文件等等,今天我们就来做一个小案例

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
  1. 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";
} }
  1. 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); }
  1. 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);
} }
  1. 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);
}
  1. 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从入门到精通教程(六)的更多相关文章

  1. SpringBoot从入门到精通教程(二)

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  2. SpringBoot从入门到精通教程(七)

    今天,我们继续讲SpringBoot整合Redis ,也就缓存,它将与我们的Springboot整合 Redis 简介 Redis 是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语 ...

  3. SpringBoot从入门到精通教程(三)

    在上一篇中,我们已经讲了,SpringBoot 如何构建项目,和SpringBoot的HelloWorld, 那这一节我们继续讲 Thymeleaf Thymeleaf 官网: Thymeleaf T ...

  4. SpringBoot从入门到精通教程(一)

    写在前面的话: 在很早之前,记笔记时候,我就一直在思考一个问题,我记笔记是为了什么,我一直想不明白 ,后面发现技术跟新迭代的速度实在太快了,笔记刚纪完,技术又跟新了,于是我想了想干脆边写博客,边记笔记 ...

  5. SpringBoot从入门到精通教程(八)

    本主要介绍ElasticSearch 和 SpringBoot 的整合 ,对您有帮助的话,点个关注哦 ElastSearch 介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供 ...

  6. SpringBoot从入门到精通教程(五)

    上节,我们讲了 SpringBoot 如何使用MyBatis 今天我们讲讲 Springboot Logo自定义的问题, 我们在启动 SpringBoot 时,控制台会打印 SpringBoot Lo ...

  7. SpringBoot从入门到精通教程(四)

    前端时间整合SSM ,发现了一个现象,在整合的时候 配置文件过于复杂. 1.建工程,建目录,导入jar包. 2.配置 数据源 映射信息 等等 ... 3. 还有 各种 拦截器,控制器 ,头都大了... ...

  8. 深入浅出!springboot从入门到精通,实战开发全套教程!

    前言 之前一直有粉丝想让我出一套springboot实战开发的教程,我这边总结了很久资料和经验,在最近总算把这套教程的大纲和内容初步总结完毕了,这份教程从springboot的入门到精通全部涵盖在内, ...

  9. Spring Boot从入门到精通(六)集成Redis实现缓存机制

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言 ...

随机推荐

  1. 3种办法教你解决Vegas预览画面卡顿问题

    做视频的小伙伴都知道,剪视频的时候最烦躁的就是卡顿,不能编辑,不能预览.最近很多同学就反映在使用Vegas的时候,预览窗口播放非常卡顿,有时候根本预览不了,这该如何解决呢? 制作视频并不是简单的拼拼凑 ...

  2. tcp连接的三次握手

    为什么tcp连接需要三次握手才能建立连接 主要是为了初始化sequence number的初始值,通信的双方要互相通知双方的sequence number,这个要作为以后数据通信的序号,保证以后不会因 ...

  3. WPF有关控件和模板样式设计的微软官方文档

    说明 如果你正在使用WPF开发应用程序,相信这篇博客会对你有用.希望你能认真的阅读 正文 此文主要以Button为例进行介绍此文档的组成部分. Button Parts Button控件没有任何命名的 ...

  4. appium服务器参数

    appium服务器初始化参数 Appium服务器初始化参数(功能) 设置能力 能力参数项 获取appPackage与appActivity 查看当前活动名称 使用uiautomatorviewer定位 ...

  5. Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree 题解(贪心+易错)

    题目链接 题目大意 给你一课树,要你给每一条边分权值,每条边的权值大于0,他们的乘积等于k,而且要使得n-1条边1的数量尽可能少,定义 f(u,v)为u到v的边权和求 \(\max \sum_{i=1 ...

  6. java base64加解密

    接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...

  7. 快要C语言考试了,大学生们收好这些经典程序案例,包你考试过关!

    距离考试越来越近 编程大佬早已饥渴难耐 电脑小白还在瑟瑟发抖 但是不要怕! 来看看这些经典程序案例 包你考试过关! [程序1] 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多 ...

  8. 【Golang】基础-操作 csv 文件

    1. csv plugins,自带极简 1.1 写数据到csv文件 知识点:encoding/csv 库的 Write 方法使用[]string的切片格式追加方式写入数据 1.1.1 追加写入 pac ...

  9. java基础之一:基本数据类型

    在java中有基本数据类型和引用类型两种,今天来说下基本数据类型和其对应的包装类的之间的关系. 一.概述 java中的基本数据类型有八种,分别是char.byte.short.int.long.flo ...

  10. guava中的SettableFuture分析

    当缓存中没有要找的数据时,则要从数据库中去查询,而当并发量比较大时可能会击穿数据库,所以guava cache对同一值的查询做了合并请求的处理.其中就用到了SettableFuture,类似一把锁,只 ...