当前位置:   article > 正文

idea,spring boot+MySQL+MyBatis项目创建并在网页中显示数据库表中内容_idea将数据库显示到网页

idea将数据库显示到网页

前言:这里是我对于前后端spring boot + vue3的学习过程收纳整理以及知识分享。

目录

一、springboot框架搭建

1.新建spring boot项目

2.添加必要依赖项

二、配置数据库路径

1.数据库建表填数据

2.IDEA配置数据库

三、测试数据库是否连接成功:

四、将数据库中的内容输出到页面

1.目录结构更改

2.添加代码

3.测试输出

五、目录结构及调用过程解释

1.方法调用过程

2.路径问题

3.总结


一、springboot框架搭建

1.新建spring boot项目

打开IDEA,新建一个项目:

选择spring initalizr,设置项目存储位置,JDK选17,项目名称可以自行更改,类型选择Maven:

2.添加必要依赖项

版本按照默认,添加依赖项web->spring web:

在sql中添加依赖项MySQL Driver和MyBatis Framework:

点击create进行创建,创建后点开项目,等待各种依赖项、文件自动下载完毕

目录结构为:

二、配置数据库路径

1.数据库建表填数据

打开MySQL或者Navicat,创建新的数据库及表,并向表内增添用于测试的数据。

示例:

创建数据库schema为db,并创建user表:

其中user表包含属性:用户ID(id),用户名(username),年龄(age),职业(job),爱好(hobby)

  1. -- 建数据库
  2. create schema db;
  3. use db;
  4. -- 建表
  5. create table user(
  6. id int primary key,
  7. username varchar(20),
  8. age int,
  9. job varchar(100),
  10. hobby varchar(100));
  11. -- 插入数据
  12. insert into user
  13. values(1,'张三',30,'前端开发工程师','睡觉');
  14. insert into user
  15. values(2,'李四',25,'产品助理','打篮球');
  16. insert into user
  17. values(3,'王五',40,'后端开发工程师','旅行');
  18. -- 查看数据
  19. select * from user;

插入数据成功后:

2.IDEA配置数据库

在application.properties文件中,配置数据库,其中url中的db为数据库名称:

  1. server.port=8080
  2. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  3. spring.datasource.url=jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
  4. spring.datasource.username=root
  5. spring.datasource.password=123456

对于端口号,一般写成8080,如果端口号已经被其他进程占用,可以改成8081等等,数据库名称,其他配置,用户名和密码,以及要连接的数据库名称,需要根据自己的情况更改:

此时,点击绿色小三角运行,在浏览器输入http://localhost:8080(设置的端口号),出现如下页面:

三、测试数据库是否连接成功:

在test中:

更改Java类的内容

DemoApplicationTests:

  1. @SpringBootTest
  2. class DemoApplicationTests {
  3. @Autowired
  4. DataSource dataSource;
  5. @Test
  6. void contextLoads() throws Exception{
  7. System.out.println("获取的数据库链接为:"+dataSource.getConnection());
  8. }
  9. }

 右击运行DemoApplicationTests.java:

出现红框内容即连接成功:

四、将数据库中的内容输出到页面

要实现在网页中展示表中数据

1.目录结构更改

在java中创建如下五个包:

其中,controller用于编写方法类,entity用于储存实体类,service中存放接口,mapper中用于衔接数据库,result用于统一规范输出结果形式

在每个package包中分别创建如下Java类:

(mapper下的UserMapper前方黑色小鸟图标是因为我在file->settings->plugins中添加了MyBatisX插件,便于将xxMapper.xml文件下的sql语句与xxMapper.java中的方法对应起来,可以不添加)如果要添加的话是下面这里:

在resources中创建如下结构,.xml文件中用于书写mysql语句:

最终目录结构:

2.添加代码

每个文件代码:

