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; } publicList getPosts(){ returnposts; } publicvoidsetPosts(List posts){ 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(); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。