MyBatis实现一对一查询

1.封装两个类Emp和Dept

1.1 Emp类

@Data//set/get/toString/hashCode
@Accessors(chain=true)//开启链试加载
@NoArgsConstructor//无参构造
@AllArgsConstructor//有参构造
class Emp implements Serializable{//实现序列化接口
//封装员工属性
private Intrage empId;
private String empName;
private String empSex;
private Dept depts;//把部门封装到员工中,实现一对一查询
}

1.2 Dept类

class Dept{
private Integer deptId;
private String deptNmae;
}

2.准备EmpMapper接口

public interface EmpMapper{//要映射到xml文件中
	List<Emp> findAll();//因为可能查询到多个数据,所以要用几何接收
}

3.创建xml映射文件准备写sql操作数据库

<?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">
        <!-- namespace: 表示的就是你要映射的接口-->
<mapper namespace="com.jt.mapper.EmpMapper">
	<!-- 编写sql语句-->
	<!--这里使用笛卡尔积查询的方式-->
	<!--di:表示的是EmpMapper映射的接口中的方法名字,必须要一直,不然会报xml文件映射错误-->
	<select id="findAll" resultMap="empRM">
		select * from emp e,dept d
		where e.dept_id = d.dept_id
	</select>
	<!--这个id和上面的resultMap的值是相同的
			type就是映射的接口对应的类的类名
			autoMapping 表示的就是自动封装除主键外的数据-->
	<resultMap id="empRM" type="Emp" autoMapping="true">
	<!--id表示emp表中的主键 column表示主键字段  property表示封装的Emp中对应主键的属性名-->
		<id colum="emp_id" property="empId"/>
		<!--association 所关联的Dept那张表  property表示在Emp类中封装的Dept类型的属性名
		 javaType表示的就是在Emp类中封装Dept的这个类名 -->
		<association proper="depts" javaType="Dept">
			<id column="dept_id" property="deptId"/>
			<!--除主键外的字段-->
			<result column="dept_name" property="deptName"/>
		</association>
	</resultMap>
</mapper>

4.核心配置文件

<?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">
<!-- MyBatis核心配置文件-->
<configuration>
<!--这里不再使用
    <settings>
        <!--开启了驼峰映射规则 dept_id 自动映射到 deptId -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.jt.pojo"/>
    </typeAliases>  
  -->
    <!--环境配置标签-->
    <environments default="development">

        <!--编辑开发环境  id 唯一标识-->
        <environment id="development">
            <!--            事务管理器,利用jdbc控制服务-->
            <transactionManager type="JDBC"/>
            <!--            mybatis采用连接池的方式整合数据-->
            <dataSource type="POOLED">
                <!--                高版本的数据库驱动需要添加cj-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/jt?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;allowMultiQueries=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--Mybatis加载Mapper映射文件
        mapper 映射文件是有顺序的 位置不可可随便切换
        通过resource 加载指定的xml映射文件
    -->
    <mappers>
        <mapper resource="mybatis/mapper/EmpMapper.xml"/>
    </mappers>
</configuration>

5.创建测试类TestMapper

//测试类
public class TestMapper{
	SqlSessionFactory build;
	@BeforEach
	public void init(){
		String resource="mybatis/mybatis-config.xml";//核心配置文件
		InputStream inputStream=Resources.getResourceAsStream(resource);
		build=new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void selectOneToOne(){
	SqlSession sqlSession=build.openSession(true);
	EmpMapper mapper=sqlSession.getMapper(EmpMapper.class);
	List<Emp> list=mapper.findAll();
	System.out.println(list);
	sqlSesstion.colse();
	}
}

6.在数据库创建emp和dept两张表

6.1 emp表中的字段,数据自行添加
在这里插入图片描述
6.2dept 表中的字段,数据自行添加
在这里插入图片描述

提示:根据个人的业务流程去写,不能局限性,但总体的流程就这几补

** 改天再更新,一对多;多对一;的增删改查以及前后端整合.关注敬请期待!!!**

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值