博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis 主键配置
阅读量:4208 次
发布时间:2019-05-26

本文共 2985 字,大约阅读时间需要 9 分钟。

1. 主键回调

插入数据时 如果数据库设置了自增长的话 那么无需设置主键会自动由数据库生成 我们插入的时候可以进行配置 使得插入的时候将插入成功生成的主键自动设置到实体类中

例子

实体类User:

package com.hqq.entity;import java.io.Serializable;/** * User * Created by heqianqian on 2017/4/27. */public class User implements Serializable{
private static final long serialVersionUID = 6464657673344930397L; private Integer id; private String name; private Integer age; public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public User(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; }}

数据库表users

这里写图片描述

这里数据库MySQL 主键设置了自增长

再配置Mapper.xml文件

/*keyProperty配置主键对应实体类的属性 useGeneratedKeys是否是自增长*/ insert into users(name,age) values (#{name},#{age});

这里只需要配置keyProperty为主键对应实体类的属性名称 useGeneratedKeys设置为true

这样插入之后就会将主键回调到实体类中

@Test    public void testInsert() throws Exception {        String statement = "com.hqq.entity.User.insertUser";        User user = new User("hqq", 22);        int insert = sqlSession.insert(statement, user);        LOGGER.info("Insert:{}",insert);        LOGGER.info("User: {}",user.toString());    }

输出结果:

2017-08-16 14:43:03.941 [main] INFO  TestCRUDByXmlMapper - Insert:12017-08-16 14:43:04.331 [main] INFO  TestCRUDByXmlMapper - User: User{id=12, name='hqq', age=22}

2. 自定义主键

有时候我们不需要使用数据库的自增长 而是自定义主键

例如:当表中无数据时 插入时ID设置为1 当存在数据时 插入的ID为当前表中最大ID+2

修改Mapper.xml文件

select if(max(id) is null,1,max(id)+2) as newId from users
insert into users(id,name,age) values (#{id},#{name},#{age});

测试

@Test    public void testInsert() throws Exception {        String statement = "com.hqq.entity.User.insertUser";        User user = new User("Jack", 22);        int insert = sqlSession.insert(statement, user);        LOGGER.info("Insert:{}",insert);        LOGGER.info("User: {}",user.toString());        insert = sqlSession.insert(statement, new User("Tom",10));        LOGGER.info("Insert:{}",insert);        LOGGER.info("User: {}",user.toString());    }

测试结果

2017-08-16 15:09:52.838 [main] INFO  TestCRUDByXmlMapper - Insert:12017-08-16 15:09:52.841 [main] INFO  TestCRUDByXmlMapper - User: User{id=23, name='Jack', age=22}2017-08-16 15:09:52.878 [main] INFO  TestCRUDByXmlMapper - Insert:12017-08-16 15:09:52.879 [main] INFO  TestCRUDByXmlMapper - User: User{id=25, name='Tom', age=10}

你可能感兴趣的文章
自适应表格连续字符换行及单行溢出点点点显示
查看>>
IMG图片和文字同一行显示,图片和文字居中显示
查看>>
CSS 相对|绝对(relative/absolute)定位系列(一)
查看>>
CSS 相对|绝对(relative/absolute)定位系列(二)
查看>>
CSS 相对|绝对(relative/absolute)定位系列(三)
查看>>
纯CSS实现侧边栏/分栏高度自动相等
查看>>
CSS布局奇淫巧计之-强大的负边距
查看>>
改变CSS世界纵横规则的writing-mode属性
查看>>
理解CSS3 max/min-content及fit-content等width值
查看>>
word-break:break-all和word-wrap:break-word的区别
查看>>
CSS深入理解vertical-align和line-height的基友关系
查看>>
CSS 中的内联元素、块级元素以及display的各个属性的特点
查看>>
css行高line-height的一些深入理解及应用
查看>>
我对CSS vertical-align的一些理解与认识(一)
查看>>
我对CSS vertical-align的一些理解与认识(二)
查看>>
去除inline-block元素间间距的N种方法
查看>>
CSS中height:100%和height:inherit的异同
查看>>
absolute元素在text-align属性下的对齐显示
查看>>
CSS3选择器:nth-child和:nth-of-type之间的差异
查看>>
微信小程序知识点GET
查看>>