`
f0rb
  • 浏览: 119183 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类

MyBatis使用注解处理List类型的参数

阅读更多
MyBatis中通过xml文件配置数据库批量操作的文章很多,比如这篇http://www.cnblogs.com/xcch/articles/2042298.html,但探讨如何通过注解配置实现同样效果的文章却很少,官方文档上也没找到相关的用法,其中的难点在于如何处理List或者Map类型的参数。不过这种方法终于被我试出来并且测试通过,现以批量插入为例,来演示一下怎样通过注解来实现数据库的批量操作:

User.java
public class User {
    private Integer id;
    private String name;

    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;
    }
}


UserDAO.java
public interface UserDAO {
    @InsertProvider(type = UserDAOProvider.class, method = "insertAll")
    void insertAll(List<User> users);
}


UserDAOProvider.java
public class UserDAOProvider {
    public String insertAll(Map map) {
        List<User> users = (List<User>) map.get("list");
        StringBuilder sb = new StringBuilder();
        sb.append("INSERT INTO User ");
        sb.append("(id, name) ");
        sb.append("VALUES ");
        MessageFormat mf = new MessageFormat("(null, #'{'list[{0}].name})");
        for (int i = 0; i < users.size(); i++) {
            sb.append(mf.format(new Object[]{i}));
            if (i < users.size() - 1) {
                sb.append(",");
            }
        }
        return sb.toString();
    }
}


MyBatis会把UserDAO的insertAll方法中的List类型的参数存入一个Map中, 默认的key是"list", 可以用@Param注解自定义名称, MyBatis在调用@InsertProvide指定的方法时将此map作为参数传入, 所有代码中使用List<User> users = (List<User>) map.get("list");获取list参数.
可以从代码中看出生成的SQL语句大致为:
INSERT INTO User (id, name) VALUES (null, #{list[0].name}), (null, #{list[1].name})[,(null, #{list[i].name})]

其中#{list[0].name}就表示从List参数的取第0个元素的name的值了, "list"跟key是对应的。
1
1
分享到:
评论
2 楼 f0rb 2011-10-24  
macrotea 写道
楼主也用annotation?
文章不错,希望多发这方面的

public final class UserTypeSqlBuilder extends BaseSqlBuilder{

private static final String TABLE="tb_user_type";

/*
* 更新
--------------------------------*/

public String insert(){
BEGIN();
INSERT_INTO(TABLE);
VALUES("typeName", "#{typeName}");
VALUES("remark", "#{remark}");
VALUES("addDate", "#{addDate}");
VALUES("editDate", "#{editDate}");
return SQL();
}

这种简单的SQL还是直接用@Insert写比较好,毕竟通过反射调用Provider会慢。

可以参考这个:
http://java.dzone.com/articles/getting-started-ibatis-mybatis-0

public interface UserDAO { 
    final String INSERT = "INSERT INTO User (id, name) VALUES (null, #{name})";
 
    @Insert(INSERT)
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertAll(User user);  
}
1 楼 macrotea 2011-10-22  
楼主也用annotation?
文章不错,希望多发这方面的

public final class UserTypeSqlBuilder extends BaseSqlBuilder{

private static final String TABLE="tb_user_type";

/*
* 更新
--------------------------------*/

public String insert(){
BEGIN();
INSERT_INTO(TABLE);
VALUES("typeName", "#{typeName}");
VALUES("remark", "#{remark}");
VALUES("addDate", "#{addDate}");
VALUES("editDate", "#{editDate}");
return SQL();
}

相关推荐

    Mybatis基于注解实现多表查询功能

    Mybatis基于注解实现多表查询功能是指使用Mybatis框架中的注解来实现多表查询的功能。这种方法可以简化配置,提高开发效率。下面我们将详细介绍如何使用Mybatis基于注解实现多表查询功能。 一、多表查询的概念 在...

    Spring mvc 和 mybatis 整合,mybatis使用注解模式

    在MyBatis的注解模式下,我们可以直接在DAO接口的方法上使用注解来指定SQL语句。例如,@Select用于查询,@Insert用于插入,@Update用于更新,@Delete用于删除。这种方式简化了XML配置,使得代码更易读、易维护。 ...

    MyBatis基于注解简单案例

    通过这个简单的MyBatis注解案例,我们可以了解到如何利用MyBatis进行基本的数据库操作,包括选择性地使用注解替代XML配置,以及如何在Spring框架下集成MyBatis。在实际项目中,还可以结合MyBatis的其他特性,如结果...

    Mybatis基于注解实现增删查改和多参数列表查询

    Mybatis 是一款流行的轻量级持久层框架,它允许开发者将SQL语句直接写在Java代码中,通过注解或...在`MybatisLearningChapter4`的学习资料中,你可以找到更具体的示例和实践,进一步加深对Mybatis注解使用方法的理解。

    MyBatis注解配置映射器:动态SQL的实现

    MyBatis是一款优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本项目中,我们将深入探讨...通过实践项目"MyBatisPro12",你可以进一步加深对MyBatis注解和动态SQL的理解,并将其应用到实际开发中。

    mybatis注解

    MyBatis注解的使用极大地提高了开发效率,减少了XML配置的工作量。然而,对于复杂的SQL逻辑或跨表操作,可能还是需要借助XML映射文件来实现。在实际项目中,开发者可以根据需求选择合适的方式来组合使用XML和注解。...

    Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    参数传递可以通过方法的参数来实现,Mybatis会自动处理参数映射。对于复杂参数或者多个参数,可以使用`@Param`注解来指定参数别名,例如: ```java @Select("select * from sys_user where id=#{id} and nickname...

    Mybatis注解手写源码篇

    首先,我们要理解Mybatis注解的基本用法。Mybatis通过注解可以在Mapper接口的方法上直接声明SQL语句,如`@Select`用于查询,`@Insert`用于插入,`@Update`用于更新,`@Delete`用于删除。这些注解使得代码更加简洁,...

    MyBatis使用注解开发实现步骤解析

    MyBatis使用注解开发实现步骤解析 MyBatis是一个流行的持久层框架,它提供了两种方式来开发映射语句,一种是使用XML文件,另一种是使用注解。使用注解开发可以减少配置文件的数量,提高开发效率,但需要注意一些...

    mybatis和spring整合方式-带注解

    通过上述步骤,我们实现了MyBatis与Spring的整合,使用`MapperFactoryBean`并结合注解的方式大大简化了代码量和配置复杂度。这种方式特别适合于初学者学习,并且在实际项目中也十分常见。希望本篇总结能够帮助大家更...

    mybatis自定义注解完成数据库切库

    然而,标准的MyBatis注解并不直接支持切换不同的数据库。为了实现数据库切库,我们需要创建一个自定义注解,用于标记需要切换数据库的方法,并编写相应的拦截器来处理这些注解。 1. **创建自定义注解**: 创建一个...

    Mybatis多参数查询与列表查询不同方式实现

    在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...

    深入了解MyBatis参数

    本文将深入了解MyBatis参数,了解参数处理过程,参数传递方式,参数类型等知识点。 参数处理过程 ---------------- 在MyBatis中,参数处理是通过MapperMethod.java中的convertArgsToSqlCommandParam方法来实现的。...

    Mybatis注解开发源代码下载

    通过学习和分析`itheima_mybatis_anno`提供的源代码,你可以深入理解Mybatis注解开发的原理和使用方法,提高开发效率,并能更好地掌握JavaEE中的数据访问技术。这个资源对于初学者和进阶者都是宝贵的学习材料,通过...

    Spring+Springmvc+Mybatis注解配置

    本篇文章将深入探讨Spring、Spring MVC和Mybatis的注解配置以及如何通过它们实现简单的CRUD(创建、读取、更新、删除)操作。 首先,让我们看看Spring框架。Spring的核心是依赖注入(DI),它允许开发者在运行时...

    mybatis中注解映射SQL示例代码

    MyBatis是一款流行的持久层框架,它提供了多种方式来映射SQL语句,其中之一便是使用注解的方式。下面我们将通过示例代码来介绍MyBatis中注解映射SQL的相关知识点。 结果集分页 在使用MyBatis框架时,我们经常会...

    MyBatis传入多个参数的问题

    当使用`selectList()`方法时,如果需要同时传递不同类型的参数,可以通过将所有参数封装到一个`Map`对象中来实现。例如: ```java List&lt;String&gt; list_3 = new ArrayList(); Map, Object&gt; map2 = new HashMap, ...

    MyBatis注解配置映射器:一对多关系的实现

    本文将深入探讨如何使用MyBatis的注解配置来实现一对多关系映射,以此来提高开发效率并减少代码冗余。 首先,我们需要理解一对多关系的概念。在数据库设计中,一对多关系表示一个表中的记录可以对应另一个表中的多...

    mybatis 注解

    MyBatis注解是MyBatis框架中的一种简化配置的方式,它允许开发者在Java类或接口的方法上直接添加注解,以实现SQL映射和结果映射,从而减少了XML配置文件的使用。MyBatis注解与iBATIS(MyBatis的前身)相比,提供了...

    springboot整合mybatis案例(注解方式)

    在本教程中,我们将深入探讨如何使用注解方式将MyBatis框架与Spring Boot整合,以便构建高效且灵活的Web应用程序。Spring Boot以其简洁的配置和开箱即用的特性深受开发者喜爱,而MyBatis作为轻量级的持久层框架,...

Global site tag (gtag.js) - Google Analytics