使用MyBatis映射器实现对数据库的增删改查操作

点击链接了解有关MyBatis映射器说明

1.MyBatis insert标签

1.1 insert标签

MyBatis insert 标签用来定义插入语句,执行插入操作。当 MyBatis 执行完一条插入语句后,就会返回其影响数据库的行数。

下面通过一个示例演示 insert 标签的具体用法。

1.修改 PetMapper.xml,增加插入语句,代码如下

<insert id="insert" parameterType="String">
        insert into pets (name) values(#{
   
   name})
</insert>          

2.在 PetMapper接口中定义一个 insert() 方法,代码如下

public int insert(String name);  

参数为 Sting 类型的字符串;返回值为 int 类型,即执行 SQL 后,插入记录的行数。

3.测试代码如下

public static void main(String[] args) {
   
   
        @Cleanup
        SqlSession session = SqlSessionUtil.openSession();
        int i = session.getMapper(PetMapper.class).delete1(8);
        System.out.println("删除了"+i+"行记录!");
    }            

1.2 insert 标签常用属性

insert 标签中常用的属性如下表。

属性名称 描述 备注
id 它和 Mapper 的命名空间组合起来使用,是唯一标识符,供 MyBatis 调用 如果命名空间+ id 不唯一,那么 MyBatis 抛出异常
parameterType 传入 SQL 语句的参数类型的全限定名或别名,它是一个可选属性。 支持基本数据类型和 JavaBean、Map 等复杂数据类型
keyProperty 该属性的作用是将插入操作的返回值赋给 PO 类的某个属性,通常为主键对应的属性。如果是联合主键,可以将多个值用逗号隔开。 -
useGeneratedKe 该属性用来设置,是否使用 JDBC 提供的 getGenereatedKeys() 方法,获取数据库内部产生的主键并赋值到 keyProperty 属性设置的请求对象的属性中,例如 MySQL、SQL Server 等自动递增的字段,其默认值为 false。 该属性值设置为 true 后,会将数据库生成的主键回填到请求对象中,以供其他业务使用。
flushCache 该属性用于设置执行该操作后,是否会清空二级缓存和本地缓存,默认值为 true。 -
timeout 该属性用于设置执行该操作的最大时限,如果超时,就抛异常。 -
databaseId 取值范围 oracle、mysql 等,表示数据库厂家;元素内部可通过 来为特定数据库指定不同的 sql 语句。 MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载不带 databaseId 属性和带有匹配当前数据库 databaseId 属性的所有语句。 如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。
keyColumn 该属性用于设置第几列是主键,当主键列不是表中的第 1 列时,就需要设置该属性。如果是联合主键,可以将多个值用逗号隔开。 -

注意:

insert 标签中没有 resultType 属性,只有查询操作才需要对返回结果类型进行相应的指定。

1.3 传递多个参数

在上面的示例中,我们在插入语句中只使用了一个 String 类型的参数,而在实际的开发过程中,我们的插入语句往往需要使用多个参数,Mybatis 为我们提供以下 3 种方式,来实现给映射器传递多个参数:

  • 使用 Map 传递参数
  • 使用注解传递参数
  • 使用 JavaBean 传递参数

1.4 使用 Map 传递参数

我们可以将参数封装到一个 Map 对象中,然后传递给 MyBatis 的映射器,示例如下。

  1. 在 PetMapper接口中,定义一个 insert1() 方法,并使用 Map 传递参数,方法如下
public int insert1(Map<String,Object> map);
  1. 在 PetMapper.xml 中,使用 insert 标签定义一条插入语句,并接收通过 Map 传递的参数,配置如下
<insert id="insert1" parameterType="Map" useGeneratedKeys="true">
        insert into pets(name,species,age) values (#{
   
   name},#{
   
   species},#{
   
   age})
    </insert>
  1. 测试代码如下
public static void main(String[] args) {
   
   
        @Cleanup
        SqlSession session = SqlSessionUtil.openSession();
        PetMapper mapper = session.getMapper(PetMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("name","旺财");
        map.put("species","Dog");
        map.put("age",5);
        int i = mapper.insert1(map);
        System.out.println(i);
    }
  1. 执行测试代码,控制台输出如下
[org.mybatis.mapper.PetMapper.insert1]-==>  Preparing: insert into pets(name,species,age) values (?,?,?)
[org.mybatis.mapper.PetMapper.insert1]-==> Parameters: 旺财(String), Dog(String), 5(Integer)
[org.mybatis.mapper.PetMapper.insert1]-<==    Updates: 1
1

通过 Map 成功向数据库中添加了 1 条记录

1.5 使用注解传递参数

我们还可以使用 MyBatis 提供的 @Param 注解给注解器传递参数,示例代码如下。

1.在 PetMapper接口中,定义一个 insert2() 方法,并使用 @Param 注解传递参数,方法如下

public int insert2(@Param("name") String name,@Param("species") String species,@Param("age") int age);

2.在 StudentMapper.xml 中使用 insert 标签定义一条插入语句,并接收通过 @Param 注解传递的参数,配置如下

<insert id="insert2">
        insert into pets(name,species,age) values (#{
   
   name},#{
   
   species},#{
   
   age})
    </insert>
                

3.测试代码如下

public static void main(String[] args) {
   
   
        @Cleanup
        SqlSession session = SqlSessionUtil.openSession();
        int i = session.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值