本文共 2985 字,大约阅读时间需要 9 分钟。
插入数据时 如果数据库设置了自增长的话 那么无需设置主键会自动由数据库生成 我们插入的时候可以进行配置 使得插入的时候将插入成功生成的主键自动设置到实体类中
例子
实体类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}
有时候我们不需要使用数据库的自增长 而是自定义主键
例如:当表中无数据时 插入时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}