• MyBatis中如何使用insert标签呢?


    转自:

    MyBatis中如何使用insert标签呢?

    MyBatis insert 标签的功能

     MyBatis insert标签的功能,用于定义一个插入语句,执行插入操作,
      MyBatis运行完插入操作后,将会返回所影响的数据库行数 

    例:

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

    
       insert into UserInfo(name)
         values(#{name})
    
    
    


    2. 在 UserInfoMapper 接口中定义一个 add() 方法,代码

     public int addUserInfo(String name);
     
    /*
     参数说明:
       参数为 Sting 类型的字符串
       返回值为 int 类型
       即运行SQL 后,返回插入操作影响的行数  
    */
     
    


    3. 测试代码

    //插入 name 为"java265"的记录
    String name = "java265";
    int i = userInfoMapper.addWebsite(name);
    System.out.println("共插入了 " + i + " 条记录");
     
    


    4. 运行测试代码,控制台输出如下

    共插入了 1 条记录

    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. 使用 Map 传递参数
    2. 使用注解传递参数
    3. 使用 JavaBean 传递参数

    使用 Map 传递参数

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

    1. 在 UserMapper 接口中,定义一个 addUserByMap() 方法,并使用 Map 传递参数,方法如下。

    int addUserInfoByMap(Map params);
    

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

    
    
    insert into UserInfo(name, notes) values (#{name}, #{notes})
    
     


    3. 测试代码如下。

    Map params = new HashMap<>();
    params.put("name", "Java265");
    params.put("url", "我是Java爱好者");
    int i = userInfoMapper.addUserInfoByMap(params);
    System.out.println("通过 Map 成功向数据库中添加了 " + i + " 条记录");
     
    


    4. 执行测试代码,控制台输出如下。

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

    使用注解传递参数

    下文中讲述MyBatis 使用@Param 注解给注解器传递参数,示例代码如下。

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

    int addUserInfoByParam(@Param("name") String name, @Param("notes") String notes);
    
     


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

    
    
    insert into UserInfo(name, notes) values (#{name}, #{notes})
    
     


    3. 测试代码如下。

    int i = userInfoMapper.addUserInfoByParam("java265", "java爱好者");
    System.out.println("通过 @Param 注解成功向数据库中添加了 " + i + " 条记录");
     


    4. 执行测试代码,控制台输出以下信息---

    通过 @Param 注解成功向数据库中添加了 1 条记录
    

    使用 JavaBean 传递参数

    当参数过多的情况下,我们可以将参数封装到实体类中,然后传递给映射器
    1. 在 UserInfoMapper 接口中,定义一个 addUserInfoByJavaBean() 方法,并使用 JavaBean 传递参数,方法如下。

    int addUserInfoByJavaBean(UserInfo userInfo);
     


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

     
    
    insert into UserInfo(name, notes) values (#{name}, #{notes})
    
    
     


    3. 测试代码如下。

    //创建 JavaBean 对象
    UserInfo userInfo = new UserInfo();
    //将参数封装
     userInfo.setName("Java JavaBean"); 
    userInfo.setNotes("Java爱好者"); 
     int i = userInfoMapper.addUserInfoByJavaBean(userInfo); 
     System.out.println("通过 JavaBean 成功向数据库中添加了 " + i + " 条记录"); 
     
     


    4. 执行测试代码,控制台输出如下。

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

    主键(自动递增)填写

    我们都知道 MySQL、SQL Server 等数据库表可以采用自动递增的字段作为其主键, 那么MyBatis如何设置呢?
    1. 为 UserInfoMapper.xml 中 id 为 addUserInfo 的 insert 标签添加 keyProperty 和 useGeneratedKeys 属性,具体代码如下:

    
    
    insert into UserInfo(name,notes) values(#{name},#{notes})
    
    
     


    2. 测试代码如下:

    // 添加一个网站信息
    UserInfo userInfo= new UserInfo();
    //插入的对象中不包含主键 id
    userInfo.setName("Java265");
    userInfo.setNotes("Java爱好者");
    //执行插入
    int num = userInfoMapper.addUserInfo(userInfo);
    System.out.println("添加了 " + num + " 条记录");
    //获取回填的主键
    System.out.println("添加记录的主键是:" + addsite.getId());
    
     


    3. 执行测试代码,控制台输出如下。

    添加了 1 条记录
    添加记录的主键是:3

    自定义主键

    在一些实际项目中, 当数据库不支持递增生成主键时,我们可以使用MyBatis 的 <selectKey> 标签自定义生成主键,如下

    
    
    
    
    select if(max(id) is null,1,max(id)+1) as newId from UserInfo
    
    insert into UserInfo(id,name,notes) values(#{id},#{name},#{notes})
    
    

  • 相关阅读:
    基于CSP的运动想象EEG分类任务实战
    【华为OD题库-030】阿里巴巴找黄金宝箱(V)-java
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
    ENVI:如何进行图像融合?
    Linux安装Jenkins
    【SQL】索引失效的11种情况
    Word处理控件Aspose.Words功能演示:使用 Python 创建 MS Word 文档
    LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
    生死时速,分秒必争
    《优化接口设计的思路》系列:第四篇—接口的权限控制
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/128053563