User.java:

  1. package com.example.demo.entity;
  2. public class User {
  3. private int id;
  4. private String username;
  5. private int age;
  6. private String job;
  7. private String hobby;
  8. public void setId(int id) {
  9. this.id = id;
  10. }
  11. public int getId() {
  12. return id;
  13. }
  14. public void setUsername(String username) {
  15. this.username = username;
  16. }
  17. public String getUsername() {
  18. return username;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. public int getAge() {
  24. return age;
  25. }
  26. public void setJob(String job) {
  27. this.job = job;
  28. }
  29. public String getJob() {
  30. return job;
  31. }
  32. public void setHobby(String hobby) {
  33. this.hobby = hobby;
  34. }
  35. public String getHobby() {
  36. return hobby;
  37. }
  38. }

UserController.java:

  1. package com.example.demo.controller;
  2. import com.example.demo.result.Result;
  3. import com.example.demo.service.UserService;
  4. import jakarta.annotation.Resource;
  5. import org.springframework.web.bind.annotation.*;
  6. import java.util.List;
  7. @RestController
  8. @RequestMapping("/user")
  9. public class UserController {
  10. @Resource
  11. UserService userService;
  12. @CrossOrigin
  13. @GetMapping(value = "/findAll")
  14. @ResponseBody
  15. public Result findAllUser(){
  16. try {
  17. return Result.success(userService.findAllUser());
  18. }catch (Exception e){
  19. return Result.failure(500,"服务器异常");
  20. }
  21. }
  22. }

UserMapper.java:

  1. package com.example.demo.mapper;
  2. import com.example.demo.entity.User;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.springframework.stereotype.Repository;
  5. import java.util.List;
  6. @Mapper
  7. public interface UserMapper {
  8. public List<User> findAllUser();//查找所有用户
  9. }

UserService.java:

  1. package com.example.demo.service;
  2. import com.example.demo.entity.User;
  3. import org.springframework.stereotype.Service;
  4. import java.util.List;
  5. public interface UserService {
  6. public List<User> findAllUser();
  7. }

UserServiceImpl.java:

  1. package com.example.demo.service;
  2. import com.example.demo.entity.User;
  3. import com.example.demo.mapper.UserMapper;
  4. import jakarta.annotation.Resource;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class UserServiceImpl implements UserService {
  9. @Resource
  10. private UserMapper userMapper;
  11. @Override
  12. public List<User> findAllUser(){
  13. return userMapper.findAllUser();
  14. }
  15. }

Result.java:

  1. package com.example.demo.result;
  2. public class Result {
  3. private int code; //接口状态码
  4. private String msg; //接口返回消息2、User.java
  5. private Object data; //响应内容
  6. public Result(){
  7. super();
  8. }
  9. public Result(int code,String msg,Object data){
  10. this.code=code;
  11. this.msg=msg;
  12. this.data=data;
  13. }
  14. public static Result success(Object data){
  15. Result item=new Result(200,"success",data);
  16. return item;
  17. }
  18. public static Result failure(int errCode,String errorMessage){
  19. Result item=new Result(errCode,errorMessage,null);
  20. return item;
  21. }
  22. public int getCode(){
  23. return code;
  24. }
  25. public void setCode(int code){
  26. this.code=code;
  27. }
  28. public String getMsg() {
  29. return msg;
  30. }
  31. public void setMsg(String msg) {
  32. this.msg = msg;
  33. }
  34. public Object getData() {
  35. return data;
  36. }
  37. public void setData(Object data) {
  38. this.data = data;
  39. }
  40. }

UserMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  4. <mapper namespace="com.example.demo.mapper.UserMapper" >
  5. <resultMap id="result" type="com.example.demo.entity.User">
  6. <result property="id" column="id" />
  7. <result property="username" column="username" />
  8. <result property="age" column="age" />
  9. <result property="job" column="job" />
  10. <result property="hobby" column="hobby"/>
  11. </resultMap>
  12. <!-- 查找所有用户-->
  13. <select id="findAllUser" resultMap="result">
  14. select * from user
  15. </select>
  16. </mapper>

还需要在application.properties中设置文件路径:

  1. #mybatis配置
  2. mybatis.typeAliasesPackage=org.spring.springboot.domain
  3. mybatis.mapper-locations=classpath:mapper/*.xml
  4. mybatis.type-aliases-package= com.example.demo.entity

3.测试输出

先在右上角的configuration中选择Demo1Application(前面有绿色图标的),然后点击绿色小三角运行程序:

控制台:

此时在浏览器中输入http://localhost:8080/user/findALL

五、目录结构及调用过程解释

以下内容按我的理解来解释整个过程,比较口语化,也可能不太专业,如有不当敬请指出

1.方法调用过程

刚才已经粗略解释过一部分:controller用于编写方法类,entity用于储存实体类,service中存放接口,mapper中用于衔接数据库,result用于统一规范输出结果形式

要知道它的执行过程需要一步一步来,一层一层看,先看的是controller里面的注解

1)controller中,对整个UserController类使用了RequestMapping注解,findAllUser()函数之上对应的注解GetMapping:/findALL,所以,findAllUser注解可以视为/user/findAll

浏览器输入链接http://localhost:8080/user/findALL时,启用8080端口,/user/findALL的请求会由findAllUser()来处理

该函数内部有一条语句:userService.findAllUser(),调用了service包下UserService.java里面的findAllUser()函数

2)再来看service文件,这里定义了UserService接口,接口中没有定义具体的实现方法体:

里面正是findAllUser()函数被调用,这个函数返回值为list形式的user对象集合,无需输入

3)接下来就是到了UserServiceImpl了,UserServiceImpl为UserService的接口实现类,定义了findAllUser()的具体方法体:

到这里算是java方法和mysql语句衔接的一个重要转折点啦,在UserServiceImpl中,调用了UserMapper.java中的findAllUser()方法

4)具体UserMapper.java:

也拥有findAllUser(),这里的函数名字不是随便起的,一切的根源都在resources->mapper->UserMapper.xml中:

4)这里mysql语句中,设置的id为:findAllUser

UserMapper.java中的对应方法名和UserMapper.xml中mysql语句id的命名要完全一致(包括大小写)

比如:

.xml文件替换为(id更换为getListUser):

<select id="getListUser" resultMap="result">
    select * from  user
</select>

那么UserMapper.java中对应方法就换为(方法名更换为getListUser):

public List<User> getListUser();//查找所有用户

而其他包中java类为了协调一致不搞混,也同样用getListUser命名对应函数

2.路径问题

那么UserMapper.java中的函数又是怎么找到UserMapper.xml文件中对应的id呢?这就是路径配置问题了

在resources->mapper->UserMapper.xml中,

namespace="com.example.demo.mapper.UserMapper" 

这一句指明了.xml文件对应的.java文件路径,是在src->main->java->com.example.demo.mapper->UserMapper.java

再加上application.properties中针对mybatis路径配置:

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

指明访问.xml文件的路径为resources->mapper->*.xml

如果没有这些设置的话,是找不到数据库表信息的。

3.总结

简单来说整体流程大致为:

方法请求->controller注解->service接口->service实现接口(具体方法实现)->mapper包中的**Mapper.java->根据路径配置找到resources中的**Mapper.xml->实现具体sql语句,获得返回值->将返回值再倒着传递出去

可以视为:

controller、service包中的内容都是与java后端方法调用有关的,

而mapper包中,不管是src->main->java->mapper下的.java文件,还是resources->***下的.xml文件,都是与数据库调用有关的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/537192
推荐阅读
相关标签
  

闽ICP备14008679号