[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导入也需要添加依赖

第一步,添加依赖

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

<!--MyBatis依赖-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

<!--Mysql驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
依赖

第二步,配置数据库信息

在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
app

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

第三步,添加扫描注解

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


image.png

第四步,建立Pojo

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

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


数据库

那我的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<UserEntity> 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<UserEntity> users=userMapper.getAll();
        return users.get(0).toString();
    }

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

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


效果图

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,511评论 0 4
  • 非本人总结的笔记,抄点笔记复习复习。感谢传智博客及黑马程序猿成长 什么是Mybatis ​ MyBatis 本...
    键盘瞎阅读 1,291评论 0 4
  • 1 引言# 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybait...
    七寸知架构阅读 76,460评论 36 980
  • Spring 技术笔记Day 1 预热知识一、 基本术语Blob类型,二进制对象Object Graph:对象图...
    OchardBird阅读 973评论 0 2
  • 很多人都会说,要好好过,要过成自己想要的生活! 可是,许多年后,或者许多天后。回头看看,你的生活是否还如你当初所希...
    唯旧不舍阅读 218评论 0 0