增删改查---springboot最基础demo

业务描述

基于Spring,MyBatis,SpringBoot,Thymeleaf技术实现商品模块的增删改查操作。

添加依赖

https://mybatis.org/spring/ (官网 找依赖)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

初始化配置

配置 yml

spring:
  thymeleaf:
    prefix: classpath:/templates/pages/
    suffix: .html
    cache: false
  datasource:
    url: jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8
    username: root
    password: root


mybatis:
  mapper-locations: classpath:/mapper/*/*.xml

logging:
  level:
    com.cy: debug

初始页面 goods.html

server:
  port: 80
spring:
  datasource:
    url: jdbc:mysql:///dbgoods?serverTimezone=GMT%2B8&characterEncoding=utf8
    username: root
    password: root
  thymeleaf:
    prefix: classpath:templates/pages/
    suffix: .html
    cache: false
mybatis:
  mapper-locations: classpath:mapper/*.xml

logging:
  level:
    com.cy: debug

整体项目结构

在这里插入图片描述

项目API架构设计

在这里插入图片描述
在这里插入图片描述

编辑pojo类

可以lambok 或者 手动 设置set get 方法

package com.cy.pj.pojo;

import java.util.Date;

public class Goods {
    private Long id;//id bigint primary key auto_increment
    private String name;//name varchar(100) not null
    private String remark;//remark text
    private Date createdTime;//createdTime datetime

    public void setId(Long id) {

        this.id = id;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public void setRemark(String remark) {

        this.remark = remark;
    }

    public void setCreatedTime(Date createdTime) {

        this.createdTime = createdTime;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getRemark() {
        return remark;
    }

    public Date getCreatedTime() {
        return createdTime;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", remark='" + remark + '\'' +
                ", createdTime=" + createdTime +
                '}';
    }
}

页面编写 去thymeleaf官网

在这里插入图片描述

Using Thymeleaf

在这里插入图片描述

table

在这里插入图片描述

Date

在这里插入图片描述

Thymeleaf EL表达式

在这里插入图片描述

查询 select

controller

public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    //页面初始化 
    @RequestMapping("/goods")
    public String Goods(Model model){
        List<Goods> list= goodsService.findGoods();
        model.addAttribute("goods",list);
        return "goods";
    }

Service

@Service
public class GoodsServiceImpl implements GoodsService{
    @Autowired
    private GoodsDao goodsDao;


    @Override
    public List<Goods> findGoods() {
        List<Goods> list = goodsDao.select();

        return list;
    }

dao

@Mapper
public interface GoodsDao {

    @Select("select * from tb_goods")
     List<Goods> select();
     }

页面效果
在这里插入图片描述

删除 delete

页面链接

th:href=“@{/user/doDeleByid/{id}(id=${g.id})}”
在这里插入图片描述
Thymeleaf 官方th:href应用说明,如图所示
在这里插入图片描述
删除操作中,客户端与服务端代码关联说明,如图所示:
在这里插入图片描述

controller

@pathVariable不要忘

在这里插入图片描述
Service
在这里插入图片描述
dao
在这里插入图片描述

增加 inselet

页面

在这里插入图片描述
在这里插入图片描述

首先跳转页面 goods-add.html

在这里插入图片描述
在这里插入图片描述
添加页面中表单数据提交过程分析,如图所示:
在这里插入图片描述

页面submit

th:action=“@{/user/save}”

th:cation 记得加 th

在这里插入图片描述

controller
在这里插入图片描述

service

pojo封装更快捷
在这里插入图片描述
dao
在这里插入图片描述

更新 update

先跳转goods-update 根据id回显,再跟新

页面分析 href=“#” th:href="@{/user/doFindByid/{id}(id=${g.id}

在这里插入图片描述
controller
在这里插入图片描述
service
在这里插入图片描述
dao
在这里插入图片描述

跳转后页面分析,再update

th:action=“@{/user/doUpdateGoods}”
在这里插入图片描述
controller
在这里插入图片描述
service
在这里插入图片描述dao
在这里插入图片描述

怎样获取 @select 注解 上的 参数

底层运用反射

package com.cy.java.api.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;
/**自定义注解
 * @Retention 用于描述注解何时有效,例如RUNTIME就表示运行时有效
 * @Target 用于描述注解可以描述哪些对象?例如Type表示注解可以描述类或接口
 * */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Mapper{}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface Select{
	String value();
}

@Mapper
interface GoodsDao{
	@Select("select * from tb_goods")
	Object findGoods();
}

public class TestAnnotation01 {
	public static void main(String[] args) throws Exception {
		//1.如何判定GoodsDao接口上是否有@Mapper注解
		Class<?> cls=GoodsDao.class;//获得接口的字节码对象
		boolean flag=cls.isAnnotationPresent(Mapper.class);
		System.out.println(flag);
		Mapper mapper=cls.getDeclaredAnnotation(Mapper.class);
		if(mapper!=null) {
			System.out.println("GoodDao接口上有mapper注解");
		}
		//2.获取GoodsDao中findGoods方法上的@Select注解中的SQL?
		Method method=cls.getDeclaredMethod("findGoods");
		Select select=method.getDeclaredAnnotation(Select.class);
		String sql=select.value();
		System.out.println(sql);
	}
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值