MyBatis 常用参考手册

本文整理 Mybatis 用到的一些常用操作,当做参考手册。

基础数据和代码

为了方便后文的展开,我们把用到的 MySQL 表、Java 类先放到这里,便于后文参考。

User 表

假设我们有一个 user 表:

-- 创建表
CREATE TABLE user
(
    id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id),
    UNIQUE KEY `uniq_name` (`name`)
);

-- 插入数据
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com');

User 类

public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    
    // 略去 getter/setter
}

INSERT INTO ON DUPLICATE KEY UPDATE

使用场景是:插入数据时,根据主键或唯一索引判断是否重复,如果不存在则插入数据,如果存在重复的,则修改数据。

user表的 name 字段是唯一索引,当我们插入 user 时,如果存在同名的用户,那么就更新数据,那么我们的mapper 代码如下:

<insert id="insertOrUpdate">
    INSERT INTO user(name, age, email)
    VALUES (#{name}, #{age}, #{email}) ON DUPLICATE KEY
    UPDATE
      age = #{age},
      email = #{email}
</insert>

mybatis 注解 SQL

常用的 SQL 如下文。

查询

@Mapper
public class UserMapper {

    // 获取所有 user 数据
    @Select("select * from user")
    public List<User> selectAll();
    
    // 根据 id 获取 user
    @Select("select * from user where id=#{id}")
    public User selectById1(@Param("id") int id);
    
    // 根据 id 获取 user,可以不用加 @Param("id")
    @Select("select * from user where id=#{id}")
    public User selectById2(int id);
}

Mybatis 会自动帮我做 SQL 字段和 Java 属性的映射,也会自动做下划线转驼峰,比如 MySQL 里的字段名 user_id 会自动对应 Java 里的属性名 userId

当然,如果 MySQL 字段和Java 类属性名不一致时,可以自己添加映射,如下:

@Select("select * from user where id=#{id}")
@Results({
        @Result(property = "id", column = "t_id")
        , @Result(property = "name", column = "t_name")
        , @Result(property = "email", column = "t_email")

})
public User getById(int id);

可以看到,MySQL 中的字段名都有个t_前缀,那么我们可以通过 @Results @Result 注解,配置映射关系。

增删改

// 插入
@Insert("insert into user (name,age,email) values (#{name},#{age},#{email})")
public int insertUser(User user);

// 修改
@Update("update user set name=#{name},age=#{age} where id=#{id}")
public int updateUser(User user);

// 删除
@Delete("delete from user where id=#{id}")
public int deleteUser(int id);

获取MySQL所有表与表字段信息

Mapper 代码如下:

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

@Mapper
public interface TableDao {

    @Select("select * from information_schema.TABLES where TABLE_SCHEMA=(select database())")
    List<Map> listTable();

    @Select("select * from information_schema.COLUMNS where TABLE_SCHEMA = (select database()) and TABLE_NAME=#{tableName}")
    List<Map> listTableColumn(String tableName);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值