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是对应的。
分享到:
相关推荐
Mybatis基于注解实现多表查询功能是指使用Mybatis框架中的注解来实现多表查询的功能。这种方法可以简化配置,提高开发效率。下面我们将详细介绍如何使用Mybatis基于注解实现多表查询功能。 一、多表查询的概念 在...
在MyBatis的注解模式下,我们可以直接在DAO接口的方法上使用注解来指定SQL语句。例如,@Select用于查询,@Insert用于插入,@Update用于更新,@Delete用于删除。这种方式简化了XML配置,使得代码更易读、易维护。 ...
通过这个简单的MyBatis注解案例,我们可以了解到如何利用MyBatis进行基本的数据库操作,包括选择性地使用注解替代XML配置,以及如何在Spring框架下集成MyBatis。在实际项目中,还可以结合MyBatis的其他特性,如结果...
Mybatis 是一款流行的轻量级持久层框架,它允许开发者将SQL语句直接写在Java代码中,通过注解或...在`MybatisLearningChapter4`的学习资料中,你可以找到更具体的示例和实践,进一步加深对Mybatis注解使用方法的理解。
MyBatis是一款优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在本项目中,我们将深入探讨...通过实践项目"MyBatisPro12",你可以进一步加深对MyBatis注解和动态SQL的理解,并将其应用到实际开发中。
MyBatis注解的使用极大地提高了开发效率,减少了XML配置的工作量。然而,对于复杂的SQL逻辑或跨表操作,可能还是需要借助XML映射文件来实现。在实际项目中,开发者可以根据需求选择合适的方式来组合使用XML和注解。...
参数传递可以通过方法的参数来实现,Mybatis会自动处理参数映射。对于复杂参数或者多个参数,可以使用`@Param`注解来指定参数别名,例如: ```java @Select("select * from sys_user where id=#{id} and nickname...
首先,我们要理解Mybatis注解的基本用法。Mybatis通过注解可以在Mapper接口的方法上直接声明SQL语句,如`@Select`用于查询,`@Insert`用于插入,`@Update`用于更新,`@Delete`用于删除。这些注解使得代码更加简洁,...
MyBatis使用注解开发实现步骤解析 MyBatis是一个流行的持久层框架,它提供了两种方式来开发映射语句,一种是使用XML文件,另一种是使用注解。使用注解开发可以减少配置文件的数量,提高开发效率,但需要注意一些...
通过上述步骤,我们实现了MyBatis与Spring的整合,使用`MapperFactoryBean`并结合注解的方式大大简化了代码量和配置复杂度。这种方式特别适合于初学者学习,并且在实际项目中也十分常见。希望本篇总结能够帮助大家更...
然而,标准的MyBatis注解并不直接支持切换不同的数据库。为了实现数据库切库,我们需要创建一个自定义注解,用于标记需要切换数据库的方法,并编写相应的拦截器来处理这些注解。 1. **创建自定义注解**: 创建一个...
在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...
本文将深入了解MyBatis参数,了解参数处理过程,参数传递方式,参数类型等知识点。 参数处理过程 ---------------- 在MyBatis中,参数处理是通过MapperMethod.java中的convertArgsToSqlCommandParam方法来实现的。...
通过学习和分析`itheima_mybatis_anno`提供的源代码,你可以深入理解Mybatis注解开发的原理和使用方法,提高开发效率,并能更好地掌握JavaEE中的数据访问技术。这个资源对于初学者和进阶者都是宝贵的学习材料,通过...
本篇文章将深入探讨Spring、Spring MVC和Mybatis的注解配置以及如何通过它们实现简单的CRUD(创建、读取、更新、删除)操作。 首先,让我们看看Spring框架。Spring的核心是依赖注入(DI),它允许开发者在运行时...
MyBatis是一款流行的持久层框架,它提供了多种方式来映射SQL语句,其中之一便是使用注解的方式。下面我们将通过示例代码来介绍MyBatis中注解映射SQL的相关知识点。 结果集分页 在使用MyBatis框架时,我们经常会...
当使用`selectList()`方法时,如果需要同时传递不同类型的参数,可以通过将所有参数封装到一个`Map`对象中来实现。例如: ```java List<String> list_3 = new ArrayList(); Map, Object> map2 = new HashMap, ...
本文将深入探讨如何使用MyBatis的注解配置来实现一对多关系映射,以此来提高开发效率并减少代码冗余。 首先,我们需要理解一对多关系的概念。在数据库设计中,一对多关系表示一个表中的记录可以对应另一个表中的多...
MyBatis注解是MyBatis框架中的一种简化配置的方式,它允许开发者在Java类或接口的方法上直接添加注解,以实现SQL映射和结果映射,从而减少了XML配置文件的使用。MyBatis注解与iBATIS(MyBatis的前身)相比,提供了...
在本教程中,我们将深入探讨如何使用注解方式将MyBatis框架与Spring Boot整合,以便构建高效且灵活的Web应用程序。Spring Boot以其简洁的配置和开箱即用的特性深受开发者喜爱,而MyBatis作为轻量级的持久层框架,...