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

是新增用户信息接口,发现用户信息已经成功插入数据库,但是页面提示

There was an unexpected error (type=Internal Server Error, status=500).

Mapper method ‘com.example.demo.mapper.userMapper.create attempted to return null from a method with a primitive return type (int).

出错原因很简单,mapper.xml 映射文件中,新增记录应该用insert,我懒,直接复制了上面的select, 然后搓了很久。。

2. 找不到Bean

出错原因很简单,启动类主函数没有添加mapper扫描,需要添加@MapperScan("com.example.demo.mapper")

 这个项目的github地址是https://github.com/JasmineQian/SpringDemo_2019/tree/master/springboot2mybatis

以前我管理github很乱,自己看到的代码,自己撸的代码,都随便网上塞,然后之后都不怎么回顾。然后就学过什么都忘记了。隐约记得遇到过,具体解决方法不知道。

就像《少林英雄》歌中常的那样,

练功必须顶大太阳 (哼)
晚上还要借月亮光(哈)
一日不练十日空(哼哈)

一日不撸十日空~~~撸代码,要像练功一样每日坚持!

原文地址:https://www.cnblogs.com/qianjinyan/p/10355250.html

时间: 2024-10-10 21:47:04

springboot + mybatis 的项目,实现简单的CRUD的相关文章

SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作

SpringBoot+Mybatis+MybatisPlus整合实现基本的CRUD操作 1> 数据准备 -- 创建测试表 CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_name` varchar(20) NOT NULL COMMENT '用户名', `password` varchar(20) NOT NULL COMMENT '密码', `name` varchar

springboot + mybatis + gradle项目构建过程

1.从Spring boot官网根据需求下载脚手架或者到GitHub上去搜索对应的脚手架项目,D_iao ^0^ ? 文件目录如下(此处generatorConfig.xml 和 log4j2.xml文件请忽略,后续会讲解) 2.使用Mybatis代码自动构建插件生成代码 ?  gradle 相关配置 // Mybatis 代码自动生成所引入的包 compile group: 'org.mybatis.generator', name: 'mybatis-generator-core', ver

SpringBoot+Mybatis+Freemark 最简单的例子

springboot-sample 实现最简单的 SpringBoot + Mybatis + Freemarker 网页增删改查功能,适合新接触 Java 和 SpringBoot 的同学参考 代码中连接的是云端的测试数据库,长期有效 推荐使用 IDEA 开发环境 开发环境部署 克隆或下载源代码 安装 JDK 1.8 安装 Gradle 在 IDEA 中导入项目 启动项目 浏览器打开 http://localhost:8011/product-list 源代码在 https://gitee.c

SpringBoot+Mybatis多模块(module)项目搭建教程

一.前言 最近公司项目准备开始重构,框架选定为SpringBoot+Mybatis,本篇主要记录了在IDEA中搭建SpringBoot多模块项目的过程. 1.开发工具及系统环境 IDE:IntelliJ IDEA 系统环境:mac OSX 2.项目目录结构 biz层:业务逻辑层 dao层:数据持久层 web层:请求处理层 二.搭建步骤 1.创建父工程 ① IDEA 工具栏选择菜单 File -> New -> Project... ② 选择Spring Initializr,Initializ

使用idea+springboot+Mybatis搭建web项目

使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project,然后选择Spring initializr,点击下一步  2.按图示进行勾选,点击下一步,给项目起个名字,点击确定. 3.项目生成有,点击add as maven project,idea 会自动下载jar包,时间比较长  4.项目生成后格式如下图所示:  其中DemoApplication.jav

springboot+mybatis项目自动生成

springboot_data_access_demo基于rapid,根据自定义模版生成的基于mybatis+mysql的数据库访问示例项目.简单配置数据库信息,配置不同的生成策略生成可以直接运行访问数据库的项目,吸取了mybatis generator的动态条件优势,同时又稍有扩展.可以生成简单易懂的sql,支持大部分单表操作,一般情况下不需要自己动手写sql.模板可以根据自己需求做相应的修改(如有需要可以提供springboot_data_access_demo项目的生成模板).支持的方法有

SpringBoot Mybatis项目中的多数据源支持

1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 2.建数据源 首先,我们建两个测试库 test1 test2,分别建两个表,分别添加一些测试数据 CREATE TABLE `groupidinfo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `groupId` varchar(255) DEFAULT NULL, `versio

SpringBoot+MyBatis+MySQL读写分离(实例)

? 1. 引言 读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做.因此,一般来讲,读写分离有两种实现方式.第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离:第二种是应用程序自己去做分离.这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP. 然而,应用程序层面去做读写分离最大的弱点(不足之处)在于无法动态增加数据库节点,因为数据源配置都是写在

第五章 springboot + mybatis(转载)

本编博客转发自:http://www.cnblogs.com/java-zhao/p/5350021.html springboot集成了springJDBC与JPA,但是没有集成mybatis,所以想要使用mybatis就要自己去集成.集成方式相当简单. 1.项目结构 2.pom.xml 1 <!-- 与数据库操作相关的依赖 --> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4