MyBatis 的注解实现方法

MyBatis 的注解实现方法

  • MyBatis 的注解实现方法
  • 引入依赖
  • 添加配置
  • 创建表
  • 创建实体类
  • 创建mapper接口
  • @Insert
  • @Delete
  • @Select
    • @Results和@ResultMap
    • 通过配置文件解决
  • @Update
  • @Options

MyBatis 的注解实现方法

MyBatis 的注解实现方法_第1张图片

引入依赖

在springBoot项目中下载了EditStarters插件的,可以直接在配置文件处右键
MyBatis 的注解实现方法_第2张图片
点击generate
MyBatis 的注解实现方法_第3张图片
再次点击这个插件
MyBatis 的注解实现方法_第4张图片
在SQL中将图中的勾上就可以啦
MyBatis 的注解实现方法_第5张图片

添加配置

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root
    password: 111111
    driver-class-name: com.mysql.cj.jdbc.Driver

这里需要注意的是,需要连接的数据库的名称,这里我们使用mybatis_test,还要注意个人的用户名和密码

创建表

-- 创建数据库
DROP DATABASE IF EXISTS mybatis_test;
CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;
-- 使⽤数据数据
USE mybatis_test;
-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS userinfo;
CREATE TABLE `userinfo` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`password` VARCHAR ( 127 ) NOT NULL,
`age` TINYINT ( 4 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
`phone` VARCHAR ( 15 ) DEFAULT NULL,
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
-- 添加⽤⼾信息
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

创建实体类

因为我们在数据库中创建了一个userinfo这样一个表,下面我们要通过mybatis来操作数据库,就需要用到实体类的映射关系

package com.example.demo.model;

import lombok.Data;

import java.util.Date;
@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;

}

实体类的属性名与表中的字段名⼀⼀对应

创建mapper接口

这里创建的接口,后缀最好是以mapper结尾,因为在工作中,mapper里面都是存放的操作数据库的相关代码,而正因为如此,我们可以给他加上一个@Mapper注解来将这个类交给spring来管理,
这里为什么创建的是接口,而不是类,因为接下来我们要实现的操作数据库的方法都不会对齐进行实现,我们只需要将方法定义出来,剩下的交给我们这次的主题,注解来实现

@Insert

对于数据中的添加数据的操作,我们可以先创建一个insert方法

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface mapper {
    Integer insert(UserInfo userInfo);
}

创建完成之后,我们需要使用@Insert来编写我们的sql代码

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface mapper {
    @Insert(("insert into userinfo (username,password,age,gender,phone) " +
            "values (#{username},#{password},#{age},#{gender},#{phone})"))
    Integer insert(UserInfo userInfo);
}

这里的#中的username代表Java对象的属性,前面的代表数据库中的字段属性
既然我们是添加数据,那么我们就需要给该方法传递一个需要添加的对象,返回值则是对于sql的返回值

@Delete

对于数据中的删除数据的操作,根据上面的操作,我们也可以使用注解的方法实现

package com.example.demo.mapper;

import com.example.demo.model.UserInfo;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface mapper {
    @Insert(("insert into userinfo (username,password,age,gender,phone) " +
            "values (#{username},#{password},#{age},#{gender},#{phone})"))
    Integer insert(UserInfo userInfo);
    @Delete("delete from userinfo where id=#{id}")
    Integer delete(Integer id);
}

@Select

这里需要注意,创建数据库中的表的适合,我们使用的delete_flag,而创建实体类的适合,我们创建的是deleteFlag,很显然,名字格式不同,这会导致查询时,会因为数据格式不同,而导致显示不出对应的数据
怎么解决呢,有三种解决方法,sql中对数据库属性名进行重命名,很显然,这是不优雅的,下面我们介绍另外两种解决方法

@Results和@ResultMap

            @Results( id = "BaseMap",value = {@Result(column = "delete_flag",property = "deleteFlag"),
            @Result(column = "create_time",property = "createTime"),
            @Result(column = "update_time",property = "updateTime")})

在进行上述定义之后,想在其他地方使用时,就可以使用@ResultMap注解来实现

    @Select("select * from userinfo")
    @Results( id = "BaseMap",value = {@Result(column = "delete_flag",property = "deleteFlag"),
            @Result(column = "create_time",property = "createTime"),
            @Result(column = "update_time",property = "updateTime")})
    List<UserInfo> selectAll();
    @Select("select id,username,password,age,gender,phone,delete_flag,create_time,update_time from userinfo where id=#{id}")
    @ResultMap("BaseMap")
    List<UserInfo> select(Integer id);

通过配置文件解决

mybatis:
  configuration:
    map-underscore-to-camel-case: true

在配置文件中加入以上代码,即可实现自动转驼峰

@Update

    @Update("update userinfo set password=#{password} where id=#{id}")
    Integer upDate(UserInfo userInfo);

@Options

当我们想要查看数据库中的自增变量时,我们就可以使用@Options来对变量进行映射

@Options(useGeneratedKeys = true,keyProperty = "id")

你可能感兴趣的:(mybatis)