复杂对象ibatis插入,属性为list,怎么一次性插入

转自:http://mzhj.iteye.com/blog/1030359


public class PfStuffInfoVo implements Serializable {
/** 信息Id */
private String infoId;
/** 项目Id */
private String proid;
/** 附件信息 */
private List<PfFileVo> fileList;

...

这是我的对象 该怎么把fileList属性已插入,PfFileVo 有对应的表

貌似iBatis没有提供多个关联对象的同时插入

你需要再Service层调用多个DAO去做多个关联对象的插入操作

批处理在iBatis里是肯定有的

貌似叫batchUpdate方法

不记得了,这个你可以上网搜搜,答案很多的

iBatis3里貌似确实木有批量插入,很郁闷的说
回答者:clarck_913 - 2011-05-05 09:24:52
可以通过ibatis建立一对多的映射

POJO
Java code
 
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> public class Customer { private Long id; private String name; private String address; private String postcode; private String sex; private List<Orders> orderlist = new ArrayList<Orders>(); public class Orders { private Long id; private String code; private Long customerId; private Customer customer;


Customer.xml
XML code
 
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > < sqlMap namespace ="customer" > < typeAlias alias ="customer" type ="com.lavasoft.ssi.domain.Customer" /> < resultMap id ="result_base" class ="customer" > < result property ="id" column ="id" /> < result property ="name" column ="name" /> < result property ="address" column ="address" /> < result property ="postcode" column ="postcode" /> < result property ="sex" column ="sex" /> </ resultMap > < resultMap id ="result" class ="customer" extends ="result_base" > < result property ="orderlist" column ="id" select ="orders.findByCustomerId" /> </ resultMap > < insert id ="insert" parameterClass ="customer" > insert into customer(address,postcode,sex,name) values(#address#,#postcode#,#sex#,#name#) < selectKey keyProperty ="id" resultClass ="long" > select LAST_INSERT_ID() </ selectKey > </ insert > < select id ="getById" parameterClass ="long" resultMap ="result_base" > select * from customer where id = #value# </ select > < select id ="getWithCashById" parameterClass ="long" resultMap ="result" > select * from customer where id = #value# </ select > < select id ="getWithCashByIdInnerjoin" parameterClass ="long" resultClass ="customer" resultMap ="result" > select c.* from customer c inner join orders o on c.id=o.customerId </ select > </ sqlMap >



Orders.xml
XML code
 
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" > < sqlMap namespace ="orders" > < typeAlias alias ="orders" type ="com.lavasoft.ssi.domain.Orders" /> < resultMap id ="result_base" class ="orders" > < result property ="id" column ="id" /> < result property ="code" column ="code" /> < result property ="customerId" column ="customerId" /> </ resultMap > < resultMap id ="result" class ="orders" extends ="result_base" > < result property ="customer" column ="customerId" select ="customer.getById" /> </ resultMap > < insert id ="insert" parameterClass ="orders" > insert into orders(id,code,customerId) values(#id#,#code#,#customerId#) < selectKey keyProperty ="id" resultClass ="long" > select LAST_INSERT_ID() </ selectKey > </ insert > < select id ="findByCustomerId" resultMap ="result_base" parameterClass ="long" > select * from orders where customerId = #value# </ select > < select id ="getById" parameterClass ="long" resultMap ="result_base" > select * from orders where id = #value# </ select > < select id ="getByIdWithCash" resultMap ="result" resultClass ="orders" parameterClass ="long" > select * from orders where id = #value# </ select > </ sqlMap >


DAO
Java code
 
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> public interface CustomerDAO { public Long insert(Customer c); public List<Customer> getById(Long id); public List<Customer> getWithCashById(Long id); public List<Customer> getWithCashByIdInnerjoin(); } public class CustomerDAOImpl extends SqlMapClientDaoSupport implements CustomerDAO { public Long insert(Customer c) { return (Long) getSqlMapClientTemplate().insert("customer.insert",c); } public List<Customer> getById(Long id) { return getSqlMapClientTemplate().queryForList("customer.getById",id); } public List<Customer> getWithCashById(Long id) { return getSqlMapClientTemplate().queryForList("customer.getWithCashById",id); } public List<Customer> getWithCashByIdInnerjoin(){ return getSqlMapClientTemplate().queryForList("customer.getWithCashByIdInnerjoin"); } } public interface OrdersDAO { public Long insert(Orders o); public Orders getById(Long id); public List<Orders> findByCustomerId(Long cid); public List<Orders> getByIdWithCash(Long id); } public class OrdersDAOImpl extends SqlMapClientDaoSupport implements OrdersDAO { public Long insert(Orders o) { return (Long) getSqlMapClientTemplate().insert("orders.insert", o); } public Orders getById(Long id) { return (Orders) getSqlMapClientTemplate().queryForObject("orders.getById", id); } public List<Orders> findByCustomerId(Long cid) { return getSqlMapClientTemplate().queryForList("orders.findByCustomerId", cid); } public List<Orders> getByIdWithCash(Long id) { return (List<Orders>) getSqlMapClientTemplate().queryForList("orders.getByIdWithCash",id); } }



test
Java code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
/** 
* Created by IntelliJ IDEA.<br> 
* <b>User</b>: leizhimin<br> 
* <b>Date</b>: 2008-6-15 22:50:15<br> 
* <b>Note</b>: 客户订单一对多模型:客户 
*/ 
public class CustomerDAOTest { 
    private CustomerDAO customerDAO = (CustomerDAO) ApplicationContextUtils.getApplicationContext().getBean("customerDAO"); 

    public void testInsert() { 
        System.out.println("--------insert(Customer c)--------"); 
        Customer c = new Customer(); 
        //fuck!竟然不支持级联保存! 
//        Orders order1 = new Orders("o1"); 
//        Orders order2 = new Orders("o2"); 
//        c.getOrderlist().add(order1); 
//        c.getOrderlist().add(order2); 
        c.setName("多对一"); 
        c.setSex("M"); 
        c.setPostcode("450003"); 
        c.setAddress("郑州市花园路"); 
        Long pk = customerDAO.insert(c); 
        System.out.println("插入数据的ID=" + pk); 
    } 

    public void testGetById() { 
        System.out.println("--------getById(Long id)--------"); 
        Long pk = 1L; 
        List<Customer> list = customerDAO.getById(pk); 
        for (Customer c : list) { 
            System.out.println(c); 
        } 
    } 

    public void testGetWithCashById() { 
        System.out.println("--------getWithCashById(Long id)--------"); 
        Long pk = 1L; 
        List<Customer> list = customerDAO.getWithCashById(pk); 
        for (Customer c : list) { 
            System.out.println(c); 
        } 
    } 

    public void testGetWithCashByIdInnerjoin() { 
        System.out.println("--------getWithCashByIdInnerjoin()--------"); 
        List<Customer> list = customerDAO.getWithCashByIdInnerjoin(); 
        for (Customer c : list) { 
            System.out.println(c); 
        } 
    } 

    public static void main(String args[]) { 
        System.out.println("正在测试CustomerDAO"); 
        CustomerDAOTest customerDAOTest = new CustomerDAOTest(); 
        customerDAOTest.testInsert(); 
        customerDAOTest.testGetById(); 
        customerDAOTest.testGetWithCashById(); 
        customerDAOTest.testGetWithCashByIdInnerjoin(); 

    } 
}
 
public class OrdersDAOTest { 
    OrdersDAO ordersDAO = (OrdersDAO) ApplicationContextUtils.getApplicationContext().getBean("ordersDAO"); 

    public void testInsert() { 
        System.out.println("--------getWithCashById(Long id)--------"); 
        Orders o = new Orders("o1"); 
        o.setCustomerId(1L); 
        Long pk = ordersDAO.insert(o); 
        System.out.println("所插入数据ID=" + pk); 
    } 

    public void testGetById() { 
        System.out.println("--------getById(Long id)--------"); 
        Orders o = ordersDAO.getById(1L); 
        System.out.println("查询结果:" + o.toString()); 
    } 

    public void testFindByCustomerId() { 
        System.out.println("--------findByCustomerId(Long cid)--------"); 
        List<Orders> list = ordersDAO.findByCustomerId(1L); 
        for(Orders o : list){ 
            System.out.println(o); 
        } 
    } 
    public static void main(String args[]){ 
        System.out.println("正在测试OrderDAO"); 
        OrdersDAOTest ordersDAOTest = new OrdersDAOTest(); 
        ordersDAOTest.testInsert(); 
        ordersDAOTest.testGetById(); 
        ordersDAOTest.testFindByCustomerId(); 
        ordersDAOTest.testGetByIdWithCash(); 
    } 

    public void testGetByIdWithCash(){ 
        System.out.println("------------getByIdWithCash(Long id)----------"); 
        List<Orders> list = ordersDAO.getByIdWithCash(1L); 
        for(Orders o : list){ 
            System.out.println(o +"\n\t"+o.getCustomer().toString()); 
        } 
    } 

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值