对于mybatis 的一对多,还以多对一,其实是找那个站在不同的角度来思考的问题,本质给我的感觉,才不多
<?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="org.com.dao.userMapper"> <!-- User 级联文章查询 方法配置 (多个文章对一个用户) --> <resultMap type="Post" id="resultPostsMap"> <result property="id" column="post_id" /> <result property="title" column="title" /> <result property="content" column="content" /> <association property="user" javaType="User"> <id property="id" column="userid"/> <result property="username" column="username"/> <result property="mobile" column="mobile"/> </association> </resultMap> <select id="getPosts" resultMap="resultPostsMap" parameterType="int"> SELECT u.*,p.* FROM user u, post p WHERE u.id=p.userid AND p.post_id=#{post_id} </select> </mapper>
总结
mybatis 一对多 collection 直接将post的外键 放在collection里面, mybatis 会自己识别
后面id接post表的主键
<collection property="posts" ofType="org.com.model.Post" column="userid">
<id property="id" column="post_id" javaType="int" jdbcType="INTEGER"/> 主键
mybatis 多对一 association,里面不用什么,他会直接,将user 表的主键,作为post的外建
然后申明post表里面那个是外建
<association property="user" javaType="User"> <id property="id" column="userid"/>
,。。。。。
在test类里,值得说说的是,直接应用的是selectOne()
我没有建立PostMappper,所以不能再用getMappper()
public class Test { private static SqlSessionFactory sqlFactory; private static Reader reader; static { try { reader = Resources.getResourceAsReader("config/mybatis-config.xml"); sqlFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { // TODO: handle exception } } public static SqlSessionFactory getSession(){ return sqlFactory; } public static void main(String[] args) { SqlSession session = getSession().openSession(); try { // postMapper posts=session.getMapper(postMapper.class); // Post p=posts.getPosts(1); // System.out.println(p.getUser().getMobile()); Post p=session.selectOne("org.com.dao.userMapper.getPosts",1); System.out.println(p.getUser().getMobile()); } catch (Exception e) { // TODO: handle exception } finally { session.close(); } } } // Resources SqlSessionFactoryBuilder SqlSessionFactory SqlSession
原文 http://www.yiibai.com/mybatis/mybatis-many2one.html