• 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很乱,自己看到的代码,自己撸的代码,都随便网上塞,然后之后都不怎么回顾。然后就学过什么都忘记了。隐约记得遇到过,具体解决方法不知道。

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

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

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

  • 相关阅读:
    go http的三种实现---2
    go http的三种实现---1
    go语言递归创建目录
    Golang中的正则表达式
    go语言strings包
    go语言获取字符串元素的个数
    VBA在Excel中的应用(三)
    ASP 转换HTML特殊字符
    ASP汉字转拼音函数的方法
    用ASP实现文件下载
  • 原文地址:https://www.cnblogs.com/qianjinyan/p/10355250.html
Copyright © 2020-2023  润新知