Spring bootMybatis项目搭建学习

  • 前言
  • 一、建立Spring boot工程
  • 二、建立我们要使用的数据表
  • 三、建立静态页面
  • 四、建立实体包添加实体Hero
  • 五、建立controller包添加控制器HeroController
  • 六、建立mapper包添加映射器HeroMapper
  • 六、在HeroController中调用HeroMapper接口插入数据
  • 问题总结
  • MyBatis实现增删改查问题总结

前言

目前学习到了spring项目的搭建与mybatis框架的运用,自己上手尝试建立一个项目。

一、建立Spring boot工程

在项目目录下建立module,修改红框内的内容

java版本修改为8

springboot mybatisplus代码一键生成 springboot+mybatis项目_spring boot

在此处选择需要的服务

springboot mybatisplus代码一键生成 springboot+mybatis项目_html_02

对application.properties文件进行配置

spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/empdb?characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false

配置这个文件之后我们就不需要自己去写jdbc代码连接数据库了

二、建立我们要使用的数据表

代码如下:

create table genshi (id int primary key auto_increment,
    -> name varchar(50),
    -> money int)charset=utf8;

三、建立静态页面

index:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<a href="add.html">添加角色。</a>
</body>
</html>

add:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>添加角色</h1>
<form action="/add">
  <input type="text" name="name" placeholder="角色名">
  <input type="text" name="money" placeholder="消费">
  <input type="submit" value="添加">
</form>
</body>
</html>

四、建立实体包添加实体Hero

springboot mybatisplus代码一键生成 springboot+mybatis项目_java_03

添加角色的属性:

private Integer id;
    private String name;
    private Integer money;

添加属性后使用getter and setter与toString添加相对应的方法

五、建立controller包添加控制器HeroController

package cn.tedu.boot222.controller;

import cn.tedu.boot222.entity.Hero;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HeroController {
    @RequestMapping("/add")
    @ResponseBody
    public String add(Hero hero) {
        System.out.println("hero = " + hero);
        return "添加成功!";
    }
}

代码顺序:

  1. 在类的上面添加@Controller
  2. 在类里添加@RequestMapper(“/add”)和@ResponseBody
  3. 写出add方法,并要求传入参数Hero hero
  4. 方法体内打印输出form表单中的数据
  5. 最后返回“添加成功”字样

六、建立mapper包添加映射器HeroMapper

package cn.tedu.boot222.mapper;

import cn.tedu.boot222.entity.Hero;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface HeroMapper {
    //#{xxx}会从下面方法的参数列表中找到同名的变量,如果找不到同名变量则进入到对象里面查找
    //同名的get方法 Mybatis框架会根据此方法生成具体的实现类实现此方法
    @Insert("insert into genshi values(null,#{name},#{money})")
    void insert(Hero hero);
}

接口写好之后就可以去控制器里面去调用了

六、在HeroController中调用HeroMapper接口插入数据

package cn.tedu.boot222.controller;

import cn.tedu.boot222.entity.Hero;
import cn.tedu.boot222.mapper.HeroMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HeroController {
    //此注解的作用:Spring框架结合Mybatis框架会自动将HeroMapper生成一个实现类和实现里面的方法
    //而且会自动实例化该对象 required = false告诉idea编译器此对象是非必须的
    @Autowired(required = false)
    HeroMapper mapper;
    @RequestMapping("/add")
    @ResponseBody
    public String add(Hero hero) {
        System.out.println("hero = " + hero);
        mapper.insert(hero);
        return "添加成功!";
    }
}

代码顺序:

  1. 声明一个HeroMapper接口mapper
  2. 在接口声明的上面写注解@Autowired
  3. 在add方法体中使用mapper调用insert方法实现数据的插入

问题总结

前面代码的编写并没有出现问题
但测试的时候发现虽然程序无报错且控制台输出正常
但数据并没有写入数据库。
检查后发现是HeroMapper接口中insert语句写错了
将要插入的数据表名由genshi写成了hero
导致数据写入了hero表而不是genshi表
更正数据表名后再次测试发现数据仍然没有被正确写入genshi表
再次对项目进行检查发现更改的HeroMapper不是所运行的接口
对正确的HeroMapper接口进行更正后再次检测
检测成功

MyBatis实现增删改查问题总结

问题多集中在查询上

  • 查询功能无需单独写select.html
  • 查询功能的return返回值用集合List接收
  • 在HeroController中返回查询结果时需要将集合使用toString转为字符串
  • 删除功能实现是借用name字段进行的,传参时传的不是hero而是name