Spring bootMybatis项目搭建学习
- 前言
- 一、建立Spring boot工程
- 二、建立我们要使用的数据表
- 三、建立静态页面
- 四、建立实体包添加实体Hero
- 五、建立controller包添加控制器HeroController
- 六、建立mapper包添加映射器HeroMapper
- 六、在HeroController中调用HeroMapper接口插入数据
- 问题总结
- MyBatis实现增删改查问题总结
前言
目前学习到了spring项目的搭建与mybatis框架的运用,自己上手尝试建立一个项目。
一、建立Spring boot工程
在项目目录下建立module,修改红框内的内容
java版本修改为8
在此处选择需要的服务
对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
添加角色的属性:
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 "添加成功!";
}
}
代码顺序:
- 在类的上面添加@Controller
- 在类里添加@RequestMapper(“/add”)和@ResponseBody
- 写出add方法,并要求传入参数Hero hero
- 方法体内打印输出form表单中的数据
- 最后返回“添加成功”字样
六、建立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 "添加成功!";
}
}
代码顺序:
- 声明一个HeroMapper接口mapper
- 在接口声明的上面写注解@Autowired
- 在add方法体中使用mapper调用insert方法实现数据的插入
问题总结
前面代码的编写并没有出现问题
但测试的时候发现虽然程序无报错且控制台输出正常
但数据并没有写入数据库。
检查后发现是HeroMapper接口中insert语句写错了
将要插入的数据表名由genshi写成了hero
导致数据写入了hero表而不是genshi表
更正数据表名后再次测试发现数据仍然没有被正确写入genshi表
再次对项目进行检查发现更改的HeroMapper不是所运行的接口
对正确的HeroMapper接口进行更正后再次检测
检测成功
MyBatis实现增删改查问题总结
问题多集中在查询上
- 查询功能无需单独写select.html
- 查询功能的return返回值用集合List接收
- 在HeroController中返回查询结果时需要将集合使用toString转为字符串
- 删除功能实现是借用name字段进行的,传参时传的不是hero而是name