Spring boot+MyBatis实现增删改查操作以及踩过的一些坑

开发环境

  1. IntelliJ IDEA 2018.2.4 x64
  2. MySQL 5.7
  3. JAVA8
  4. Spring Boot v2.0.6.RELEASE

1.使用IDEA创建项目

  1. 打开IDEA选择Spring Initializr


    Spring Initializr
  2. 下一步,填写项目基本信息,这里我使用Gradle来构建项目。


    填写项目基本信息
  3. 下一步,选择依赖


    选择依赖
  4. 下一步,选择保存路径


    图片.png

2. 数据库配置

创建了一张测试用的学生表,表结构如下。


表结构

测试数据


测试数据

application.properties配置文件中写入连接参数,这里只填写基本的连接URL、用户名、密码、数据库驱动,第一行端口不加也行。

server.port=8383
spring.datasource.url=jdbc:mysql://localhost:3306/demo20181025?useSSL=false 
spring.datasource.username=root \\用户名
spring.datasource.password=admin \\密码
spring.datasource.driverClassName = com.mysql.jdbc.Driver

3. 持久层

Student实体类

public class Student {
    private Integer id;
    private String name;
    private String sex;
    private int age;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

SQL映射 定制化的SQL语句还是很灵活的

@Repository
@Mapper
public interface StudentMapper {
    //查找全部学生
    @Select("select * from Student")
    ArrayList<Student> findAll();
    //通过ID查找学生
    @Select("select * from Student where id=#{id}")
    Student findById(int id);
    //模糊查询
    @Select("select * from Student where name Like '%${_parameter}%' ")
    ArrayList<Student> findByLike(String keyword);
    //通过ID删除学生
    @Delete("delete from Student where id=#{id}")
    void DeleteById(int id);
    //添加学生
    @Insert("insert into Student(name,sex,age) values(#{name},#{sex},#{age})")
    @SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Integer.class)
    int insert(Student student);
    //通过ID修改学生姓名
    @Update("update Student set name=#{name} where id=#{id}")
    void update(Student student);
}


4. 控制器

HomeController添加@RestController注解,返回JSON方便测试。

@RestController
public class HomeController {
    private StudentMapper studentMapper;
    public HomeController(StudentMapper studentMapper)
    {
        this.studentMapper=studentMapper;
    }

    @GetMapping("/findAll")
    public ArrayList<Student> findAll()
    {
        return studentMapper.findAll();
    }
    @GetMapping("/findById")
    public Student findById(int id)
    {
        return studentMapper.findById(id);
    }

    @GetMapping("/findByLike")
    public ArrayList<Student> findByLike(String keyword)
    {
        return studentMapper.findByLike(keyword);
    }
    @GetMapping("/DeleteById")
    public void DeleteById(int id)
    {
        studentMapper.DeleteById(id);
    }
    @GetMapping("/Insert")
    public int  Insert(Student student)
    {
      studentMapper.insert(student);
      return student.getId();
    }
    @GetMapping("/Update")
    public void  Update(Student student)
    {
        studentMapper.update(student);
    }
}

5. 测试

  • 查找全部学生 http://localhost:8383/findAll

    查找全部学生

  • 通过ID查找学生 http://localhost:8383/findById?id=1

    通过ID查找学生

  • 模糊查询 http://localhost:8383/findByLike?keyword=小

    模糊查询

  • 通过ID删除学生 http://localhost:8383/DeleteById?id=4
    删除成功无返回值

  • 添加学生,成功返回ID http://localhost:8383/Insert?name=vaemc&sex=男&age=20

    添加学生

  • 通过ID修改学生姓名 http://localhost:8383/Update?name=小花&id=2
    修改成功无返回值

  • 最终的项目目录


    项目目录

6. 一些坑

  • 进行模糊查询的时候,语句中的参数得用${_parameter} 有知道原因的大佬留个言
  • 找不到studentMapper 这个提示不管也可以正常运行,但对于强迫症来说还是很难受啊
    Could not autowire. No beans of 'StudentMapper' type found. less... (Ctrl+F1)
    Inspection info:Checks autowiring problems in a bean class.
    图片.png

    在谷歌上搜索说是IDEA的BUG,在映射类上添加@Repository注解即可解决
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。