springboot + mybatis 的项目,实现简单的CRUD
以前都是用Springboot+jdbcTemplate实现CRUD
但是趋势是用mybatis,今天稍微修改,创建springboot + mybatis 的项目,实现简单的CRUD
上图是项目的目录结构,创建一个user实体,包含id,姓名,手机,密码,flag等信息,然后对用户进行增删查改。
drop table if exists user; CREATE TABLE `user` (
id tinyint(4) NOT NULL AUTO_INCREMENT,
name varchar(200) NOT NULL,
age int(11) NOT NULL,、
phone varchar(20) NOT NULL,
password varchar(20) NOT NULL,
flag int(4),
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
用Intellij IDEA进行开发,创建一个新的springboot项目,选中SQL中的mybaits,生成之后默认带有DemoApplication主函数启动类,最后启动的时候要在主函数上添加mapper扫描@MapperScan("com.example.demo.mapper") //扫描全部mapper
其他的代码依次如下: User
public class User implements Serializable {
private Long id;
private String name;
private int age;
private String phone;
private String password;
private boolean flag; 省略了getter and setter
}
userService
package com.example.demo.service; import com.example.demo.pojo.User; import java.util.List; public interface userService { List<User> findAll(); List<User> selectAll(); List<User> selectById(int id); int create(User user); int updateUserById(User user); int deleteUserById(int id);
}
userServiceImp
package com.example.demo.serviceImp; import com.example.demo.mapper.userMapper;
import com.example.demo.pojo.User;
import com.example.demo.service.userService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class userServiceImp implements userService { @Autowired
private userMapper userMapper; public List<User> findAll() {
System.err.println("查询所有用户接口");
List<User> list = userMapper.findAll();
return list; } @Override
public List<User> selectAll() {
List<User> list = userMapper.selectAll();
return list;
} @Override
public List<User> selectById(int id) {
List<User> list = userMapper.selectById(id);
return list;
} @Override
public int create(User user) {
int count = userMapper.create(user);
return count;
} @Override
public int updateUserById(User user) {
int count = userMapper.updateUserById(user);
return count;
} @Override
public int deleteUserById(int id) {
int count = userMapper.deleteUserById(id);
return count;
} }
userMapper
package com.example.demo.mapper; import com.example.demo.pojo.User; import java.util.List; public interface userMapper { List<User> findAll(); List<User> selectAll(); List<User> selectById(int id); int create(User user); int updateUserById(User user); int deleteUserById(int id);
}
userController
package com.example.demo.controller; import com.example.demo.pojo.User;
import com.example.demo.serviceImp.userServiceImp;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView; import java.util.List; @Api(tags = {"demo接口"})
@Controller
@RequestMapping("user")
public class userController { @Autowired
private userServiceImp userService; @ApiOperation(value = "显示全部用户的信息倒序")
@RequestMapping("userLists")
@ResponseBody
public List<User> showUsers() {
List<User> list = userService.findAll();
return list;
} @ApiOperation(value = "显示全部用户的信息")
@RequestMapping("selectAll")
@ResponseBody
public List<User> selectAll() {
List<User> list = userService.selectAll();
return list;
} @ApiOperation(value = "根据ID查询用户的信息")
@RequestMapping("selectById")
@ResponseBody
public List<User> selectById(int id) {
List<User> list = userService.selectById(300);
return list;
} @ApiOperation(value = "创建新用户信息")
@PostMapping("create")
@ResponseBody
public String create(User user) {
int count = userService.create(user);
System.out.println(count);
if (count>0)
return ("成功添加"+count+"条记录");
else
return "添加用户失败";
} @ApiOperation(value = "根据ID更新用户信息")
@PostMapping("updateUserById")
@ResponseBody
public String updateUserById(User user) {
int count = userService.updateUserById(user);
System.out.println(count);
if (count>0)
return ("成功更新"+count+"条记录");
else
return "更新用户失败";
} @ApiOperation(value = "根据ID删除用户信息")
@PostMapping("deleteUserById")
@ResponseBody
public String deleteUserById(int id) {
int count = userService.deleteUserById(id);
System.out.println(count);
if (count>0)
return ("成功删除"+count+"条记录");
else
return "删除用户失败";
} }
userMapper.xml 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.userMapper"> <resultMap id="userResultMap" type="com.example.demo.pojo.User">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="VARCHAR"/>
<result column="phone" property="phone" jdbcType="VARCHAR"/>
<result column="password" property="password" jdbcType="VARCHAR"/>
<result column="flag" property="flag" jdbcType="BIGINT"/>
</resultMap> <select id="findAll" resultMap="userResultMap">
SELECT id,name,age,phone,password,flag FROM user order by id desc
</select> <select id="selectById" parameterType ="int" resultMap="userResultMap">
select * from user where id = #{id}
</select> <select id="selectAll" resultMap="userResultMap">
select * from user order by id desc
</select> <insert id="create" parameterType="com.example.demo.pojo.User">
insert into user(name,age,phone,password,flag) values (#{name},#{age},#{phone},#{password},#{flag})
</insert> <update id="updateUserById" parameterType="com.example.demo.pojo.User">
update user set name = #{name},age =#{age},phone =#{phone},password = #{password},flag = #{flag} where id = #{id}
</update> <delete id="deleteUserById" parameterType ="int">
delete from user where id = #{id}
</delete> </mapper>
1. Mapper method 'com.example.demo.mapper.userMapper.create attempted to return null from a method with a primitive return type (int).] with root cause
是新增用户信息接口,发现用户信息已经成功插入数据库,但是页面提示
出错原因很简单,mapper.xml 映射文件中,新增记录应该用insert,我懒,直接复制了上面的select, 然后搓了很久。。
2. 找不到Bean
出错原因很简单,启动类主函数没有添加mapper扫描,需要添加@MapperScan("com.example.demo.mapper")
这个项目的github地址是https://github.com/JasmineQian/SpringDemo_2019/tree/master/springboot2mybatis
以前我管理github很乱,自己看到的代码,自己撸的代码,都随便网上塞,然后之后都不怎么回顾。然后就学过什么都忘记了。隐约记得遇到过,具体解决方法不知道。
就像《少林英雄》歌中常的那样,
练功必须顶大太阳 (哼)
晚上还要借月亮光(哈)
一日不练十日空(哼哈)
一日不撸十日空~~~撸代码,要像练功一样每日坚持!
最新文章
- iOS中编写单例类的心得
- 关于禁止ipad的home键解决方法
- Cach&#233;数据库学习笔记(2)
- 不能上传文件 unknown error happened
- 解析php开发中的中文编码问题
- php 导出excel表格
- Oracle—用户管理的备份(一)
- 浅谈canvas绘画王者荣耀--雷达图
- sliding window:";Marginalization";,";Schur complement";,";First estimate jacobin";
- Arch Linux下Visual Stdio Code在格式化C代码时报错
- boost asio 学习(五) 错误处理
- GO语言的进阶之路-协程和Channel
- 序列操作bzoj2962(未完成)
- POI导出Excel--合并单元格
- RadioButtonList根据值触发OnSelectedIndexChanged事件
- C和C++的内存操作小贴士(一):const char*的内存释放问题
- unity解析json的两种方式
- YII2中的Html助手和Request组件
- ueditor与mvc4中坑 -编辑时显示源码问题
- asp.net WebAPI 问题 iisnode默认不支持PUT和DELETE的解决