zoukankan      html  css  js  c++  java
  • 实战(四)联表查询

    1.在数据库新建一个表,并插入数据

    Create TABLE `article` (
      `id` int(11) NOT NULL auto_increment,
      `userid` int(11) NOT NULL,
      `title` varchar(100) NOT NULL,
      `content` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    Insert INTO `article` VALUES ('1', '1', 'test_title', 'test_content');
    Insert INTO `article` VALUES ('2', '1', 'test_title_2', 'test_content_2');
    Insert INTO `article` VALUES ('3', '1', 'test_title_3', 'test_content_3');
    Insert INTO `article` VALUES ('4', '1', 'test_title_4', 'test_content_4');

    2.为该表格新建一个类

    package com.yihaomen.mybatis.model;

    public class Article {
        
        private int id;
        private User user;
        private String title;
        private String content;
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getContent() {
            return content;
        }
        public void setContent(String content) {
            this.content = content;
        }

    }

    3.在Configuration.xml配置改新建的类

    <typeAlias alias="Article" type="com.yihaomen.mybatis.model.Article" />

    4.在 IUserOperation 接口中,加入 select 对应的id 名称相同的方法:
    public List<Article> getUserArticles(int id);

    5.<!-- User 联合文章进行查询 方法之一的配置 (多对一的方式)  -->

    方法一:    
        <resultMap id="resultUserArticleList" type="Article">
            <id property="id" column="aid" />
            <result property="title" column="title" />
            <result property="content" column="content" />
            
            <association property="user" javaType="User">
                <id property="id" column="id" />
                <result property="userName" column="userName" />
                <result property="userAddress" column="userAddress" />            
            </association>        
        </resultMap>

    <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
           select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article 
                  where user.id=article.userid and user.id=#{id}
        </select>

    方法二:

    <!--之前写好的resultMap User类-->

    <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" />
        </resultMap>

        <!-- User 联合文章进行查询 方法之二的配置 (多对一的方式) -->    
        <resultMap id="resultUserArticleList-2" type="Article">
            <id property="id" column="aid" />
            <result property="title" column="title" />
            <result property="content" column="content" />        
            <association property="user" javaType="User" resultMap="resultListUser" />             
        </resultMap>
        
        <select id="getUserArticles" parameterType="int" resultMap="resultUserArticleList">
           select user.id,user.userName,user.userAddress,article.id aid,article.title,article.content from user,article 
                  where user.id=article.userid and user.id=#{id}
        </select>

    6.Test测试类里的调用方法

    public void getUserArticles(int userid){
            SqlSession session = sqlSessionFactory.openSession();
            try {
                IUserOperation userOperation=session.getMapper(IUserOperation.class);           
                List<Article> articles = userOperation.getUserArticles(userid);
                for(Article article:articles){
                    System.out.println(article.getTitle()+":"+article.getContent()+
                            ":作者是:"+article.getUser().getUserName()+":地址:"+
                             article.getUser().getUserAddress());
                }
            } finally {
                session.close();
            }
        }

  • 相关阅读:
    SpringBoot(十二)------国际化配置
    SpringBoot(十一) ----SpringBoot结合mybatis实现增删改查
    SpringBoot(十)----SpringMVC自动配置&扩展配置
    SpringBoot学习(九) ------访问静态web资源
    leetcode-----两数相加
    JDBC — 学习大纲
    网络编程
    StringBuffer
    代理
    加载文件的两种方式
  • 原文地址:https://www.cnblogs.com/JSWBK/p/5650645.html
Copyright © 2011-2022 走看看