十三、mybaitis学习 ——多表查询(使用高级)

一、一对一

一对多采用
association标签进行封装javaBean

sqlMapper

<resultMap type="account" id="accoutMap">
        <!-- 封装主键 -->
        <id column="id" property="aid" />
        <!-- 封装普通属性 -->
        <result column="uid" property="userId" />
        <result column="money" property="userMoney" />
        <!-- 封装一对一javaBean -->
        <association property="user" javaType="user">
            <id column="id" property="id" />
            <result column="username" property="username" />
            <result column="birthday" property="birthday" />
            <result column="sex" property="sex" />
            <result column="address" property="address" />
        </association>


    </resultMap>
    <select id="findAll" resultMap="accoutMap">
        SELECT * FROM account a LEFT JOIN
        USER u ON u.id = a.uid;
    </select>

account

    private Integer aid;
    private Integer userId;
    private Double userMoney;
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Integer getAid() {
        return aid;
    }

    public void setAid(Integer aid) {
        this.aid = aid;
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public Double getUserMoney() {
        return userMoney;
    }

    public void setUserMoney(Double userMoney) {
        this.userMoney = userMoney;
    }

user

private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    private List<Account> accounts;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public List<Account> getAccounts() {
        return accounts;
    }

    public void setAccounts(List<Account> accounts) {
        this.accounts = accounts;
    }


    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

test

    SqlSessionFactory sqlSessionFactory;

    @Before
    public void beforeTest() throws IOException {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

    }

    @Test
    public void testAccout() {
        SqlSession session = sqlSessionFactory.openSession();
        AccountDao accountDao = session.getMapper(AccountDao.class);
        List<Account> findAll = accountDao.findAll();
        for (Account account : findAll) {
            System.out.println(account);
        }

    }

核心配置文件

<configuration>

    <properties resource="jdbc.properties">
    </properties>

    <typeAliases>
        <!-- <typeAlias type="cn.it.demo.domain.User" alias="uu"/> -->
        <package name="cn.it.demo.domain" />
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>


    <mappers>
        <package name="cn.it.demo.dao"/>
        <!-- <mapper resource="UserMapper.xml"></mapper> -->
        <!--<mapper class="cn.itcast.demo.dao.UserDao" /> -->
    </mappers>
</configuration>  

二、一对多

collection标签进行封装javaBean的集合
mybatis支持多重封装

     <resultMap type="user" id="userMap">
        <!-- 用户主键信息 -->
        <id column="id" property="id" />
        <!-- 用户的普通属性 -->
        <result column="username" property="username" />
        <result column="birthday" property="birthday" />
        <result column="sex" property="sex" />
        <result column="address" property="address" />
        <collection property="accounts" ofType="Account">
            <id column="aid" property="aid" />
            <result column="uid" property="userId" />
            <result column="money" property="userMoney" />

        </collection>

    </resultMap>

    <select id="findAll" resultMap="userMap" parameterType="map">
        SELECT
        u.*, a.id aid,a.uid,a.money FROM USER u LEFT JOIN account a ON
        (u.id =
        a.uid) 

    </select>

三、多对多

多对多其实就是两个一对多

<!-- 实体类和表之间的关系 -->
    <resultMap type="user" id="userMapper">
        <!-- 实体类中属性和表字段之间的关系 -->
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="sex" property="sex"/>
        <result column="birthday" property="birthday"/>
        <result column="address" property="address"/>
        <!-- 配置集合的关联对象 
            property:集合属性名称
            ofType:集合中元素的全限定类名
        -->
        <collection property="roles" ofType="cn.itcast.entity.Role">
            <id column="rid" property="id"/>
            <result column="role_name" property="rolename"/>
            <result column="role_desc" property="roledesc"/>
        </collection>
    </resultMap>

    <!-- 查询所有用户
        一个多操作
     -->
    <select id="findAllUser" resultMap="userMapper">
        SELECT u.*,r.id rid , r.role_name,r.role_desc FROM USER u LEFT JOIN user_role ur ON (u.id = ur.uid)
        LEFT JOIN role r ON(ur.rid = r.id)
    </select>
    <resultMap type="role" id="roleMapper">
        <id column="rid" property="id"/>
        <result column="role_name" property="rolename"/>
        <result column="role_desc" property="roledesc"/>
        <!-- 配置关联的集合对象 -->
        <collection property="users" ofType="user">
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="sex" property="sex"/>
            <result column="birthday" property="birthday"/>
            <result column="address" property="address"/>
        </collection>
    </resultMap>

    <!-- 查询所有角色的同时查询角色的用户 -->
    <select id="findAllRoles" resultMap="roleMapper">
        SELECT r.id rid,r.role_name,r.role_desc,u.* FROM role r LEFT JOIN user_role ur ON (r.id = ur.rid) 
        LEFT JOIN USER u ON (ur.uid = u.id)
    </select>

猜你喜欢

转载自blog.csdn.net/houysx/article/details/80147934