[JWeb系列3] SpringBoot集成Mybatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs) [百度百科]

SpringBoot集成MyBatis

说白了MyBatis提供了一种高级映射,相对快捷的操作数据库的方式,记得用过ThinkPhp框架,操作数据部分用起来还是很舒服的,所以在JavaWeb上选择了MyBatis集成。

同理相较于Spring Boot,我们的MyBatis导入也需要添加依赖

第一步,添加依赖

添加部分如下,添加后的截图在下面



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.1.1




    mysql
    mysql-connector-java
    runtime

[JWeb系列3] SpringBoot集成Mybatis_第1张图片
依赖

第二步,配置数据库信息

在application.properties中配置数据库
内容如下

#第一句是你的entity,也就是pojo的所在包
mybatis.type-aliases-package=com.example.demo.Entity
#如果报错要求使用新版本,你需要在mysql.后面加上cj.(错误会提示)
spring.datasource.driverClassName = com.mysql.jdbc.Driver
#注意,这边的url username password配置跟jdbc的是一样的,具体要改成你用的数据库,添加你需要的配置
spring.datasource.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
[JWeb系列3] SpringBoot集成Mybatis_第2张图片
app

此时如果你的com.mysql.jdbc.Driver标红,说明你的项目mysql lib没设置好,需要你按照第一篇文章那样,把Mysql的Lib加入

第三步,添加扫描注解

在Application中添加mappingscan注解,内容是你的Mapper所在包


[JWeb系列3] SpringBoot集成Mybatis_第3张图片
image.png

第四步,建立Pojo

Pojo的话就是一个简单的java对象模板(Class),比如说我现在的场景我建立的测试数据库如下。

数据库名是rfid,我现在用admins这个表,表中有3个字段。


[JWeb系列3] SpringBoot集成Mybatis_第4张图片
数据库

那我的pojo建立应该对应着这几个字段。(其实不必要的,但是现在对应着就行,不会出什么大麻烦)

package com.example.demo.Entity;

import java.io.Serializable;

public class UserEntity implements Serializable{
//字段类型的话,最好跟Mapper里面规定的字段类型对应,否则会出现问题
   private Long id;
   private String user_id;
   private String password;

    public UserEntity(Long id, String user_id, String password) {
        this.id = id;
        this.user_id = user_id;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUser_id() {
        return user_id;
    }

    public void setUser_id(String user_id) {
        this.user_id = user_id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "id"+user_id+"pswd"+password;
    }
}


第五步,开发Mapper

先看一下我们的最终版吧

package com.example.demo.Mapper;

import com.example.demo.Entity.UserEntity;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UserMapper {

    @Select("SELECT * FROM admins")
    @Results({
            @Result(property = "id", column = "id"),
            @Result(property = "user_id", column = "user_id"),
            @Result(property = "password", column = "password")
    })
    List getAll();

    @Select("SELECT * FROM admins WHERE id = #{id}")
    @Results({
            @Result(property = "user_id", column = "user_id"),
            @Result(property = "password", column = "password")
    })
    UserEntity getOne(Long id);

    @Insert("INSERT INTO admins(id,user_id,password) VALUES(#{id}, #{user_id}, #{password})")
    void insert(UserEntity user);


    @Update("UPDATE admins SET user_id=#{user_id},password=#{password} WHERE id =#{id}")
    void update(UserEntity user);

    //删除某一项
    @Delete("DELETE FROM admins WHERE id =#{id}")
    void delete(Long id);

}

Mapper是操作数据库的核心内容,这是一个java 接口,我们的增删改查通过注解来实现,还是要写sql语句,第一次看到这个的时候我内心是崩溃的,因为以前用过THinkphp对数据库的操作,简直超级棒,现在初来乍到搞JavaWeb,一直渴望有这样的神操作,可是到头来还是要写Sql……听同学说其他框架可以实现,暂且不研究,以后有机会再说。
暂时先这样,我们写好了一个Mapper

同时下面这是一些相关的解释

  • @Select 是查询类的注解,所有的查询均使用这个
  • @Results修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。(这也是我刚才说的对应不对应的问题,如果实际要求不能对应那么可以通过注解来解决)
  • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
  • @Update 负责修改,也可以直接传入对象
  • @delete 负责删除

第六步,验收成果

也是先看看我们最终版本

package com.example.demo.Web;

import com.example.demo.Mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import com.example.demo.Entity.UserEntity;

@RestController
@EnableAutoConfiguration
public class HelloController {
    @RequestMapping("/Hello")
    public String hello(){
        return "Hello Spring boot";
    }

    @Autowired
    private UserMapper userMapper;

    @RequestMapping("/getUsers")
    public String getUsers() {
        List users=userMapper.getAll();
        return users.get(0).toString();
    }

    @RequestMapping("/getOne")
    public String getOne(){
        return userMapper.getOne(1L).toString();
    }
}

也是修改我们的HelloController 增加俩方法,然后浏览器访问看效果。


[JWeb系列3] SpringBoot集成Mybatis_第5张图片
效果图

话说我刚才很智障的遇到一个错误,就是能连接数据库,查不到数据,一堆空指针……后来各种找不知道怎么解决,跑数据库一看,没添加数据……想把自己掐死。

当然就是简单的集成,参考大神们的教程,在大神们神一样的操作上简化
?或者是整理了一下逻辑。
在踩坑的路上越走越远。

你可能感兴趣的:([JWeb系列3] SpringBoot集成Mybatis)