赞
踩
IDEA软件、JDK1.8、Mysql5.7+、Navicat、SpringBoot2.x
pom配置阿里云仓库
- <repositories>
-
- <repository>
- <id>nexus-aliyun</id>
- <name>nexus-aliyun</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </repository>
-
- <pluginRepositories>
- <pluginRepository>
- <id>public</id>
- <name>aliyun nexus</name>
- <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
- <releases>
- <enabled>true</enabled>
- </releases>
- <snapshots>
- <enabled>false</enabled>
- </snapshots>
- </pluginRepository>
- </pluginRepositories>
-
- </repositories>
application.yml
- server:
- port: 9090
-
- spring:
- datasource:
- url: jdbc://mysql//localhost:3306/springboot-vue3
- driver-class-name: com.mysql.jdbc.Driver
- username: root
- password: root
启动成功
创建数据库表t_user
- CREATE TABLE `user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '姓名',
- `date` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '日期',
- `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址',
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
实现增删改查sql语句
新增:
INSERT INTO `t_user`(name, date, address) VALUES('张三', '2023-06-25', '江苏省南京市');
修改:
UPDATE t_user SET name = "李四" WHERE id = 1;
删除:
DELETE FROM t_user WHERE id = 1;
查询:
SELECT * FROM t_user WHERE name LIKE '%张%'
分页查询:
SELECT * FROM t_user WHERE address LIKE '%南京%' LIMIT 0,2;
SQL语句打印:
- logging:
- level:
- com.example.springboot.mapper: debug
Mybatis开启下划线自动转驼峰
- mybatis:
- configuration:
- map-underscore-to-camel-case: true # 开启下划线自动转驼峰
统一包装类Result
- /**
- * Controller统一返回的包装类
- */
- public class Result {
- private static final String SUCCESS_CODE = "200";
- private static final String ERROR_CODE = "500";
-
- private String code; // 返回的状态码。告诉前端这次请求成功还是失败
- private String msg; // 错误信息
- private Object data; // 包装的数据
-
- public Result(String code, String msg, Object data) {
- this.code = code;
- this.msg = msg;
- this.data = data;
- }
-
- public Result(String code, String msg) {
- this.code = code;
- this.msg = msg;
- }
-
- public Result() {
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Object getData() {
- return data;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
-
- public static Result success(Object data) {
- return new Result(SUCCESS_CODE, "", data);
- }
-
- public static Result success() {
- return new Result(SUCCESS_CODE, "");
- }
-
- public static Result error(String msg) {
- return new Result(SUCCESS_CODE, msg);
- }
- }
安装axios 1.4.0:
npm i axios
配置环境变量
.env.dev
- VITE_ENV = dev
- VITE_BASE_URL = 'http://localhost:9090'
utils/request.js
- import axios from "axios";
-
- const request = axios.create({
- baseURL: 'http://localhost:9091',
- timeout: 30000
- })
-
- request.interceptors.request.use(config => {
- config.headers['Content-Type'] = 'application/json;charset=utf-8';
- return config
- }, error => {
- console.log('request error:' + error)//for error debug
- return Promise.reject(error)
- })
-
- request.interceptors.response.use(response =>{
- let res = response.data
- // res.code
- return res
- },error => {
- console.log('response error:' +error)
- return Promise.reject(error)
- })
-
- export default request
导入request对象
import request from "../../utils/request";
因为没有返回request的config
跨域错误
在后端修改配置即可
1.在controller加个注解@CrossOrigin解决
2.在全局配置跨域
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.web.cors.CorsConfiguration;
- import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
- import org.springframework.web.filter.CorsFilter;
-
- @Configuration
- public class CrossOriginConfig {
-
- // 当前跨域请求最大有效时长。这里默认1天
- private static final long MAX_AGE = 24 * 60 * 60;
-
- @Bean
- public CorsFilter corsFilter() {
- UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
- CorsConfiguration corsConfiguration = new CorsConfiguration();
- corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
- corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
- corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
- corsConfiguration.setMaxAge(MAX_AGE);
- source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
- return new CorsFilter(source);
- }
- }
- <el-button type="primary" @click="load" style="margin-left: 5px">查询数据</el-button>
-
-
-
- const state = reactive({
- tableData: [],
- form:{}
- })
-
-
-
- //请求后台数据 load去加载表格里
- const load = () =>{
- request.get('/user/selectAll?name='+name.value).then(res =>{
- //res.data就是后台返回的数组
- state.tableData = res.data
-
- })
- }
- load();
- <el-button type="info" @click="reset">重置数据</el-button>
-
-
-
- const reset = () =>{
- name.value = '';
- load();
- }
User
- package com.example.springboot.entity;
-
- /**
- * author: zx
- * time: 2023-06-25
- */
- public class User {
-
- private Integer id;
-
- private String name;
-
- private String date;
-
- private String address;
-
- private String userNo;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getDate() {
- return date;
- }
-
- public void setDate(String date) {
- this.date = date;
- }
-
- public String getAddress() {
- return address;
- }
-
- public void setAddress(String address) {
- this.address = address;
- }
-
- public String getUserNo() {
- return userNo;
- }
-
- public void setUserNo(String userNo) {
- this.userNo = userNo;
- }
- }
UserController
- @RestController
- @RequestMapping("/user")
- public class UserController {
-
- @Resource
- private UserMapper userMapper;
-
- @GetMapping("/selectAll")
- //user/selectAll?name=xxx
- public Result selectAll(@RequestParam String name){
- List<User> userList = userMapper.selectAll(name);
- return Result.success(userList);
- }
- }
UserMapper
- @Mapper
- public interface UserMapper {
-
- @Select("select * from t_user where name like concat('%',#{name},'%') or date like concat('%',#{name},'%') or address like concat('%',#{name},'%') or user_no like concat('%',#{name},'%') ")
- List<User> selectAll(String name);
- }
国际化
- import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
-
-
- app.use(ElementPlus, {
- locale: zhCn,
- })
UserController
- //分页查询
- @GetMapping("/selectPage")
- //user/selectAll?name=xxx
- public Result selectPage(@RequestParam String name, @RequestParam Integer start, @RequestParam Integer pageSize){
- List<User> userList = userMapper.selectPage(name,start,pageSize);
- Integer total = userMapper.selectTotal(name);
- Map<String,Object> map = new HashMap<>();
- map.put("list",userList);
- map.put("total",total);
- return Result.success(map);
- }
UserMapper
- @Select("select * from t_user where name like concat('%',#{name},'%') or date like concat('%',#{name},'%') or address like concat('%',#{name},'%') or user_no like concat('%',#{name},'%') order by id desc limit #{start},#{pageSize} ")
- List<User> selectPage(@Param("name") String name, @Param("start") Integer start, @Param("pageSize") Integer pageSize);
-
- @Select("select count(id) from t_user where name like concat('%',#{name},'%') or date like concat('%',#{name},'%') or address like concat('%',#{name},'%') or user_no like concat('%',#{name},'%')")
- Integer selectTotal(@Param("name") String name);
- <div style="margin: 10px">
- <el-pagination background layout=" prev, pager, next,total,sizes"
- v-model:current-page="pageNum"
- v-model:page-size="pageSize"
- :page-sizes="[1, 2,5]"
- @size-change="load"
- @current-change="load"
- :total="total"/>
- </div>
-
-
-
- const total = ref(0)
- const pageNum = ref(1)
- const pageSize = ref(1)
-
-
- //请求后台数据 load去加载表格里
- const load = () => {
- //pageNum => start
- let start = (pageNum.value - 1) * pageSize.value
- request.get('/user/selectPage?name=' + name.value + '&start=' + start + '&pageSize=' + pageSize.value).then(res => {
- //res.data就是后台返回的数组
- state.tableData = res.data.list
- total.value = res.data.total
- })
- }
- load();
UserController
- @PostMapping("save")
- public Result save(@RequestBody User user){
- userMapper.save(user);
- return Result.success();
- }
UserMapper
- @Insert("insert into t_user(name,date,address,user_no) values(#{name},#{date},#{address},#{userNo})")
- void save(User user);
- <el-button type="primary" @click="handleAdd">新增数据</el-button>
-
-
-
- <!--弹窗-->
- <el-dialog v-model="dialogFormVisible" title="信息" width="40%">
- <el-form :model="state.form" label-width="100px" style="padding-right:30px ">
- <el-form-item label="日期">
- <el-date-picker v-model="state.form.date" type="date" placeholder="选择日期" value-format="YYYY-MM-DD" style="width:100%"/>
- </el-form-item>
- <el-form-item label="姓名">
- <el-input v-model="state.form.name" autocomplete="off"/>
- </el-form-item>
- <el-form-item label="地址">
- <el-input v-model="state.form.address" autocomplete="off"/>
- </el-form-item>
- <el-form-item label="编号">
- <el-input v-model="state.form.userNo" autocomplete="off"/>
- </el-form-item>
- </el-form>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="dialogFormVisible = false">取消</el-button>
- <el-button type="primary" @click="save">确认</el-button>
- </span>
- </template>
- </el-dialog>
-
-
- import {ElMessage} from "element-plus";
-
-
- //新增数据 设置新的空的绑值对象 打开弹窗
- const handleAdd = () => {
- state.form = {}
- //打开弹窗
- dialogFormVisible.value = true
- }
-
-
-
-
- //保存数据,把数据插入到tableData中,并刷新页面,弹窗关闭
- const save = () => {
- request.post('/user/save', state.form).then(res => {
- if (res.code === '200') {
- ElMessage.success('操作成功')
- dialogFormVisible.value = false
- } else {
- ElMessage.error(res.msg)
- }
- })
- }
UserController
- @PutMapping("/update")
- public Result update(@RequestBody User user){
- userMapper.update(user);
- return Result.success();
- }
UserMapper
- @Update("update t_user set name = #{name},date = #{date},address = #{address},user_no = #{userNo} where id = #{id}")
- void update(User user);
- //保存数据,把数据插入到tableData中,并刷新页面,弹窗关闭
- const save = () => {
- request({
- url: state.form.id ? '/user/update' : '/user/save',
- method: state.form.id ? 'PUT' : 'POST',
- data: state.form
- }).then(res => {
- if (res.code === '200') {
- ElMessage.success('操作成功')
- //调用查询方法,更新表格数据
- load()
- dialogFormVisible.value = false
- } else {
- ElMessage.error(res.msg)
- }
- })
- }
UserController
- @DeleteMapping("/delete")
- public Result delete(@RequestParam Integer id){
- userMapper.delete(id);
- return Result.success();
- }
UserMapper
- @Delete("delete from t_user where id = #{id}")
- void delete(Integer id);
- <el-button link type="danger" size="default" @click.prevent="remove(scope.row.id)">删除</el-button>
-
-
-
- //删除数据 从index位置开始,删除一行即可
- const remove = (id) => {
- request.delete('/user/delete?id=' + id).then(res => {
- if (res.code === '200') {
- ElMessage.success('操作成功')
- //调用查询方法,更新表格数据
- load()
- dialogFormVisible.value = false
- } else {
- ElMessage.error(res.msg)
- }
- })
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。