mybatis ----数据级联查询(多对一)
2014-03-25 10:12
435 查看
工程的目录结构:
有两个表,一个文章表article ,一个用户表user。
现在就来贴下相关的JAVA代码和映射文件吧,该说的都在注释里了。
User.java
Article.java
接口类
IUserDao.java
总配置文件configution.xml
User.xml
总后,编写个测试类.
运行后结果如下:
有两个表,一个文章表article ,一个用户表user。
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语句如下:
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
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
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
package com.mybatis.dao; import java.util.List; import com.mybatis.model.Article; public interface IUserDao { public List<Article> getUserArticles(int id); }
总配置文件configution.xml
<?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
<?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>
总后,编写个测试类.
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(); } } }
运行后结果如下:
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 ----数据级联查询(多对一)
- Mybatis 级联查询时只查出了一条数据
- Mybatis 分页查询数据(借用map来封装参数)
- MyBatis的级联查询(两种方式)
- mybatis学习之一对多查询如何避免只查出一条数据
- mybatis学习笔记三(实现关联数据的查询)
- mybatis ---- 级联查询 一对多 (集合映射)
- MySQL数据导出、删除、表重命名、时间转化及级联查询
- Mybatis应用mysql存储过程查询数据实例
- mybatis 一对一查询 出现一条数据总结
- MyBatis动态传入表名查询数据
- 使用MyBatis(二)使用java注解查询单行数据
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- mybatis 级联查询
- Mybatis like 模糊查询,有数据,但是就是查询不出来
- mybatis 一对多分页查询数据条数不匹配解决
- [已解决]mybatis联合查询能查询到数据,但不能绑定到bean上去的问题
- mybatis 关联数据的查询 多对一 一对多
- MySQL数据导出、删除、表重命名、时间转化及级联查询
- mysql 三个表级联查询,以主表为主数据表为辅