zoukankan      html  css  js  c++  java
  • Mybatis案例(关于数据库关系一对多,多对多关系,在mapper中应该怎样去配置)

    (1)新建一个maven项目,引入mybatis依赖

    (2)配置mybatis-config.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <typeAliases>
            <package name="edu.nf.ch03.entity"/>
        </typeAliases>
    
        <environments default="mysql">
            <environment id="mysql">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="mapper/UsersMapper.xml"/>
            <mapper resource="mapper/IdCardMapper.xml"/>
        </mappers>
    </configuration>

    (3)实体类

    Addres:

    package edu.nf.ch03.entity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class Address {
    
        private Integer aid;
        private String address;
    
        /**
         * 多对多关联用户
         */
        //private List<Users> users = new ArrayList<>();
    
        public Integer getAid() {
            return aid;
        }
    
        public void setAid(Integer aid) {
            this.aid = aid;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }

    IdCard实体类:

    package edu.nf.ch03.entity;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class IdCard {
    
        private Integer id;
        private String cardNum;
        /**
         * 关联用户
         */
        private Users user;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getCardNum() {
            return cardNum;
        }
    
        public void setCardNum(String cardNum) {
            this.cardNum = cardNum;
        }
    
        public Users getUser() {
            return user;
        }
    
        public void setUser(Users user) {
            this.user = user;
        }
    }

    Tel实体类:

    package edu.nf.ch03.entity;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class Tel {
    
        private Integer tid;
        private String tel;
    
        public Integer getTid() {
            return tid;
        }
    
        public void setTid(Integer tid) {
            this.tid = tid;
        }
    
        public String getTel() {
            return tel;
        }
    
        public void setTel(String tel) {
            this.tel = tel;
        }
    }

    Users实体类:

    package edu.nf.ch03.entity;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class Users {
    
        private Integer uid;
        private String userName;
        /**
         * 关联身份证
         */
        private IdCard card;
    
        /**
         * 一对多关联联系方式
         * @return
         */
        private List<Tel> tels = new ArrayList<>();
    
        /**
         * 多对多关联地址
         */
        private List<Address> addrs = new ArrayList<>();
    
        public Integer getUid() {
            return uid;
        }
    
        public void setUid(Integer uid) {
            this.uid = uid;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public IdCard getCard() {
            return card;
        }
    
        public void setCard(IdCard card) {
            this.card = card;
        }
    
        public List<Tel> getTels() {
            return tels;
        }
    
        public void setTels(List<Tel> tels) {
            this.tels = tels;
        }
    
        public List<Address> getAddrs() {
            return addrs;
        }
    
        public void setAddrs(List<Address> addrs) {
            this.addrs = addrs;
        }
    }

    (4)接口实现类:

    package edu.nf.ch03.dao.impl;
    
    import edu.nf.ch03.commons.MyBatisUtil;
    import edu.nf.ch03.dao.UserDao;
    import edu.nf.ch03.entity.Users;
    import org.apache.ibatis.session.SqlSession;
    
    import java.util.List;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class UserDaoImpl implements UserDao {
    
        @Override
        public Users findUserById(int uid) {
            SqlSession session = MyBatisUtil.getSession();
            Users user = null;
            try {
                UserDao dao = session.getMapper(UserDao.class);
                user = dao.findUserById(uid);
            } finally {
                session.close();
            }
            return user;
        }
    
        @Override
        public List<Users> listUsers() {
            SqlSession session = MyBatisUtil.getSession();
            List<Users> list = null;
            try {
                UserDao dao = session.getMapper(UserDao.class);
                list = dao.listUsers();
            } finally {
                session.close();
            }
            return list;
        }
    }

    (5)UserMapper.xml配置:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="edu.nf.ch03.dao.UserDao">
    
        <!-- userMap -->
        <resultMap id="userMap" type="users">
            <id property="uid" column="u_id"/>
            <result property="userName" column="u_name"/>
            <!-- 一对一关联身份证, 一对一或者多对一使用association,
            property指定实体中关联对象的字段名
            ,resultMap属性指定其他resultMap的id-->
            <association property="card" resultMap="cardMap"/>
            <!-- 一对多关联电话, 一对多或者多对多使用collection,
            property和resultMap属性同上-->
            <collection property="tels" resultMap="telMap"/>
            <!-- 多对多关联地址-->
            <collection property="addrs" resultMap="addrMap"/>
        </resultMap>
    
        <!-- cardMap -->
        <resultMap id="cardMap" type="idCard">
            <id property="id" column="c_id"/>
            <result property="cardNum" column="c_number"/>
        </resultMap>
    
        <!-- telMap-->
        <resultMap id="telMap" type="tel">
            <id property="tid" column="t_id"/>
            <result property="tel" column="t_number"/>
        </resultMap>
    
        <!-- addrMap -->
        <resultMap id="addrMap" type="address">
            <id property="aid" column="a_id"/>
            <result property="address" column="address"/>
        </resultMap>
    
        <!-- 关联查询 -->
        <select id="findUserById" resultMap="userMap">
            select u.u_id, u.u_name, c.c_number, t.t_number, a.address
            from user_info u
            join card_info c on u.u_id = c.u_id
            join tel_info t on u.u_id = t.u_id
            join user_addr ua on u.u_id = ua.u_id
            join addr_info a on a.a_id = ua.a_id
            where u.u_id = #{uid}
        </select>
    </mapper>

    (6)测试:

    package edu.nf.ch03.test;
    
    import edu.nf.ch03.dao.impl.UserDaoImpl;
    import edu.nf.ch03.entity.Address;
    import edu.nf.ch03.entity.Tel;
    import edu.nf.ch03.entity.Users;
    import org.junit.Test;
    
    /**
     * @author lance
     * @date 2018/9/13
     */
    public class UserDaoTest {
    
        @Test
        public void testFindUserById(){
            Users user = new UserDaoImpl().findUserById(1);
            //用户名
            System.out.println(user.getUserName());
            //身份证
            System.out.println(user.getCard().getCardNum());
            //联系方式
            for (Tel tel : user.getTels()) {
                System.out.println(tel.getTel());
            }
            //住址
            for (Address addr : user.getAddrs()) {
                System.out.println(addr.getAddress());
            }
    
        }
    }
  • 相关阅读:
    msmms (二) sms与mms 简述!
    msmms (一) sms与mms区别
    RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
    GPRS GPRS(General Packet Radio Service)是通用分组无线服务技术的简称,它是GSM移动电话用户可用的一种移动数据业务,属于第二代移动通信中的数据传输技术
    CrtCtl (客户端认证的证书、私钥)的控制
    ID
    Pb (数据存储单位)
    PDP 有多种定义,具体哪一种还需研究!!!!
    CNN 美国有线电视新闻网 wapCNN WAP 指无线应用通讯协议 ---- 美国有线电视新闻网 的无线应用
    CMWAP CMWAP是手机上网使用的接入点的名称
  • 原文地址:https://www.cnblogs.com/gepuginy/p/9642836.html
Copyright © 2011-2022 走看看