Mybatis級聯查詢
阿新 • • 發佈:2017-10-31
username tac 實現 數據 配置 級聯查詢 builder java 3.0
轉自:http://blog.csdn.net/yulei_qq/article/details/22039815
工程的目錄結構:
有兩個表,一個文章表article ,一個用戶表user。
[sql] view plain copy
- 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 DEFAULT CHARSET=utf8;
- insert into article(id,userid,title,content) values(1,1,‘test_title‘,‘text_content‘);
- insert into article(id,userid,title,content) values(2,1,‘test_title_2‘,‘text_content_2‘);
- insert into article(id,userid,title,content) values(3,1,‘test_title_3‘,‘text_content_3‘);
- insert into article(id,userid,title,content) values(4,1,‘test_title_4‘,‘text_content_4‘);
- create table user (id int(11) not null auto_increment,
- userName varchar(50) default null,
- userAge int(11) default null,
- userAddress varchar(200) default null,
- primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- insert into user(id,userName,userAge,userAddress) values(1,‘summer‘,‘100‘,‘上海‘);
現在要查詢,根據用戶的ID來查詢他所擁有的文章。那麽需要編寫SQL語句如下:
[sql] view plain copy- select a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content
- from user a,article b
- where a.id=b.userid and a.id=#{id}
現在就來貼下相關的JAVA代碼和映射文件吧,該說的都在註釋裏了。
User.java
[java] view plain copy
- package com.mybatis.model;
- public class User {
- private int id;
- private String userName;
- private String userAge;
- private String userAddress;
- 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 getUserAge() {
- return userAge;
- }
- public void setUserAge(String userAge) {
- this.userAge = userAge;
- }
- public String getUserAddress() {
- return userAddress;
- }
- public void setUserAddress(String userAddress) {
- this.userAddress = userAddress;
- }
- }
Article.java
[java] view plain copy
- package com.mybatis.model;
- public class Article {
- private int id;
- private User user; //文章的用戶定義一個User對象,而不是int 類型
- 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;
- }
- }
接口類
IUserDao.java
[java] view plain copy
- package com.mybatis.dao;
- import java.util.List;
- import com.mybatis.model.Article;
- public interface IUserDao {
- public List<Article> getUserArticles(int id);
- }
總配置文件configution.xml
[html] view plain copy
- <?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 type="com.mybatis.model.User" alias="User"/>
- <typeAlias type="com.mybatis.model.Article" alias="Article"/>
- </typeAliases>
- <!-- 數據源配置,這裏用MySQL數據庫 -->
- <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="123456"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <!-- book.xml裝載進來,等同於把Dao的實現類裝載進來 -->
- <mapper resource="com/mybatis/model/User.xml"/>
- </mappers>
- </configuration>
User.xml
[html] view plain copy
- <?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.mybatis.dao.IUserDao">
- <!-- User聯合Article進行查詢 (多對一的方式)-->
- <resultMap type="Article" id="resultUserArticleList">
- <id property="id" column="aid"/>
- <result property="title" column="title"/>
- <result property="content" column="content"/>
- <!--關聯一個用戶 ,如果是關聯多個的話,就需要用collection了-->
- <association property="user" javaType="User"> <!-- 這個 property="user" 對應的是Article中的User 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 a.id, a.userName ,a.userAddress ,b.id aid, b.title,b.content
- from user a,article b
- where a.id=b.userid and a.id=#{id}
- </select>
- </mapper>
總後,編寫個測試類.
[java] view plain copy
- package com.mybatis.test;
- import java.io.IOException;
- 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.mybatis.dao.IUserDao;
- import com.mybatis.model.Article;
- public class Test {
- /***
- * 獲得MyBatis SqlSessionFactory
- * SqlSessionFactory 負責創建SqlSession ,一旦創建成功,就可以用SqlSession實例來執行映射語句
- * ,commit,rollback,close等方法
- * @return
- */
- private static SqlSessionFactory getSessionFactory(){
- SqlSessionFactory sessionFactory=null;
- String resource="configuration.xml";
- try {
- sessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
- } catch (IOException e) {
- e.printStackTrace();
- }
- return sessionFactory;
- }
- /**
- * main 方法
- * @param args
- */
- public static void main(String[] args) {
- SqlSession session=getSessionFactory().openSession();
- try {
- IUserDao userDao=session.getMapper(IUserDao.class);
- //傳入用戶的id=1
- List<Article> listArticle=userDao.getUserArticles(1);
- for(Article article:listArticle){
- System.out.println(article.getTitle()+":"+article.getContent()+
- ":作者是:"+article.getUser().getUserName()+":地址:"+
- article.getUser().getUserAddress());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- finally{
- session.close();
- }
- }
- }
運行後結果如下:
[java] view plain copy
- test_title:text_content:作者是:summer:地址:上海
- test_title_2:text_content_2:作者是:summer:地址:上海
- test_title_3:text_content_3:作者是:summer:地址:上海
- test_title_4:text_content_4:作者是:summer:地址:上海
Mybatis級聯查詢