1.insert元素 属性详解
parameterType ,入参的全限定类名或类型别名
keyColumn ,设置数据表自动生成的主键名。对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置
keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中
useGeneratedKeys ,取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设 置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了
statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE
flushCache ,取值范围true(默认值)|false,设置执行该操作后是否会清空二级缓存和本地缓存
timeout ,默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常
databaseId ,取值范围oracle|mysql等,表示数据库厂家,元素内部可通过`<if test="_databaseId = 'oracle'">`来为特定数据库指定不同的sql语句 。
2.xxxMap.xml语法。
<insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id">
insert into TStudent(name, age) values(#{name}, #{age})
</insert>
useGeneratedKeys 开启主键返回功能,keyProperty 接收主键的值。
3.注意:
这种方法对mysql有效,对其他数据库无效。
实例:
package alian.domain;
import org.springframework.stereotype.Component;
import java.util.Date;
public class Homework {
private Integer id;
private Integer classId;
private Date stime;
private Date etime;
private Integer type;
private String filename;
private Integer state;
private String text;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getClassId() {
return classId;
}
public void setClassId(Integer classId) {
this.classId = classId;
}
public Date getStime() {
return stime;
}
public void setStime(Date stime) {
this.stime = stime;
}
public Date getEtime() {
return etime;
}
public void setEtime(Date etime) {
this.etime = etime;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename == null ? null : filename.trim();
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text == null ? null : text.trim();
}
@Override
public String toString() {
return "Homework{" +
"id=" + id +
", classId=" + classId +
", stime=" + stime +
", etime=" + etime +
", type=" + type +
", filename='" + filename + '\'' +
", state=" + state +
", text='" + text + '\'' +
'}';
}
}
HomeworkMapper.xml
<insert id="insertHomework_returnKey" useGeneratedKeys="true" keyProperty="id" parameterType="alian.domain.Homework" >
insert into homework ( id,class_id, stime,
etime, type, filename,
state, text)
values (#{id,jdbcType=INTEGER},#{classId,jdbcType=INTEGER}, #{stime,jdbcType=TIMESTAMP},
#{etime,jdbcType=TIMESTAMP}, #{type,jdbcType=INTEGER}, #{filename,jdbcType=VARCHAR},
#{state,jdbcType=INTEGER}, #{text,jdbcType=LONGVARCHAR})
</insert>
controller
@RequestMapping("/test")
public Object test()
{
Homework homework=new Homework();
int id=homeworkMapper.insertHomework_returnKey(homework);
System.out.println(homework.getId());
System.out.println(id);
return homework.getId();
}