初学者idea2020+SpringBoot + MySQL的完整小项目(超详细)
这个项目是之间参考https://www.jianshu.com/p/ca185e2b19fe这个项目写的,并且做了对应的修改和详细讲解过程。我用的是idea2020 和mysql(Navicat),所以会相对来说有一点点差别。接下来开始正式开始:1.创建项目:在idea2020版本上,可以直接选择Spring Initializr然后写好自己的项目名称和位置并在之后的Dependencies上选
这个项目是之间参考https://www.jianshu.com/p/ca185e2b19fe这个项目写的,并且做了对应的修改和详细讲解过程。
我用的是idea2020 和mysql(Navicat),所以会相对来说有一点点差别。
接下来开始正式开始:
1.创建项目:
在idea2020版本上,可以直接选择Spring Initializr
然后写好自己的项目名称和位置
并在之后的Dependencies上选好web->Spirng Web和SQL-Mybatis Framework ,MySQL Driver(可能不一定是必须的,但是个人感觉选了比较好)
这样就可以生成好了。
接着是设置先决条件
我上面给的网站是一个很简单的项目,但是在代码不改变的前提之下,稍微对项目的格式做了一丢丢的优化,让他看上去更顺眼一点(当然也可以不优化)
所以在src项目下面:创建以下文件
(com.example.springboot_nstart)是我自己创建的包名,大家都是可以不一样的,重点是下面四个文件夹。
这几个包在spring中的含义各有不同,pojo是代表一些具体的类,controller用来和前端进行联系,mapper是用来操作数据库,而service是优化作用的
Mapper层,controller层,service层,pojo层的区别联系
连接数据库
在自己确保已经安装和能启动数据库的前提之下:
尝试用idea连接一下数据库
在idea的右边(默认是右边吧)找到datebase
点击之后,按+ 到DataSource找到mysql进入
根据自己的mysql账号密码输入(这里端口默认是3306的,你的端口也可能是其他的)
如果出现一些错误,可能可以通过我这篇博客解决:https://blog.csdn.net/qq_41115379/article/details/109826287
这样出现绿钩就是连接好了。
这些先决条件都不是必要的,但是如果你能把这些条件都弄好的前提之下,会在之后的编写代码环节避免很多错误的发生。
2.数据库操作
首先在resources文件夹下的 application.properties中写入对应连接数据库的代码:
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/testMysql?setUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=admin
注意以下几点:
1.第一行的com.mysql.cj是因为我的mysql版本是8的,如果是之前的版本,我不确定这样会不会报错,如果会的话,去掉中间的cj,直接用
com.mysql.jdbc应该就行了
2.对应的 3306的端口和root的username和admin的password都是需要结合直接的mysql来写的
3.这里后面的testMysql是我会在后面提到的需要创建的数据库
确保写好之后,就可以运行 java文件夹下的那个application代码了,
在http://localhost:8080的网站中出现错误提示的页面Whitelabel Error Page,就对了(没错,是会出现error page的)
再是创建对应的数据库,和那个网站一样,我创建了一个testMysql的datebase,创建方法可以是:
1.在命令行的mysql命令下写入:
sql create database testMysql
并且可以通过 show databases来确定是否建成
2.在连接好了navicat之后,直接在可视化界面创建(右键->新建数据库)
可以断开连接重连之后看是否建成
3.代码测试连接前端操作
从这边开始测试前端是否能生成:
首先在controller的文件夹下面创建一个 UserController
在里面写入对应代码:
@RestController
public class UserController {
@RequestMapping("/getuserlist")
public String getUserList()
{
return "获取成功!";
}
}
稍微凭借我知道的一点点知识点解释一下:(不想看的可以直接跳过)
这里是用到了java的spring注解:
第一个注解是RestController,不像是平时的Controller是因为他返回的是一个字符串,而不是一个jsp或者html
的文件如果是需要返回当前界面东西的话,是需要加一个responsebody的限制,而RestController就相当于是controller和responsebody的结合:@Controller和@RestController的区别?
第二个注解是 RequestMapping,这是一个用来表示地址映射的注解,也就是输入到对应的前端界面上去。
写好之后,再运行一次java文件夹下的application,到http://localhost:8080/getuserlist界面,就会有**获取成功!**的消息弹出来。
4.代码的书写-添加查找功能:
首先在pojo包中创建一个User类
pojo(plain ordinaty java object)
写入对应代码,并写入对应的Set和get函数(一般就是右键 generate-GetterandSetter)package也需要改一下
package com.example.springboot_nstart.pojo;
public class User {
//有四个属性
public String username;
public String userpassword;
public int age;
public String sex;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpassword() {
return userpassword;
}
public void setUserpassword(String userpassword) {
this.userpassword = userpassword;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
然后是再mapper文件夹下创建UserMapper(注意是接口)
再里面写一个查询数据库的内容,并且返回User类型的数据
package com.example.springboot_nstart.mapper;
import com.example.springboot_nstart.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface UserMapper {
//然后做一些数据库的对应操作,这次是查询操作
@Select("select * from usertable order by user_id")
List<User> getUserList();
}
这里也稍微解释一下(不看的可以跳过)
1.componet注解,在我看来就是标记为他是一个可以被自动检测的候选,也就是检测出是否可以被自动注入,和之后提到的注解有联系
componet注解的含义
2.select注解也就是 一个sql语句,学过数据库应该都知道
这里testMysql里创建一个表(这次就不通过命令行创建了,直接在Navicat里创建),需要注意的是,我这边没有把user_id设置为自增长,所以产生了一些错误,所以按照原博客,就设置成自增长的,就行了。省的和我一样,还需要进行一些修改。
并在其中手动添加两组数据
(随便写的,不要在意这些细节)
再回到项目,在service下创建一个UserService 和创建一个文件夹,impl里创建UserServiceImpl
UserService:
package com.example.springboot_nstart.service;
import com.example.springboot_nstart.pojo.User;
import org.springframework.stereotype.Service;
import java.util.List;
//也是没有写对应的注解的,到时候可以改一下
@Service
public interface UserService {
//和mapper相呼应,有一个对应的方法
List<User> getUserList();
}
UserServiceImpl:
package com.example.springboot_nstart.service.impl;
import com.example.springboot_nstart.mapper.UserMapper;
import com.example.springboot_nstart.pojo.User;
import com.example.springboot_nstart.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import java.util.List;
//再网上看到 好像是 service和controller和compent 还有这个 都是没有本质区别的
@Repository
public class UserServiceImpl implements UserService {
//这里就是需要把这个实现方法具体的写出来了,然后这里就需要加入注解了
//这就是所谓的自动装配的功能吧
@Autowired
private UserMapper userMapper;
@Override
public List<User> getUserList() {
//就是因为这些调用来调用去的,让我觉得很绕,我姑且认为是,需要提高系统的可调度性
//所以要做各种分层的操作,减少耦合度,这里的话,相当于就是要用具体操作了,可是其实就是把mapper的方法调用一些
try{
List<User> users= userMapper.getUserList();
return users;
}catch (Exception e){
//好像是 如果不throw的话,会报错。。。
e.printStackTrace();
throw e;
}
}
}
稍微解释一下:
首先是对于service层的理解,我姑且认为是因为现在这个项目的属性较少,耦合度较低,所以service层的作用显得不那么重要,甚至是可有可无的,但是当pojo里的属性增多时,他的作用应该就起来了:
service层的作用
service层的意义
repository注解,其实就是和component的含义相同,只不过是在不同层级上设置的。
Autowired的注解,它可以对类成员变量,方法以及构造函数进行标注,让spring完成bean自动标注。autowired的作用
最后,再把UserController中进行修改,导入UserServiceIml
@Autowired
private UserServerimpl userServer;
@RequestMapping("/getuserlist")
public List<User> getUserList()
{
return userServer.getUserList();
}
最后在java下的application进行对应的MapperScan导入:
这个MapperScan里的包是需要按照你自己写的包进行对应的修改的。
最后运行这个application,并到http://localhost:8080/getuserlist界面,就会有以下效果:
第一个小项目over
之后第二篇博客还有增加了 数据库新增功能,大家可以继续观看:下一篇博客地址
更多推荐
所有评论(0)