java springBoot连接数据库进行增删改查、模糊查询、表连接、全选操作、分页操作、数据回显。学习项目实例

本文介绍了一个SpringBoot项目中如何连接数据库进行各种操作,包括增删改查、模糊查询、表连接、全选操作、分页和数据回显。强调了实体类注解、DAO与Service层的使用,以及Controller层的关键代码,同时提到了前端页面的实现,如首页信息接收、添加、删除和修改功能,以及分页效果。
摘要由CSDN通过智能技术生成

首先看下目录结构,我把需要注意的用红色码标注了,没必要看的就用黄色的挡住了。这次主要操作的是work这个数据表
每一个文件都要注意下有没有注解。就是以@开头的东西。
这里需要注意的是,所有的目录,都是在启动项目录的下层的。这个是必须在它下层的(同级可能也可以,没试过)。
在这里插入图片描述
连接数据库前的配置
首先实在跟application.properties文件相同的位置新键一个application.yml文件(直接新键文件,然后改后缀就行,这个没必要讲,常识)。
8080是端口号,我是默认的,没有修改,改了的话就用自己的。
下面url地方有需要改的。
url里面有个yhy?,yhy是我的数据库名,这个改成自己的,问号要保留。
其他地方都不需要改,包括dirver-class-name。


```java
server:
  port: 8080 
  servlet:
    context-path:      
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/yhy?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    


实体类代码
这里的代码没什么好说的,就是根据数据表里面的字段名,封装起来,然后写getter、setter方法。我把需要导的包页写上了,不合适的可以对照一下,写这个报错的话,一定别把包导错了。
必须要说的一点是,必须要写注解!!!实体里面我写了三个注解

package com.example.stu;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
//work是我的表名,到时候替换成自己的就可以了
@Entity(name = "work")
@Table(name = "work")//这个貌似可以不写,到时候试试,不行就删了,
public class Work {
   
	@Id @GeneratedValue(strategy = GenerationType.IDENTITY)//规定默认的id
	private String id;//id
	private String name;//姓名
	private String cla;//班级
	//这里我还省略了很多的字段名,下面代码碰到字段名我会指出
	//写getter/setter方法

关键部分①DAO部分代码
因为大部分的方法都来自继承的对象,所以基本用不到sql语句了,用sql语句纯粹是无奈之举,实在不会了才用sql语句。而且在这里使用sql语句,就失去了springBoot的意义了。(个人理解,大佬指点批评,虚心接受)

package com.example.dao;

import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;

import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;

import com.example.stu.Work;

public interface WorkDAO extends PagingAndSortingRepository<Work, String>,JpaSpecificationExecutor<Work>{
   

	//查询所有数据的方法
	@Query("from work w order by w.id asc")
	List<Work> findAll();//findAll方法有内置的,这里写sql语句是刚开始学的时候用的。而且这里用的sql语句已经不是原生的sql语句了,原生的sql语句写法见表连接方法
	//模糊查询  findBy**Like*(参数)是内置的方法,**代表字段名,详细的介绍我有一篇单独的博客,可以参考一下
	List<Work> findByidLike(String id);
	//通过tell字段名进行精确查询,效果跟下面的sql相同
	//原生sql:select * from work where tell = ?
	List<Work> findBytell(String tell);
	//修改,因为要数据回显,所以要有一个单独的方法查询,返回值是Work,根据id查询
	Work findByid(String id);
	//表连接,实属无奈,不会,只能用sql语句了,还是用原生的。在最后加上那个,就是代表的原生sql cla是我的另一个表
	@Query(value="select * from work w join cla c on w.cla = c.cid",nativeQuery = true)
	List<Map> findAllData();//表连接返回值是list<map>!!!
	//分页,这里的findAll参数跟上面的findAll参数不同,所以问题不大。返回值是page的findAll方法也是有内置的,但是没用过,当时时间不充足,没时间试,就写了sql语句
	//@Query("from work w order by w.id asc")
	Page<Work> findAll(Pageable page);
	//分页表连接
	@Query(value="select * from work w join cla c on w.cla = c.cid",nativeQuery = true)
	Page<List<Map>> findAllMap(Pageable page);
}

继承DAO service部分代码
这里有两个注解,记得写上。
其他没什么要注意的了

package com.example.service;

import java.util.List;

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import com.example.dao.WorkDAO;
import com.example.stu.Work;

@Service
public class WorkService {
   
	@Autowired
	//查询全部
	private WorkDAO workDAO;
	public List<Work> findAll(){
   
		return workDAO.findAll();
	}
	public List<Map> findAllData(){
   
		return workDAO.findAllData();
	}
	//根据id查询
	public Work findId(String id){
   
		return workDAO.findByid(id);
	}
	//模糊查询
	public List<Work> findByIdLike(String id){
   
		return workDAO.findByidLike(id);
	}
	//添加
	public void save(Work work) {
   
		workDAO.save(work);
	}
	//验证手机号唯一
	public List<Work> findBytell(String tell){
   
		return workDAO.findBytell(tell);
	}
	//删除
	public void del(Work work) {
   
		workDAO.delete(work);
	}
	//分页
	public Page<Work> findpage(Pageable page){
   
		return workDAO.findAll(page);
	}
	//分页表连接
	public Page<List<Map>> findAllMap(Pageable page){
   
		return workDAO.findAllMap(page);
	}
}

重点 controller代码
这里我把导入的包先单独放一块了,分页要导入的包自己注意下,别导错了

package com.example.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;//分页
import org.springframework.data.domain.PageRequest;//分页
import org.springframework.data.domain.Pageable;//分页
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.service.ClaService;
import com.example.service.WorkService;
import com.example.stu.Cla;
import com.example.stu.Work;

主体代码

@Controller
@RequestMapping("work")//应该可以解释为给以下内容起个名字
public class WorkController {
   
	@Autowired
	private WorkService workService;
	@Autowired
	private ClaService claService;
	/**
	 * @param 首页模块
	 * @return 首页
	 */
	@RequestMapping(value = "index")//给当前的方法起名字,调用的时候是work/index
	//这里是向html首页映射值的部分,还是映射了两个值,映射一个的话就省略一块就行
	public String index(Model model) {
   //model就是向模板映射的方法
		//传work
		List<Work> data = workService.findAll();
		model.addAttribute("data", data);//向模板映射值
		//传cla,这里是传的另一个表的数据,需要在同目录下新建entiy、dao、service什么的,我就不列出来了,下面的方法我没有写出来
		List<Cla> list = claService.findAll();
		model.addAttribute("list", list);
		return "/workIndex";//返回值是返回到首页,workindex是首页文件名,没有后缀是我提前在其他地方改好了,你没有改的话就写workindex.html。在stringBoot中,貌似不能直接打开html/jsp文件,只能通过controller中的方法来调用html/jsp文件。所以说在这要打开html文件的话用localhost:8080/work/index就可以了。index是注解中的index
	}
	/**
	 * @param 表连接向模板映射值
	 */
	 //这个跟上一个功能相同,都是向首页映射值,不过下面的是用表连接写,只能用其中一个,首页中我是接收的这个映射的值。(boss规定要用表连接,而且表连接方便后期修改)
	@RequestMapping(value = "indexAll")
	public String indexAll(Model model) {
   
		List<Map> list = workService.findAllData();
		model.addAttribute("data", list);
		return "/workIndex";
	}
	/**
	 * @prarm 添加模块
	 * @return 重定向返回首页模块
	 */
	//添加主体
	@RequestMapping("add")
	public String add(Mode
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值