ibatis3中的一對多和一對一的實現

來源:互聯網
上載者:User

一、一對多



  1. DB


    人物表 t_user
      id     bigint
      name   varchar(20)
      age    int

    物品表 t_user_goods
       id          bigint
       goods_name  varchar(20)
       uid         bigint

  2.sqlmap-config.xml



    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
        <typeAliases>
            <typeAlias type="com.test.model.User" alias="user" />
            <typeAlias type="com.test.model.UserGoods" alias="userGoods" />
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="UNPOOLED">
                    <property name="driver"
                        value="net.sourceforge.jtds.jdbc.Driver" />
                    <property name="url"
                        value="jdbc:jtds:sqlserver://192.168.0.101:1433/guagua_vas_stock" />
                    <property name="username" value="guagua_web" />
                    <property name="password" value="123456" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="com/test/model/User.xml" />
        </mappers>
    </configuration>

  3.User.java


    package com.test.model;

    import java.io.Serializable;
    import java.util.List;

    public class User implements Serializable {
        private static final long serialVersionUID = 8681358563101101660L;
       
        private long id;
        private String name;
        private int age;
        private List<UserGoods> goods;

        --- getter setter省
    }

  4. UserGoods.java


    package com.test.model;

    import java.io.Serializable;

    public class UserGoods implements Serializable {
       
        private static final long serialVersionUID = -396357348123803689L;
        private long id;
        private String name;
        private long uid;

        -- getter setter省
    }

  5.User.xml


    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="user">
        <resultMap type="user" id="userMapper">
            <result property="id"     column="id"     jdbcType="BIGINT"/>
            <result property="name" column="name"     jdbcType="VARCHAR"/>
            <result property="age"     column="age"     jdbcType="INTEGER"/>
            <collection property="goods" ofType="java.util.List" select="getGoodsById" column="id"/>



        </resultMap>
       
        <resultMap type="userGoods" id="userGoodsMapper">
            <result property="id"     column="id"     jdbcType="BIGINT"/>
            <result property="name" column="goods_name"     jdbcType="VARCHAR"/>
            <result property="uid"     column="uid"     jdbcType="BIGINT"/>
        </resultMap>
       
         <!--  擷取UserGoods對象  -->
        <select id="getGoodsById" parameterType="Integer" resultMap="userGoodsMapper">
            select * from t_user_goods where uid = #{id}
        </select>
       
        <select id="getUserList" resultMap="userMapper">
            select * from t_user
        </select>
    </mapper>

    注意:resultMap好像不能跨檔案使用

  6.UserDao.java


     package com.test.dao;

    import java.util.List;
    import org.apache.ibatis.session.SqlSession;
    import com.bd.dao.IbatisSessionFactory;
    import com.test.model.User;

    public class UserDao {

        public List<User> getUserList() {
            SqlSession session = IbatisSessionFactory.getSqlSession();
            List<User> list = (List)session.selectList("getUserList");
            session.commit();
            session.close();
            return list;
        }

    }

二、一對一


  假設 t_user 與 t_user_goods是一對一的關係
  1.User.java


    package com.test.model;

    import java.io.Serializable;

    public class User implements Serializable {
        private static final long serialVersionUID = 8681358563101101660L;
       
        private long id;
        private String name;
        private int age;
        private UserGoods goods;    // 由List換成了UserGoods

        -- getter setter略
    }

  2.User.xml


    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
    <mapper namespace="user">
        <resultMap type="user" id="userMapper">
            <result property="id"     column="id"     jdbcType="BIGINT"/>
            <result property="name" column="name"     jdbcType="VARCHAR"/>
            <result property="age"     column="age"     jdbcType="INTEGER"/>
            <!-- collection property="goods" ofType="java.util.List" select="getGoodsById" column="id"/ -->
            <association property="goods" column="id" select="getGoodsById" />


        </resultMap>
       
        <resultMap type="userGoods" id="userGoodsMapper">
            <result property="id"     column="id"     jdbcType="BIGINT"/>
            <result property="name" column="goods_name"     jdbcType="VARCHAR"/>
            <result property="uid"     column="uid"     jdbcType="BIGINT"/>
        </resultMap>
       
         <!--  擷取UserGoods對象  -->
        <select id="getGoodsById" parameterType="Integer" resultMap="userGoodsMapper">
            select * from t_user_goods where uid = #{id}
        </select>
       
        <select id="getUserById" parameterType="int" resultMap="userMapper">
            select * from t_user where id = #{id}
        </select>
    </mapper>

  3.UserDao.java


    package com.test.dao;

    import java.util.List;
    import org.apache.ibatis.session.SqlSession;
    import com.bd.dao.IbatisSessionFactory;
    import com.test.model.User;

    public class UserDao implements UserDaoInte{
        public User getUserById(Long id) {
            SqlSession session = IbatisSessionFactory.getSqlSession();
            User user = (User)session.selectOne("getUserById", id);
            session.commit();
            session.close();
           
            return user;
        }
    }

 
  4.測試代碼


    public static void main(String[] args) {
        UserDao dao = new UserDao();
       
        User u = dao.getUserById(2L);
        System.out.println("name:" + u.getName() );
        System.out.println("goods:" + u.getGoods().getName());
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.