zoukankan      html  css  js  c++  java
  • 复杂对象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()); 
            } 
        } 
    
    }
    

  • 相关阅读:
    剑指offer 44.知识迁移能力 翻转单词顺序列
    Spark Streaming 概述+DStream工作原理+与Storm对比+实时WordCount
    剑指offer 43.知识迁移能力 左旋转字符串
    剑指offer 42.知识迁移能力 和为S的两个数字
    剑指offer 41.知识迁移能力 和为S的连续正数序列
    剑指offer 40.知识迁移能力 数组中只出现一次的数字
    Spark 在yarn上运行模式详解:cluster模式和client模式
    10.25模拟赛
    线段树+Dfs序【p2982】[USACO10FEB]慢下来Slowing down
    线段树 (区间合并)【p2894】[USACO08FEB]酒店Hotel
  • 原文地址:https://www.cnblogs.com/jubincn/p/3381214.html
Copyright © 2011-2022 走看看