双表查询java代码_Java工程mybatis实现多表查询过程详解

本文介绍了如何在Java工程中使用MyBatis进行双表查询。通过创建用户表user和帖子表post,然后建立对应的JavaBean对象,配置mybatis的主配置文件和映射文件,最后编写测试程序展示查询过程。
摘要由CSDN通过智能技术生成

1、先做一些准备工作

我们首先在创建一个 java 工程,还需要创建两张表,它们分别是用户表 user,和帖子表 post,一个户用户可以有多个帖子。

user表的结构和数据:

-- ----------------------------

-- Table structure for `user`

-- ----------------------------

CREATE TABLE `user` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`username` varchar(64) NOT NULL DEFAULT '',

`mobile` int(10) unsigned NOT NULL DEFAULT '0',

`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES ('1', 'yiibai', '100', '2015-09-23 20:11:23');

帖子表 post 的结构和数据:

-- ----------------------------

-- Table structure for `post`

-- ----------------------------

CREATE TABLE `post` (

`post_id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`userid` int(10) unsigned NOT NULL,

`title` varchar(254) NOT NULL DEFAULT '',

`content` text,

`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

PRIMARY KEY (`post_id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of post

-- ----------------------------

INSERT INTO `post` VALUES ('1', '1', 'MyBatis关联数据查询', '在实际项目中,经常使用关联表的查询,比如:多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创建一个 post 表,并初始化数据.', '2015-09-23 21:40:17');

INSERT INTO `post` VALUES ('2', '1', 'MyBatis开发环境搭建', '为了方便学习,这里直接建立java 工程,但一般都是开发 Web 项目。', '2015-09-23 21:42:14');

INSERT INTO `post` VALUES ('3', '2', '这个是别人发的', 'content,内容...', '0000-00-00 00:00:00');

从上面应该看出,这几个帖子对应的 userid 都是1,所以需要用户表 user 里面有 id=1 的数据。可以修改成满足自己条件的数据,按照orm的规则,表肯定需要一个对象与之对应,所以我们增加一个 Post 类。

2、创建表对应的 JavaBean 对象

这个例子中,我们需要在包 com.yiibai.pojo 下创建两个类,它们分别是: User.java 和 Post.java,我们一个一个地来看它们的代码,User.java 类的代码如下:

package com.yiibai.pojo;

import java.io.Serializable;

import java.util.Date;

import java.util.List;

public class User implements Serializable{

private int id;

private String username;

private String mobile;

private List posts;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getMobile() {

return mobile;

}

public void setMobile(String mobile) {

this.mobile = mobile;

}

public List getPosts() {

return posts;

}

public void setPosts(List posts) {

this.posts = posts;

}

@Override

public String toString() {

return "User [id=" + id + ", name=" + username + "]";

}

}

package com.yiibai.pojo;

import java.io.Serializable;

public class Post implements Serializable{

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、配置文件

在这一章节中,要用到的配置文件有两个,一个是 mybatis 的主配置文件:src/config/Configure.xml 和 User.java对应的配置文件 User.xml,我们先来看看 src/config/Configure.xml,其详细配置信息如下:

/p>

"http://mybatis.org/dtd/mybatis-3-config.dtd">

用于定义一个 JavaBean 类的别名,如将 com.yiibai.pojo.User 简写为 User,可以认为 com.yiibai.pojo.User 就是 User,User 就是 com.yiibai.pojo.User 。

另外一个配置文件 User.xml 的内容如下:

/p>

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

SELECT u.*,p.*

FROM user u, post p

WHERE u.id=p.userid AND id=#{user_id}

4、测试程序运行

到这里,整个工作准备得已经差不多了,我们创建一个主类来测试上面程序,在 src 下创建一个 Main.java,代码如下:

import java.io.Reader;

import java.text.MessageFormat;

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.yiibai.pojo.Post;

import com.yiibai.pojo.User;

public class Main {

private static SqlSessionFactory sqlSessionFactory;

private static Reader reader;

static {

try {

reader = Resources.getResourceAsReader("config/Configure.xml");

sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

} catch (Exception e) {

e.printStackTrace();

}

}

public static SqlSessionFactory getSession() {

return sqlSessionFactory;

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

SqlSession session = sqlSessionFactory.openSession();

try {

int userid = 1;

User user = session.selectOne("com.yiibai.userMaper.getUser", 1);

System.out.println("username: "+user.getUsername()+",");

List posts = user.getPosts();

for(Post p : posts) {

System.out.println("Title:" + p.getTitle());

System.out.println("Content:" + p.getContent());

}

} finally {

session.close();

}

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值