mybatis存储list对象
Ⅰ 求助myBatis sqlMap foreach 对象中的list传入,报错
直接传个实体对象进去,在service层 javaBean bean =new JavaBean ();
bean.setId(id);
bean.setName(name);
.insert(bean);
上面的id,name等是service方法的各个参数
然后在myBatis 中的sql语句中直接引用各个属性就行了xx=#{id},xx=#{name}等等的
parametertype="你的实体名,也可以写实体的别名,这个别名是在sqlConfig.xml中";
Ⅱ mybatis 查询数据库返回值某字段是 List 该怎么搞
解决方法:如果确认是单条数据,可以直接 Object? ***(**); 。没有封装成对象时,默认返回的是List<Map<字段名称String,列值Object>>这样的数据。Dao接口:
List<Map<String,Object>> list(Integer id);
SQL:
<select id="list" parameterType="Integer" resultType="Map">。
拓展:
1、MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO)。
2、MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
Ⅲ Oracle中存储过程返回自定义的集合类型,Java中使用mybatis返回List集合类型
存储过程我不太熟,给你一个调用储存过程mybatis的实例参考:
<mappernamespace="entity.puserMapper">
<!--调用存储过程-->
<selectid="getCount"parameterMap="getUserCountMap"statementType="CALLABLE">
CALLmyts.ges_user_count(?,?)
</select>
<parameterMaptype="java.util.Map"id="getUserCountMap">
<parameterproperty="sexid"mode="IN"jdbcType="INTEGER"/>
<parameterproperty="usercount"mode="OUT"jdbcType="INTEGER"/>
</parameterMap>
</mapper>
主要是定义好parameterMap就行了
Ⅳ mybatis获取一个list怎么添加到数据库里
思路为采用Oracle中insert语句的高级用法:INSERT ALL ,批量插入数据:
INSERT ALL举例:
1、建测试表
CREATETABLEEDW_INT
(
AGMT_NOVARCHAR2(40BYTE)NOTNULL,
AGMT_SUB_NOVARCHAR2(4BYTE)NOTNULL,
NEED_REPAY_INTNUMBER(22,2),
CURR_PERIODNUMBER(4)NOTNULL
);
CREATETABLEEDW_INT_1
(
AGMT_NOVARCHAR2(40BYTE)NOTNULL,
AGMT_SUB_NOVARCHAR2(4BYTE)NOTNULL,
NEED_REPAY_INTNUMBER(22,2),
CURR_PERIODNUMBER(4)NOTNULL
);
CREATETABLEEDW_INT_2
(
AGMT_NOVARCHAR2(40BYTE)NOTNULL,
AGMT_SUB_NOVARCHAR2(4BYTE)NOTNULL,
NEED_REPAY_INTNUMBER(22,2),
CURR_PERIODNUMBER(4)NOTNULL
);
2.插入测试数据
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20003874','2104',3126.5,7);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20003874','2104',3290.76,6);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20003874','2104',3454.06,5);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20003874','2104',3616.41,4);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20017143','2104',2350.86,0);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20017143','2104',3566.55,0);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20018273','2104',1639.46,0);
INSERTINTOEDW_INT
(AGMT_NO,AGMT_SUB_NO,NEED_REPAY_INT,CURR_PERIOD)
VALUES
('20018273','2104',2080.49,0);
COMMIT;
3.insert all-不带条件
insertall
intoedw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
intoedw_int_2(agmt_no,agmt_sub_no,curr_period)
values(agmt_no,'1234',curr_period)
selectagmt_no,agmt_sub_no,need_repay_int,curr_periodfromedw_int;
commit;
结合该问题具体分析:
mybatis 的和相关的sql写法如下:
<insertid="batchSave">
INSERTALL
<foreachcollection="list"item="item">
INTOFSP_BUSINESS_INTEREST_REPORT
(
ID,
BUSINESS_DAY,
LOAN_NO,
CIF_NO,
CIF_NAME,
LOAN_TYPE,
REPAY_WAY,
TERM_TYPE,
VOUCH_WAY,
CHANNEL_TYPE,
LOAN_BEGIN_DATE,
LOAN_END_DATE,
RATE_BEGIN_DATE,
RATE_END_DATE,
AMT,
RATE_TYPE,
RATE,
RATE_AMT,
PAY_TYPE,
REPORT_OUT_FLAG,
REPORT_OUT_DATE,
REPORT_OUT_AMT,
CREATOR,
CREATE_TIME,
UPDATOR,
UPDATE_TIME
)VALUES(
getSeqByName('SEQ_FSP_BUS_INT_REPORT'),
#{businessDay,jdbcType=VARCHAR},
#{loanNo,jdbcType=VARCHAR},
#{cifNo,jdbcType=VARCHAR},
#{cifName,jdbcType=VARCHAR},
#{loanType,jdbcType=VARCHAR},
#{repayWay,jdbcType=VARCHAR},
#{termType,jdbcType=VARCHAR},
#{vouchWay,jdbcType=VARCHAR},
#{channelType,jdbcType=VARCHAR},
#{loanBeginDate,jdbcType=DATE},
#{loanEndDate,jdbcType=DATE},
#{rateBeginDate,jdbcType=DATE},
#{rateEndDate,jdbcType=DATE},
#{amt,jdbcType=NUMERIC},
#{rateType,jdbcType=VARCHAR},
#{rate,jdbcType=NUMERIC},
#{rateAmt,jdbcType=NUMERIC},
#{payType,jdbcType=VARCHAR},
#{reportOutFlag,jdbcType=VARCHAR},
#{reportOutDate,jdbcType=DATE},
#{reportOutAmt,jdbcType=NUMERIC},
#{creator,jdbcType=VARCHAR},
#{createTime,jdbcType=DATE},
#{updator,jdbcType=VARCHAR},
#{updateTime,jdbcType=DATE}
)
</foreach>
SELECT1FROMDUAL
</insert>
2.中接口如下定义:
voidbatchSave(@Param("list")List<BusinessInterestReport>list);
Ⅳ mybatis oracle 批量修改 前台怎么传list到后台
你可以定义个对象MonthObject,保存1-12的月份,然后页面用List去接收数据传到后台,或者用Map接受数据传到后台,反正后台写解析简单
Ⅵ mybatis怎么用list集合
直接传个实体对象进去,在service层 JavaBean bean =new JavaBean (); bean.setId(id); bean.setName(name); .insert(bean); 上面的id,name等是service方法的各个参数 然后在myBatis 中的sql语句中直接引用各个属性就行了xx=#{id},xx=#{name}
Ⅶ mybatis传值List类型的参数如何遍历
基本概念WHERE id=1 OR id=10 OR id=16
在查询条件中,查询条件定义成一个sql片段,需要修改sql片段
如图所示
案例:
1.创建测试类@Test
public void findUserList() throws Exception{
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
SqlSession session = sqlSessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
UserQueryVo queryVo = new UserQueryVo();
UserCustomer customer = new UserCustomer();
queryVo.setCustomer(customer);
List<Integer> ids=new ArrayList<Integer>();
ids.add(1);
ids.add(10);
ids.add(22);
queryVo.setIds(ids);
List<UserCustomer> list = mapper.findUserList(queryVo);
for (UserCustomer userCustomer : list) {
System.out.println(userCustomer.getId()+":"+userCustomer.getUsername());
}
session.close();
}
2.创建UserQueryVo
public class UserQueryVo {
//传递多个id
private List<Integer> ids;
//在这里包装查询条件(用户查询条件)
/*private User user;*/
private UserCustomer customer;
set get 省
}
public class UserCustomer extends User {
//在这里面进行扩展用户信息
}
public class User implements Serializable {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;
//添加订单属性
private List<Orders> ordersList;
set get 省
3. UserMapper
public interface UserMapper {
//用户信息综合查询列表
public List<UserCustomer> findUserList(UserQueryVo queryVo) throws Exception;
}
4.mapper.xml
<!-- 用户综合查询列表
#{customer.sex} : 取出pojo包装类型里面的性别的值
${customer.name}: 取出pojo对象里面的用户名称
-->
<select id="findUserList" parameterType="UserQueryVo" resultType="UserCustomer">
select * from user <!-- user.sex=#{customer.sex} and user.username like '%${customer.username}%' -->
<where>
<!-- 如果引用sql片段不在这个 映射文件中那么前面就要加上namespace -->
<include refid="query_sql_where"/>
</where>
<!-- 定义一个sql 片段
id: 是sql片段的唯一标识
基于单表定义sql片段 , 那么这样sql片段重用性才高;
sql片段里面不要包含where
-->
<sql id="query_sql_where">
<if test="customer.sex!=null and customer.sex!=''">
and user.sex=#{customer.sex}
</if>
<if test="customer.username!=null and customer.username!=''">
and user.username like '%${customer.username}%'
</if>
<if test="ids!=null">
<!--
collection : 指定对象集合里面的属性 ids
item : 遍历的时候每次生成的名称 user_id
open : 开始遍历的时候 拼接串AND (
close : 遍历结束时拼接串 )
separator : 每次遍历的时候要拼接的串
-->
<!-- AND ( id=1 OR id=10 OR id=22 -->
<!-- <foreach collection="ids" item="user_id" open="AND ( " close=")" separator="or">
每次遍历需要拼接的串
id=#{user_id}
</foreach> -->
<!-- AND id IN(1,10,22)-->
<foreach collection="ids" item="user_id" open="AND id IN( " close=")" separator=",">
<!-- 每次遍历需要拼接的串 -->
#{user_id}
</foreach>
</if>
</sql>
Ⅷ 求教MyBatis批量插入参数是List<Map<String,Object>gt;的问题
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map
关于foreach的具体例子在这里就先不举,以后有机会可以把每一种情况都举一个例子列出来。
Ⅸ mybatis 对象中属性 包含List<String>这种映射怎么处理
<resultMap type="Answer" id="answer">
<id property="id" column=""/>
<result property="answer" column=""/>
<collection property="oid" ofType="int">
<constructor>
<arg column=""/>
</constructor>
</collection>
<collection property="name" ofType="string">
<constructor>
<arg column=""/>
</constructor>
</collection>
</resultMap>
通过Integer和String的构造函数注入,具体的字段名称自己对好入座