Springboot+Mybatis+MySQL实例练习时踩坑记录

最近刚开始学习后端,直接让上手学习Springboot+Mybatis+MySQL对CRUD的实例,虽然实例不难,但是上面的三个知识我都不懂,就有点为难我了

所以经常遇到一个点卡自己很久的情况,这里列举一些自己遇到的坑或者有用的建议,望后来者谨记

1.关于application.properties:配置文件,Spring项目启动自动加载,用application.yml来写更加简便

例如:application.properties中需要这样写

spring.datasource.url=jdbc:mysql://localhost:3306/springdb
spring.datasource.username=root 
spring.datasource.password=root 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

而application.yml只需要

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springdb
    username: root
    password: root

2.项目结构采用分层思想化

DAO层:
DAO层叫数据访问层,全称为data access object,属于一种比较底层,比较基础的操作,具体到对于某个表的增删改查,也就是说某个DAO一定是和数据库的某一张表一一对应的,其中封装了增删改查基本操作,建议DAO只做原子操作,增删改查。

Service层:
Service层叫服务层,被称为服务,粗略的理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。

Controler层:
Controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面

3.常用注释

@Mapper注解是标识,能够自动加载被扫描。

@RestController注解,所有返回都为json

  相当于@ResponseBody + @Controller合在一起的作用

@RequestMapping 配置url映射

  @RequestMapping中的method参数有很多中选择,一般使用get/post.

@Autowired 自动装配

  理解上参照https://zhidao.baidu.com/question/1887592919685460068.html?qbl=relate_question_3&word=autowired%D7%A2%BD%E2%D4%AD%C0%ED

4.对于刚接触的来说,各种配置是真的多啊,你需要自己去找配置方法,这里由于之前没有对配置安装的记录,暂时留着,以后有时间再整理把

5.用Lombok的**@Data**注解功能,可以省去getter和setter的代码,可以减少不少的代码量,加快开发速度。lombok需要另外引入依赖。(我也是后面才发现小伙伴是这样用的,所以下面的代码没有使用)

6.上手做才能发现很多问题,下面是我学习时的代码

pom.xml(主要依赖)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- MYSQL包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

applicattion.yml数据库配置

spring:
  application:
    name: mysql-service
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useSSL=true&serverTimezone=Asia/Shanghai
    username: root
    password: root

UeserController类(controller层)

package com.wcx.springboot_mybatis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;


import java.util.List;



@RestController
@RequestMapping("/User")
public class UeserController {

    @Autowired
    public UserMapper userMapper;

    //通过id查询
    @RequestMapping(value = "/selectUserById",method = RequestMethod.GET)
    public User selectUserById(String id){
        User user = userMapper.selectUserById(Integer.parseInt(id));
        return user;
    }
    //通过姓名查询
    @RequestMapping(value = "/selectUserByName",method = RequestMethod.GET)
    public List<User> selectUserByName(String userName){
        return userMapper.selectUserByName(userName);
    }

    //添加信息
    @RequestMapping(value = "/addUser",method = RequestMethod.POST)
    public String addUser(User user){
        userMapper.addUser(user);
        return "成功添加信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
    }

    //修改信息
    @RequestMapping(value = "/updateUser",method = RequestMethod.POST)
    public String updateUser(User user){
        userMapper.addUser(user);
        return "成功修改信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
    }

    @RequestMapping(value={"/deleteUser"}, method=RequestMethod.POST)
    public String deleteUser(String id){
        User user = userMapper.selectUserById(Integer.parseInt(id));
        userMapper.deleteUser(Integer.parseInt(id));
        return "成功删除信息>>>姓名:"+user.getUserName()+">>>>年龄:"+user.getUserAge()+">>>>地址:"+user.getUserAddress();
    }
}

User类(entity层)

package com.wcx.springboot_mybatis;

public class User {
    private int id;
    private String userName;
    private int userAge;
    private String userAddress;

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

UserMapper接口类(dao层)

package com.wcx.springboot_mybatis;

import com.wcx.springboot_mybatis.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {
    //插入数据
    @Insert("insert into user(userName,userAge,userAddress) value (#{userName},#{userAge},#{userAddress})")
    public void addUser(User user);

    //修改数据
    @Update("update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id = #{id}")
    public void updateUser(User user);

    //查询数据
    //通过id查询
    @Select("select * from user where id = #{id}")
    public User selectUserById(int id);
    //通过姓名查询
    @Select("select * from user where userName = #{userName}")
    public List<User>   selectUserByName(String userName);

    //删除数据
    @Delete("delete from user where id = #{id}")
    public void deleteUser(int id);
}

数据库配置:

你需要自己在MySQL中的Springdb模式下创建user表,包括4个属性:
id:int ,设置为[主键][6]且[自增][6]
userName:varchar
userAge:int
userAddress:varchar

原文地址:https://www.cnblogs.com/wcxcc/p/10463368.html