MyBatis: 获取一个用户的所有blog的基础上讲一下如何获取一篇文章机器作者的信息。

这次是在MyBatis: 获取一个用户的所有blog的基础上讲一下如何获取一篇文章机器作者的信息。

修改letian.mybatis.bean下的Blog.java

将其内容修改为:

package letian.mybatis.bean;

public class Blog {
    private int id;
    private int ownerId;
    private String title;
    private String content;

    private User user;  // 新添加

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public int getOwnerId() {
        return ownerId;
    }

    public void setOwnerId(int ownerId) {
        this.ownerId = ownerId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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;
    }

    @Override
    public String toString() {
        return "Blog{" +
                "id=" + id +
                ", ownerId=" + ownerId +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", user=" + user +
                '}' + '\n';
    }
}

可以看到,新增加了User类型的user属性,并为user属性添加了setter和getter方法。toString()方法也略做修改。

在letian.mybatis.dao下新建BlogMapper.java

其内容如下:

package letian.mybatis.dao;


import letian.mybatis.bean.Blog;

public interface BlogMapper {

    Blog findById(int id);
}

在letian.mybatis.mapper下新建BlogMapper.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="letian.mybatis.dao.BlogMapper">

    <resultMap id="blogResult" type="letian.mybatis.bean.Blog">
        <result property="id" column="blog_id"/>
        <result property="ownerId" column="user_id"/>
        <result property="title" column="blog_title"/>
        <result property="content" column="blog_content"/>

        <association property="user" javaType="letian.mybatis.bean.User">
            <id property="id" column="user_id"/> <!-- 用result也可以 -->
            <result property="name" column="user_name"/>
            <result property="email" column="user_email"/>
            <result property="password" column="user_password"/>
        </association>

    </resultMap>

    <select id="findById" parameterType="Integer" resultMap="blogResult" resultType="letian.mybatis.bean.Blog">
        SELECT
        blog.id AS blog_id,
        blog.title AS blog_title,
        blog.content AS blog_content,
        user.id AS user_id,
        user.name AS user_name,
        user.email AS user_email,
        user.password AS user_password
        FROM blog, user WHERE blog.id = #{id} and user.id=blog.owner_id;
    </select>

</mapper>

这个的配置原理和浅入浅出MyBatis(08):获取一个用户的所有blog是类似的。由于blog对user是一对一的关系,所以没有使用<collection></collection>,而是使用了<association></association>

修改Main.java

将Main.java内容修改为:

import java.io.IOException;

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 letian.mybatis.bean.User;
import letian.mybatis.bean.Blog;
import letian.mybatis.dao.UserMapper;
import letian.mybatis.dao.BlogMapper;


public class Main {

    public static void main(String[] args) throws IOException {

        SqlSessionFactory sessionFactory;
        sessionFactory = new SqlSessionFactoryBuilder()
                .build(Resources.getResourceAsReader("mybatis-config.xml"));

        SqlSession sqlSession = sessionFactory.openSession();

//        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//        User user = userMapper.findById(1);
//        System.out.println(user);

        BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class);
        Blog blog = blogMapper.findById(1);
        System.out.println(blog);

        sqlSession.close();
    }
}

执行

执行Main.java,结果如下:

Blog{id=1, ownerId=1, title='标题1', content='文本1', user=User{id=1, name='letian', email='letian@111.com', password='123'
, blogs=null}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值