JavaEE:MyBatis一对一插入与查询

本文介绍如何使用MyBatis实现Java对象的一对一关系映射,包括创建Adress和User类,定义AdressMapper和UserMapper接口,配置AdressMapper.xml和UserMapper.xml文件,以及插入和查询数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:

2张表,User表存有Adress表的主键ID值adress_id;

2个类,User类内部有Adress类型的变量adress。

二者一对一关系。

主要依赖jar包:mybatis-x.x.x.jar、mysql-connector-java-x.x.x.jar
其他依赖jar包:ant-x.x.x.jar、ant-launcher-x.x.x.jar、asm-x.x.jar、cglib-x.x.xx.jar、commons-logging-x.x.jar、javassist-x.x.x-GA.jar、log4j-x.x.x.jar、log4j-api-x.x.x.jar、log4j-core-x.x.x.jar、ognl-x.x.x.jar、slf4j-api-x.x.x.jar、slf4j-log4j12-x.x.x.jar

一、创建一对一的2个类:

1.Adress类:

//地址类,与User一对一关系
public class Adress {
    public Integer id;
    public String name;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

2.User类:

//用户类,与Adress一对一关系
public class User {
    public Integer id;
    public String name;
    public Adress adress;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Adress getAdress() {
        return adress;
    }
    public void setAdress(Adress adress) {
        this.adress = adress;
    }
}

二、创建两者的Dao接口:

1.AdressMapper接口:

//Adress的dao接口
public interface AdressMapper {
    public void insert(Adress adress); //插入Adress数据
}

2.UserMapper接口:

//User的dao接口
public interface UserMapper {
    public void insert(User user); //插入User数据
    public User query(User user);  //查询,会将Adress也一起查出来
}

三、配置对象映射文件:

1.AdressMapper.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">
<!-- AdressMapper为dao接口 -->
<mapper namespace="com.yyh.hkw.dao.AdressMapper">
    <!-- 插入数据sql -->
    <insert id="insert" parameterType="com.yyh.hkw.domain.Adress">
        insert into adress(id,name) values(#{id}, #{name})
    </insert>
</mapper>

2.UserMapper.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">
<!-- UserMapper为User的dao接口 -->
<mapper namespace="com.yyh.hkw.dao.UserMapper">
    <!-- 插入User数据 -->
    <insert id="insert" parameterType="com.yyh.hkw.domain.User">
        insert into user(id,name,adress_id) values(#{id}, #{name}, #{adress.id})
    </insert>

    <!-- 一对一查询User数据,会将adres属性值也查出来 -->
    <resultMap type="com.yyh.hkw.domain.User" id="user">
        <!-- User属性与列名配置 -->
        <id property="id" column="id" />
        <result property="name" column="name" />
        <!-- association配置一对一关系,property为User中属性名,javaType为属性类型 -->
        <association property="adress" javaType="com.yyh.hkw.domain.Adress">
            <!-- Adress属性与列名配置,adress_id为查询user表的列名,adress为查出的列名(自定义列名) -->
            <id property="id" column="adress_id" />
            <result property="name" column="adress" />
        </association>
    </resultMap>
    <!-- 一对一查询,同时查出Adress信息 -->
    <select id="query" parameterType="com.yyh.hkw.domain.User" resultType="com.yyh.hkw.domain.User" resultMap="user">
        select u.id, u.name, u.adress_id, a.name adress from user u left join adress a on(u.adress_id = a.id) where u.id=#{id};
    </select>
</mapper>

3.mybatis-config.xml中加载以上2个配置文件:

<mappers>
    <!-- 类扫描,自动加载对象映射配置文件 -->
    <mapper class="com.yyh.hkw.dao.AdressMapper" />
    <mapper class="com.yyh.hkw.dao.UserMapper" />
</mappers>

四、插入与查询数据:

1.创建SqlSession工厂类:

private static SqlSessionFactory sFactory;
static {
    try {
        // 1.获取mybatis-config.xml输入流
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        // 2.创建SqlSession工厂类
        sFactory = new SqlSessionFactoryBuilder().build(in);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.插入数据:

(1)插入Adress数据:

public void insertAdress() throws IOException {
    // 1.创建SqlSession,openSession(true)为开启自动提交事务
    SqlSession session = sFactory.openSession(true);
		
    // 2.获取Dao代理类
    AdressMapper dao = session.getMapper(AdressMapper.class);

    Adress adress = new Adress();
    adress.id = 1;
    adress.name = "北京";

    // 3.执行插入语句
    dao.insert(adress);
		
    // 4.关闭连接
    session.close();
}

(2)插入User数据,将Adress的id属性一起插入user表:

public void insertUser() throws IOException {
    // 1.创建SqlSession,openSession(true)为开启自动提交事务
    SqlSession session = sFactory.openSession(true);
		
    // 2.获取Dao代理类
    UserMapper dao = session.getMapper(UserMapper.class);

    User user = new User();
    user.id = 1;
    user.name = "任先生";
    Adress adress = new Adress();
    adress.id = 1;
    adress.name = "北京";
    user.adress = adress;

    // 3.执行插入语句
    dao.insert(user);
		
    session.close();
}

3.查询User数据,将Adress一起查询出来:

public void queryUser() throws IOException {
    // 1.创建SqlSession,openSession(true)为开启自动提交事务
    SqlSession session = sFactory.openSession();
		
    // 2.获取Dao代理类
    UserMapper dao = session.getMapper(UserMapper.class);
		
    User param = new User();
    param.id = 1;
		
    // 3.执行查询语句
    User result = dao.query(param);
		
    // 4.关闭连接
    session.close();
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值