Java工程mybatis实现多表查询过程详解
1、先做一些准备工作
我们首先在创建一个java工程,还需要创建两张表,它们分别是用户表user,和帖子表post,一个户用户可以有多个帖子。
user表的结构和数据:
------------------------------
--Tablestructurefor`user`
------------------------------
CREATETABLE`user`(
`id`int(10)unsignedNOTNULLAUTO_INCREMENT,
`username`varchar(64)NOTNULLDEFAULT'',
`mobile`int(10)unsignedNOTNULLDEFAULT'0',
`created`datetimeNOTNULLDEFAULT'0000-00-0000:00:00',
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8;
------------------------------
--Recordsofuser
------------------------------
INSERTINTO`user`VALUES('1','yiibai','100','2015-09-2320:11:23');
帖子表post的结构和数据:
------------------------------
--Tablestructurefor`post`
------------------------------
CREATETABLE`post`(
`post_id`int(10)unsignedNOTNULLAUTO_INCREMENT,
`userid`int(10)unsignedNOTNULL,
`title`varchar(254)NOTNULLDEFAULT'',
`content`text,
`created`datetimeNOTNULLDEFAULT'0000-00-0000:00:00',
PRIMARYKEY(`post_id`)
)ENGINE=InnoDBAUTO_INCREMENT=4DEFAULTCHARSET=utf8;
------------------------------
--Recordsofpost
------------------------------
INSERTINTO`post`VALUES('1','1','MyBatis关联数据查询','在实际项目中,经常使用关联表的查询,比如:多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创建一个post表,并初始化数据.','2015-09-2321:40:17');
INSERTINTO`post`VALUES('2','1','MyBatis开发环境搭建','为了方便学习,这里直接建立java工程,但一般都是开发Web项目。','2015-09-2321:42:14');
INSERTINTO`post`VALUES('3','2','这个是别人发的','content,内容...','0000-00-0000:00:00');
从上面应该看出,这几个帖子对应的userid都是1,所以需要用户表user里面有id=1的数据。可以修改成满足自己条件的数据,按照orm的规则,表肯定需要一个对象与之对应,所以我们增加一个Post类。
2、创建表对应的JavaBean对象
这个例子中,我们需要在包com.yiibai.pojo下创建两个类,它们分别是:User.java和Post.java,我们一个一个地来看它们的代码,User.java类的代码如下:
packagecom.yiibai.pojo;
importjava.io.Serializable;
importjava.util.Date;
importjava.util.List;
publicclassUserimplementsSerializable{
privateintid;
privateStringusername;
privateStringmobile;
privateListposts;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
this.username=username;
}
publicStringgetMobile(){
returnmobile;
}
publicvoidsetMobile(Stringmobile){
this.mobile=mobile;
}
publicListgetPosts(){
returnposts;
}
publicvoidsetPosts(Listposts){
this.posts=posts;
}
@Override
publicStringtoString(){
return"User[id="+id+",name="+username+"]";
}
}
packagecom.yiibai.pojo;
importjava.io.Serializable;
publicclassPostimplementsSerializable{
privateintid;
privateUseruser;
privateStringtitle;
privateStringcontent;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicUsergetUser(){
returnuser;
}
publicvoidsetUser(Useruser){
this.user=user;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicStringgetContent(){
returncontent;
}
publicvoidsetContent(Stringcontent){
this.content=content;
}
}
3、配置文件
在这一章节中,要用到的配置文件有两个,一个是mybatis的主配置文件:src/config/Configure.xml和User.java对应的配置文件User.xml,我们先来看看src/config/Configure.xml,其详细配置信息如下:
用于定义一个JavaBean类的别名,如将com.yiibai.pojo.User简写为User,可以认为com.yiibai.pojo.User就是User,User就是com.yiibai.pojo.User。
另外一个配置文件User.xml的内容如下:
SELECTu.*,p.* FROMuseru,postp WHEREu.id=p.useridANDid=#{user_id}
4、测试程序运行
到这里,整个工作准备得已经差不多了,我们创建一个主类来测试上面程序,在src下创建一个Main.java,代码如下:
importjava.io.Reader;
importjava.text.MessageFormat;
importjava.util.List;
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
importcom.yiibai.pojo.Post;
importcom.yiibai.pojo.User;
publicclassMain{
privatestaticSqlSessionFactorysqlSessionFactory;
privatestaticReaderreader;
static{
try{
reader=Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticSqlSessionFactorygetSession(){
returnsqlSessionFactory;
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
SqlSessionsession=sqlSessionFactory.openSession();
try{
intuserid=1;
Useruser=session.selectOne("com.yiibai.userMaper.getUser",1);
System.out.println("username:"+user.getUsername()+",");
Listposts=user.getPosts();
for(Postp:posts){
System.out.println("Title:"+p.getTitle());
System.out.println("Content:"+p.getContent());
}
}finally{
session.close();
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。