`
f0rb
  • 浏览: 118576 次
  • 性别: 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();
}

相关推荐

    MybatisAnnotationTools:生成Mybatis接口注解CRUD

    MybatisAnnotation工具基于注解的Mybatis代码生成工具,Mybatis-3.5可用。功能:自动生成PO和DAO的Java类,DAO支持分页查询,根据id查询,分割插入,批量插入,更新,替换删除,批量删除。 UserDao.java内容如下: @...

    Spring+Springmvc+Mybatis注解配置

    Spring+Springmvc+Mybatis注解开发配置,简单实现增删改差,访问路径为 http://localhost:8080/项目名/student/loadList.do,就可以实现效果,

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    day01_eesy_03mybatis_dao.zip

    把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...

    day01_eesy_02mybatis_annotation.zip

    把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...

    day01_eesy_01mybatis.zip

    把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...

    SpringMVC学习笔记整合搭建框架

    2、@RequestMapping注解的使用 3、Controller方法返回值 4、SpringMVC中异常处理 5、图片上传处理 6、Json数据交互 7、SpringMVC实现RESTful 8、拦截器 2.Spring入门 2.1.Springmvc是什么 3.3.jdbc编程步骤: 1、...

    史上最详细Spring+SpringMVC+Mybatis框架整合

    文章目录SSM三大框架的整合搭建整合环境编写Spring框架编写SpringMVC框架Spring整合SpringMVC框架编写Mybatis框架Spring整合MyBatis框架Spring整合MyBatis框架配置事务总结 SSM三大框架的整合 搭建整合环境 1.整合...

    UniversalMapper:MyBatis单表CURD通用Mapper

    ##极其方便的使用MyBatis单表的增删改改查 ##支持单表操作,不支持通用的多表联合查询 ##优点? 通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。 ...

    kellerMapper.jar

    这是一款轻量级的MyBatis插件,在GitHub上发布的有打好的jar包,25.2Kb,导入项目中即可使用,支持创建数据表、自定义查询、分页查询等常用的数据库操作。 依赖包 &lt;groupId&gt;org.mybatis.spring.boot ...

    SpringBootConformity:SpringBoot + Mybatis + Redis +任务

    构造并返回Json(1)自定义响应数据结构这个类是提供给门户,ios,安卓,微信商城用的门户接受此类数据后需要使用本类的方法转换成对于的数据类型格式(类,或者list)其他自行处理200:表示成功500:表示错误,错误...

    ssm-highclass:使用ssm框架编写的商品管理项目

    主要知识有包装类型pojo参数绑定(即类中不是简单类型的属性,而是另外的pojo),list参数绑定,数据回显,上传图片,json交互,RESTful架构,拦截器等。此次开发是基于之前的项目ssm-getting-started进一步提升的,...

    乐优商城.xmind

    常用其来处理application/json类型 子主题 2 将请求体中的JSON字符串绑定到相应的bean上 修改 Controller @PutMapping service updateByPrimaryKey 删除 Controller @DeleteMapping @PathVariable ...

    JavORM框架DarksORM.zip

    并且它可以在XML映射时通过python/JAVA/Javascript进行面向切面的动态处理。 主要特性: 支持通过session直接调用CRUD API方法(对象映射方法以及JDBC方法)。 采用注解方式配置数据模型实体。 支持链式数据源。...

    BeetlSQL数据库访问框架是一个全功能 DAO 工具,同时具有 Hibernate.rar

    在开发效率上,无需注解,自动使用大量内置SQL,轻易完成增删改查功能。数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型。SQL 模板基于Beetl实现,更容易写和调试,以及扩展。可以针对单个表(或者...

    免费分享 Java面试笔记 面试八股文 计算机网络基础

    本资源适用于运营商、Java开发校招面试基础巩固,包含计算机网络、Java基础、Java集合、Java并发编程、JVM、MySQL、Spring、MyBatis、Redis、Rocket MQ的经典面试题目,涵盖每个知识点的各个方面,能够很好的提升...

    easypoi之excel导入导出教程参考

    easypoi 官方文档参考 easypoi的介绍 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过...开始使用(SpringBoot+mybatis plus) 1.pom文件导入依赖 cn.afterturn easypoi-base 3.0.3 cn.a

    spring-boot-demo:springboot 2.1+整合各种技术

    :整合redis,7大数据类型:string,list,set,zset,hash,geo,hyperloglog :整合redisson实现分布式锁 :可选空替代ifnull优化代码,流集合增强处理 :整合websocket,用vue写了一个在线聊天的demo实现消息...

    ORM软件monalisa-orm.zip

    如果你觉得mybatis成堆的xml/mapper太繁琐,或许该软件正是你所想要的 如果你觉得现有的ORM软件总有那么些不太满意的地方,或许该软件有你所想要的 如果你觉得将SQL的查询结果映射成...

    JAVA核心知识点整理(有效)

    1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................

Global site tag (gtag.js) - Google Analytics