关闭

Mybatis的一对多查询中的问题

103人阅读 评论(0) 收藏 举报
分类:

昨天做了Mybatis几个查询,发现一个问题,这里首先说一下,

1,主要是多张关联表中的id相同时,做关联配置的时候,<resultMap type="" id=""></resultMap>中多个

<id column="id" property="id"/> 的 column="id"不能相同,否则查出的list中只有一条数据,解决方法是修改column="p_id",并且sql查询语句中,要给对应的id取一个别名p_id。

2,一对多中的多要用标签collection一对多中的多要用标签关联,多对一(一对一)要用标签association关联。

3,如果要用接口进行操作session,mapper.xml文件中的<mapper namespace=""> namespace为接口的包名+接口名,并且接口方法名对应查询SQL标签中的id。

下面给出一个一对多和多对一的实例,

数据源配置文件:

<?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> 
        <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/> 
        <typeAlias alias="Article" type="com.yihaomen.mybatis.model.Article"/> 
    </typeAliases> 

    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
            <property name="username" value="root"/>
            <property name="password" value="cheng"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/yihaomen/mybatis/model/User.xml"/>
    </mappers>
</configuration>


mapper.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="com.yihaomen.mybatis.inter.IUserOperation">
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="userName" property="userName" />
        <result column="userAge" property="userAge" />
        <result column="userAddress" property="userAddress" />
        <collection property="listArticles" ofType="Article" column="userid">  
             <id property="id" column="aid" />
       <result property="title" column="title" />
       <result property="content" column="content" />    
        </collection>
</resultMap>

<resultMap type="Article" id="getArticle">  
        <id column="id" property="id"/>  
        <result column="title" property="title"/>  
        <association property="user" javaType="com.yihaomen.mybatis.model.User">  
        <id column="aid" property="id" />
        <result column="userName" property="userName" />
        <result column="userAge" property="userAge" />
        <result column="userAddress" property="userAddress" />
        </association>  
    </resultMap>

<select id="getUserUsers" parameterType="int" resultMap="resultListUser">
        select u.*,a.id,a.title,a.content from user u,article a where u.id=a.userid and u.id=#{id}  
    </select>
    
    <select id="getUserArticles" parameterType="int" resultMap="getArticle">
        select u.userName,u.userAddress,u.id aid,a.id,a.title,a.content from user u,article a where u.id=a.userid and a.id=#{id}  
    </select>

</mapper>

对应接口:

package com.yihaomen.mybatis.inter;
import java.util.List;
import com.yihaomen.mybatis.model.Article;
import com.yihaomen.mybatis.model.User;

public interface IUserOperation {    
    public User selectUserByID(int id);
    public List<User> selectUsers(String UserName);
    public void addUser(List<User> user);
    public void updateUser(User user);
    public void deleteUser(int id);
    public  Article getUserArticles(Integer id);
    public  User getUserUser(Integer id);
    
}

查询函数:

package com.yihaomen.test;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.yihaomen.mybatis.inter.IUserOperation;
import com.yihaomen.mybatis.model.Article;
import com.yihaomen.mybatis.model.User;


public class Test {
    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader; 

    static{
        try{
            reader    = Resources.getResourceAsReader("Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        }catch(Exception e){
            e.printStackTrace();
        }
    }


    public static SqlSessionFactory getSession(){
        return sqlSessionFactory;
    }
    
    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
       
        try {
IUserOperation userOperation=session.getMapper(IUserOperation.class);

 
Article ListUser=userOperation.getUserArticles(1);
        System.out.println(ListUser.getUser().getUserName());
       
    session.commit();
        } finally {
        session.close();
        }
    }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57505次
    • 积分:772
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:38篇
    • 译文:7篇
    • 评论:7条
    最新评论