id=“insertLwUser”
parameterType=“lwUser”
parameterMap=“deprecated”
flushCache=“true”
statementType=“PREPARED”
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout=“20”
databaseId=“mysql”
lang="">
有一些标签和select语句是重复的就不在重复介绍,主要来关注一下其他标签。
useGeneratedKeys
可选标签。配置为true时,MyBatis会使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值为false。
keyProperty
可选标签。唯一标记一个属性,MyBatis会将通过getGeneratedKeys 的返回值或者通过insert 语句的selectKey 子元素设置它的键值,默认值是unset 。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表
keyColumn
通过生成的键值设置表中的列名,这个设置仅在某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是
逗号分隔的属性名称列表
获取自增主键
获取自增主键,可以通过keyProperty来映射
定义一个实体类:
package com.lonelyWolf.mybatis.model;
public class UserAddress {
private int id;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
定义一个UserAddressMapper.java接口:
package com.lonelyWolf.mybatis.mapper;
import com.lonelyWolf.mybatis.model.UserAddress;
import org.apache.ibatis.annotations.Param;
public interface UserAddressMapper {
int insert(UserAddress userAddress);
}
注意:这里参数如果直接只有一个的话可以不适用@Param注解,这样在xml文件中可以直接使用JavaBean内的属性名。如果使用了@Param注解,如下:
int insert(@Param(“userAddress”) UserAddress userAddress);
那么xml文件中就可以使用#{userAddress.属性名}来获取属性JavaBean内的属性
定义一个UserAddressMapper.xml映射文件(keyProperty="id"表示把主键的值设置到参数UserAddress类中的属性id):
insert into lw_user_address (address) values (#{address})
mybatis-config.xml中要新增mapper映射文件配置:
然后写一个测试类:
package com.lonelyWolf.mybatis;
import com.lonelyWolf.mybatis.mapper.UserAddressMapper;
import com.lonelyWolf.mybatis.model.UserAddress;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class TestMyBatisInsert {
public static void main(String[] args) throws IOException {
String resource = “mybatis-config.xml”;
//读取mybatis-config配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession对象
SqlSession session = sqlSessionFactory.openSession();
try {
UserAddress userAddress = new UserAddress();
userAddress.setAddress(“广东深圳”);
UserAddressMapper userAddressMapper = session.getMapper(UserAddressMapper.class);
int i = userAddressMapper.insert(userAddress);
session.commit();
System.out.println(“插入成功数:” + i);
System.out.println(“插入数据的主键为:” + userAddress.getId());
}finally {
session.close();
}
}
}
输出结果(成功获取到了插入数据的主键):
插入成功数:1
插入数据的主键为:1
通过selectKey获取自定义列
假如有些数据库不支持自增主键,或者说我们想插入自定义的主键,而又不想在业务代码中编写逻辑,那么就可以通过MyBatis的selectKey来获取。
UserAddressMapper.java中新建一个方法:
int insert2(UserAddress userAddress);
然后在UserAddressMapper.xml中对应新增一个insert2语句:
select uuid() from lw_user_address
insert into lw_user_address (address) values (#{address})
然后修改测试类:
try {
UserAddress userAddress = new UserAddress();
UserAddressMapper userAddressMapper = session.getMapper(UserAddressMapper.class);
int i = userAddressMapper.insert2(userAddress);
session.commit();
System.out.println(“插入成功数:” + i);
System.out.println(“插入数据的address为:” + userAddress.getAddress());
}finally {
session.close();
}
输出结果如下,成功获得了我们自定义的address:
插入成功数:1
插入数据的address为:097dfc8b-f043-11ea-97c4-00163e12524a
selectKey中的order属性有2个选择:BEFORE和AFTER。
PS:selectKey中返回的值只能有一条数据,如果满足条件的数据有多条会报错,所以一般都是用于生成主键,确保唯一,或者在selectKey后面的语句加上条件,确保唯一
update
insert用来映射更新语句。以下就是一个undate标签的全部二级标签:
id=“UpdateLwUser”
parameterType=“lwUser”
parameterMap=“deprecated”
flushCache=“true”
statementType=“PREPARED”
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout=“20”
databaseId=“mysql”
lang="">
这个标签和insert基本一致,就不重复解释了。
delete
delete用来映射删除语句。以下就是一个delete标签的全部二级标签:
id=“insertLwUser”
parameterType=“lwUser”
parameterMap=“deprecated”
flushCache=“true”