SpringBoot+Mybatis增删改查实战
简介
SpringBoot 和 Mybatis 是啥请自行百度,作者这里也是花了几天时间入门了这个框架用来完成任务,并且也算符合要求的完成了任务,期间也各种百度但是没找到自己想要的那种简单易懂的教程,所以踩了很多坑,写这个博客的目的就是为了让大家少踩一点坑,开始。
创建一个 SpringBoot 项目
https://start.spring.io/
点开这个网站,创建一个 Springboot 项目,如下图,这里用的是 2.1.5,学技术嘛,就是要学新的。
选择依赖,点击左下角的 Dependencies
Web
我们这次开发的是 web 应用所以选择 webThymeleaf
一款模板引擎,能够比较方便的展现后台传来的数据MySQL
我们这次使用 Mysql 数据库JDBC
Java 数据库连接 Java Database Connectivity, 简称 JDBCMyBatis
请看第一段
最后点击左下角的 Generate Project,将会开始下载一个以你项目名称开头的 zip 文件,下载完成后解压到你的工作目录。
打开这个项目
这里使用的是 IDEA,别的啥也行比如 eclipse,这里只讲解 IDEA 的操作,安装破解 IDEA 百度一大堆,安装好之后打开 IDEA(发现 IDEA 有个问题,有的时候自动 import 包好用,有的时候不好用,坑!),然后选择左上角的 File->Open,找到你刚刚解压的项目文件里的 pom.xml 点击 ok 如下图
目录结构
增加修改目录结构为下图
开始编写
这里我们就编写一个人员信息的增删改查
配置数据库
数据库创建
打开 mysql 数据库创建一个叫 test 的数据库之后创建 person 表,这里使用的是 Navicat 百度有破解版,会命令用命令行也行,如下图,记得设置主键自增,然后随便加几个数据以便之后查询。
application.yml
路径:/resources/application.yml
server:
port: 8080
spring:
datasource:
name:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=UTC
username: root
password: root
mybatis:
mapper-locations: classpath:mapper/*.xml
Person 类
路径 /model/Person.java
package com.ljsh.test.model;
public class Person {
/*
{id} 自增主键
{name} 人员姓名
{mobile} 人员电话
*/
private int id;
private String name;
private String mobile;
<span class="hljs-comment">// 右键 Generate -> Setter and Getter -> Shift全选 -> ok 生成如下代码</span>
<span class="hljs-keyword">public</span> <span class="hljs-type">int</span> <span class="hljs-title function_">getId</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> id;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setId</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span> {
<span class="hljs-built_in">this</span>.id = id;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getName</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> name;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setName</span><span class="hljs-params">(String name)</span> {
<span class="hljs-built_in">this</span>.name = name;
}
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">getMobile</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> mobile;
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">setMobile</span><span class="hljs-params">(String mobile)</span> {
<span class="hljs-built_in">this</span>.mobile = mobile;
}
<span class="hljs-comment">// 右键 Generate -> toString() -> 全选 -> ok 生成如下代码</span>
<span class="hljs-meta">@Override</span>
<span class="hljs-keyword">public</span> String <span class="hljs-title function_">toString</span><span class="hljs-params">()</span> {
<span class="hljs-keyword">return</span> <span class="hljs-string">"Person{"</span> +
<span class="hljs-string">"id="</span> + id +
<span class="hljs-string">", name='"</span> + name + <span class="hljs-string">'\''</span> +
<span class="hljs-string">", mobile='"</span> + mobile + <span class="hljs-string">'\''</span> +
<span class="hljs-string">'}'</span>;
}
}
PersonDao
路径:/dao/PersonDao.java
package com.ljsh.test.dao;
import com.ljsh.test.model.Person;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface PersonDao {
/*
查所有
return List<Person>
*/
List<Person> getAll();
<span class="hljs-comment">/*
根据ID查询
{id} 要查询人员的 id
*/</span>
Person <span class="hljs-title function_">getPersonByID</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span>;
<span class="hljs-comment">/*
删除
{id} 要删除人员的 id
*/</span>
<span class="hljs-keyword">void</span> <span class="hljs-title function_">delete</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span>;
<span class="hljs-comment">/*
更新
{p} 要更新的Person实例
*/</span>
<span class="hljs-keyword">void</span> <span class="hljs-title function_">update</span><span class="hljs-params">(Person p)</span>;
<span class="hljs-comment">/*
增加
{p} 要新增的Person实例
*/</span>
<span class="hljs-keyword">void</span> <span class="hljs-title function_">newp</span><span class="hljs-params">(Person p)</span>;
}
PersonDao.xml
路径:/mapper/PersonDao.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" >
<!-- 这里填写对应的 Dao 文件所在的路径 -->
<mapper namespace="com.ljsh.test.dao.PersonDao" >
<!-- 填写数据库里实例 Person 对应的表的表名 -->
<!-- 这里是作为一个变量使用 -->
<sql id="table">person</sql>
<span class="hljs-comment"><!-- id属性填写Dao文件里的函数名称 xxType是参数或是结果的类型根据情况填写 --></span>
<span class="hljs-comment"><!-- 查询所有 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"getAll"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"com.ljsh.test.model.Person"</span>></span>
SELECT
*
FROM
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"table"</span> /></span>
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 根据id查询 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"getPersonById"</span> <span class="hljs-attr">resultType</span>=<span class="hljs-string">"com.ljsh.test.model.Person"</span>></span>
SELECT
*
FROM
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"table"</span>/></span>
WHERE
id = #{id}
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-comment"><!-- 增 --></span>
<span class="hljs-tag"><<span class="hljs-name">insert</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"newp"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"com.ljsh.test.model.Person"</span>></span>
INSERT INTO
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"table"</span>/></span>
(name,phone)
VALUES
(#{name},#{phone})
<span class="hljs-tag"></<span class="hljs-name">insert</span>></span>
<span class="hljs-comment"><!-- 改 --></span>
<span class="hljs-tag"><<span class="hljs-name">update</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"update"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"com.ljsh.test.model.Person"</span>></span>
UPDATE
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"table"</span>/></span>
SET
<span class="hljs-comment"><!--<if test="name != null">name = #{name}</if>--></span>
name = #{name},phone = #{phone},status = #{status}
WHERE
id = #{id}
<span class="hljs-tag"></<span class="hljs-name">update</span>></span>
<span class="hljs-comment"><!-- 删 --></span>
<span class="hljs-tag"><<span class="hljs-name">delete</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"delete"</span> <span class="hljs-attr">parameterType</span>=<span class="hljs-string">"com.ljsh.test.model.Person"</span>></span>
DELETE FROM
<span class="hljs-tag"><<span class="hljs-name">include</span> <span class="hljs-attr">refid</span>=<span class="hljs-string">"table"</span>/></span>
WHERE
id = #{id}
<span class="hljs-tag"></<span class="hljs-name">delete</span>></span>
</mapper>
PersonService
路径:/service/PersonService.java
package com.ljsh.test.service;
import com.ljsh.test.dao.PersonDao;
import com.ljsh.test.model.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PersonService {
@Autowired
PersonDao personDao;
<span class="hljs-comment">/*
Service层介于controller和dao之间作为服务层进行一些逻辑处理,
这里逻辑太简单所以知识单纯调用dao所以不做注释
*/</span>
<span class="hljs-keyword">public</span> List<Person> <span class="hljs-title function_">getAll</span><span class="hljs-params">()</span>{
<span class="hljs-keyword">return</span> personDao.getAll();
}
<span class="hljs-keyword">public</span> Person <span class="hljs-title function_">getPersonByID</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span>{
<span class="hljs-keyword">return</span> personDao.getPersonByID(id);
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">delete</span><span class="hljs-params">(<span class="hljs-type">int</span> id)</span>{
personDao.delete(id);
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">update</span><span class="hljs-params">(Person p)</span>{
personDao.update(p);
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">newp</span><span class="hljs-params">(Person p)</span>{
personDao.newp(p);
}
}
PersonController
路径:/controller/PersonController.java
package com.ljsh.test.controller;
import com.ljsh.test.model.Person;
import com.ljsh.test.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@Controller
public class PersonController {
<span class="hljs-meta">@Autowired</span>
PersonService personService;
<span class="hljs-comment">// 设置访问路由值为路径</span>
<span class="hljs-meta">@RequestMapping("/")</span>
<span class="hljs-keyword">public</span> ModelAndView <span class="hljs-title function_">index</span><span class="hljs-params">()</span>{
<span class="hljs-comment">// 顾名思义 实体和数据 同时返回页面模板和数据</span>
<span class="hljs-type">ModelAndView</span> <span class="hljs-variable">mav</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">ModelAndView</span>(<span class="hljs-string">"index"</span>);
List<Person> list = personService.getAll();
mav.addObject(<span class="hljs-string">"list"</span>,list);
<span class="hljs-keyword">return</span> mav;
}
}
前端页面
路径:/templates/index.html
<!DOCTYPE html>
<html lang="en">
<!-- -->
<!-- 使用 thymeleaf 需引入 -->
<html xmlns:th="http://www.thymeleaf.org">
<head>
</head>
<body>
<div id="tableP">
<table>
<caption>人员信息</caption>
<tr>
<th>Name</th>
<th>Phone</th>
</tr>
<!-- 通过 th 命令使用一些操作 -->
<!-- 通过 ${} 使用变量 -->
<tr th:each="item: ${list}">
<td th:text="${{item.name}}">还没有任何人员信息哦</td>
<td th:text="${{item.mobile}}">你是不是想独吞奖品</td>
</tr>
</table>
</div>
</div>
</body>
</html>
右上角运行
要是没有这个可以右侧选择 TestApplication 右键 Run,结果图如下
未完待续
熄灯睡觉了,写的有点慢,删改查还没来及写,如果需求留言,我会继续更新。