java mybatis框架实现多表关系查询功能

基于Maven框架的整体设计 —— 一多一的关系

思路:导入mybatis、mysql、Junit4.13依赖;

编写两个java实体类;

编写sqMapConfig.xml mybatis核心配置文件

编写dao层接口;

编写mapper 映射文件;

编写测试类。

1.导入相关依赖

<!--配置依赖-->
<dependencies>
    <!--配置mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>

    <!--配合mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>

    <!--配置单元测试-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>

2.编写两个java实体类;

Students

package com.mybatis.pojo;

public class Students {

    private Integer sid;
    private String sName;
    private Integer sCid;
    private Cards cards;   //  一多一的关系

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getsName() {
        return sName;
    }

    public void setsName(String sName) {
        this.sName = sName;
    }

    public Integer getsCid() {
        return sCid;
    }

    public void setsCid(Integer sCid) {
        this.sCid = sCid;
    }

    public Cards getCards() {
        return cards;
    }

    public void setCards(Cards cards) {
        this.cards = cards;
    }

    @Override
    public String toString() {
        return "Students{" +
                "sid=" + sid +
                ", sName='" + sName + '\'' +
                ", sCid=" + sCid +
                ", cards=" + cards +
                '}';
    }
}

Cards

package com.mybatis.pojo;

public class Cards {

    private Integer cid;
    private String cnum;

    public Integer getCid() {
        return cid;
    }

    public void setCid(Integer cid) {
        this.cid = cid;
    }

    public String getCnum() {
        return cnum;
    }

    public void setCnum(String cnum) {
        this.cnum = cnum;
    }

    @Override
    public String toString() {
        return "Cards{" +
                "cid=" + cid +
                ", cnum='" + cnum + '\'' +
                '}';
    }
}

3.编写sqMapConfig.xml mybatis核心配置文件

<?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>

    <!--
    配置外部文件properties文件
    -->
    <properties resource="jdbc.properties"></properties>

    <!--配置实体类相对路径 别名-->
    <typeAliases>
        <typeAlias type="com.mybatis.pojo.Students" alias="Stu"></typeAlias>
        <typeAlias type="com.mybatis.pojo.Cards" alias="Car"></typeAlias>
    </typeAliases>

    <!--配置mybatis环境-->
    <environments default="mybatis">
        <environment id="mybatis">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>

    <!--
    配置mapper.xml映射文件
    resource:相对路径
    -->
    <mappers>
        <mapper resource="com.mybatis.dao/studentsDao.xml"></mapper>
        <mapper resource="com.mybatis.dao/CardsDao.xml"></mapper>
        <!--<package name="com.mybatis.dao"></package>-->
    </mappers>
</configuration>

4.编写dao层接口;

package com.mybatis.dao;

import com.mybatis.pojo.Students;

import java.util.List;

public interface StudentsDao {

    // 查询学生信息以及对应的身份证信息
    public List<Students> findAll();
}

还有一个略了;

5.编写mapper 映射文件;

StudentsDao.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">
<!--namespace 值是dao层对应的接口-->
<mapper namespace="com.mybatis.dao.StudentsDao">

    <!--
    配置实体类字段与数据库字段一致
    -->
    <resultMap id="stuMap" type="Stu">
        <id property="sid" column="sid"></id>
        <result property="sName" column="sname"></result>
        <result property="sCid" column="scid"></result>
        <association property="cards" resultMap="com.mybatis.dao.CardsDao.cardsMap"></association>
    </resultMap>

    <!--
    查询学生信息以及对应的身份证信息
    resultMap:实体类与数据库映射的数据类型
    -->
    <select id="findAll" resultMap="stuMap">
        select s.sname,c.cnum from students s,cards c where s.scid=c.cid;
    </select>
</mapper>

CardsDao.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">
<!--namespace 值是dao层对应接口的权限定名-->
<mapper namespace="com.mybatis.dao.CardsDao">
    <!--配置实体类字段与数据库一致-->
    <resultMap id="cardsMap" type="car">
        <!--
        property:实体字段
        column:数据库字段
        -->
        <id property="cid" column="cid"></id>
        <result property="cnum" column="cnum"></result>
    </resultMap>
</mapper>

6.编写测试类

import com.mybatis.dao.StudentsDao;
import com.mybatis.pojo.Students;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMybatis {

    InputStream resource;
    SqlSession session;
    StudentsDao stuDao;
    @Before  // 在test方法之前执行
    public void init() throws IOException {

        // 加载核心配置文件
        resource = Resources.getResourceAsStream("sqMapConfig.xml");
        // 创建sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        // 创建sqlSessionFactory对象
        SqlSessionFactory build = builder.build(resource);
        // 创建Session对象
        session = build.openSession();
        // 执行方法
        stuDao = session.getMapper(StudentsDao.class);

    }
    @After // 在test方法之后执行
    public void close() throws IOException {
        // 关闭资源
        session.close();
        resource.close();
    }

    @Test
    public void test01(){
        List<Students> list = stuDao.findAll();
        for (Students students : list) {
            System.out.println(students);
        }

    }
}

到此这篇关于java mybatis框架实现多表关系查询的文章就介绍到这了,更多相关java mybatis多表关系查询内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java工程mybatis实现多表查询过程详解

    1.先做一些准备工作 我们首先在创建一个 java 工程,还需要创建两张表,它们分别是用户表 user,和帖子表 post,一个户用户可以有多个帖子. user表的结构和数据: -- ---------------------------- -- Table structure for `user` -- ---------------------------- CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT

  • Java MyBatis 多表查询详解

    目录 多表查询: 一对一: 一对多: 多对多: 总结 多表查询: 学生表.班级表.课程表.班级课程表 一对一: 一个学生只属于一个班级. 查询: id  name  age  gender   banjiName SELECT s.id,s.`name`,s.age,s.gender,b.id AS banjiId,b.name AS banjiName FROM student AS s INNER JOIN banji AS b ON s.banji_id=b.id; MyBatis中使用a

  • Java的MyBatis框架中实现多表连接查询和查询结果分页

    实现多表联合查询 还是在david.mybatis.model包下面新建一个Website类,用来持久化数据之用,重写下相应toString()方法,方便测试程序之用. package david.mybatis.model; import java.text.SimpleDateFormat; import java.util.Date; public class Website { private int id; private String name; private int visito

  • java mybatis框架实现多表关系查询功能

    基于Maven框架的整体设计 -- 一多一的关系 思路:导入mybatis.mysql.Junit4.13依赖: 编写两个java实体类: 编写sqMapConfig.xml mybatis核心配置文件 编写dao层接口: 编写mapper 映射文件: 编写测试类. 1.导入相关依赖 <!--配置依赖--> <dependencies> <!--配置mybatis--> <dependency> <groupId>org.mybatis</

  • MyBatis Plus 实现多表分页查询功能的示例代码

    在Mybatis Plus 中,虽然IService 接口帮我们定义了很多常用的方法,但这些都是 T 对象有用,如果涉及到 多表的查询,还是需要自定义Vo 对象和自己编写sql 语句,Mybatis Plus提供了一个Page 对象,查询是需要设置其中的 size 字段 和 current 字段的值 一.分页配置 可以直接使用selectPage这样的分页,但返回的数据确实是分页后的数据,但在控制台打印的SQL语句其实并没有真正的物理分页,而是通过缓存来获得全部数据中再进行的分页,这样对于大数据

  • Java Mybatis框架多表操作与注解开发详解分析

    目录 一对一查询 多对多查询 Mybatis的注解开发 Mybatis的增删查改 MyBatis的注解实现复杂映射开发 一对一查询 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户. 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 一对一查询的语句 对应的sql语句: select * from orders o,user u where o.uid=u.id;查询的结果如下: 创建Order和User实体 创建OrderMapper接口 p

  • Java Mybatis框架增删查改与核心配置详解流程与用法

    目录 Mybatis简介 Mybatis开发步骤: Mybatis的映射文件概述 Mybatis的增删改查操作 MyBatis的核心配置文件概述 MyBatis核心配置文件层级关系 MyBatis常用配置解析 Mybatis相应API 原始JDBC操作 原始jdbc操作(查询数据) 原始jdbc操作(插入数据) 原始jdbc操作的分析原始jdbc开发存在的问题如下: ①数据库连接创建.释放频繁造成系统资源浪费从而影响系统性能 ②sql 语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可

  • Java Mybatis框架入门基础教程

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

  • Java Mybatis框架Dao层的实现与映射文件以及核心配置文件详解分析

    目录 Mybatis的Dao层实现 传统开发方式 代理开发方式 MyBatis映射文件深入 动态sql语句 动态SQL之<if> 动态SQL之<foreach> SQL片段抽取 总结 Mybatis核心配置文件深入 typeHandlers标签 plugins标签 总结 Mybatis的Dao层实现 传统开发方式 1.编写UserDao接口 public interface UserMapper { public List<User> findAll() throws

  • Java Mybatis框架由浅入深全解析中篇

    目录 前言 添加框架的步骤 在idea中添加数据库的可视化 添加jdbc.properties属性文件(数据库配置) 添加SqlMapCongig.xml 创建实体类Student用来封装数据 添加增删改查 创建测试类进行功能测试 总结 前言 上一篇我们了解了框架相关知识,并且导入依赖配置了核心文件,今天就可以开始写代码测试了. 添加框架的步骤 在idea中添加数据库的可视化 这里需要注意:很多小伙伴链接不成功,这个时候要修改一下自己的驱动版本,尽量与数据库版本一致 添加jdbc.propert

  • Java MyBatis框架环境搭建详解

    目录 一.MyBatis简介 1.MyBatis历史 2.MyBatis特性 3.MyBatis下载 4.和其它持久化层技术对比 JDBC Hibernate 和 JPA MyBatis 二.搭建MyBatis 1.开发环境 2.创建maven工程 3.创建MyBatis的核心配置文件 4.创建mapper接口 5.创建MyBatis的映射文件 6.通过junit测试功能 7.加入log4j日志功能 一.MyBatis简介 1.MyBatis历史 MyBatis最初是Apache的一个开源项目i

  • java mybatis框架配置详解

    一个框架的使用,必然离不开其中的组件支持.我们在下载完mybatis框架后,因为大部分的内部结构还没有启动,就要手动的对其进行配置.在之前有提到,mybatis框架的作用就有数据库方面的,所以本篇文章带来了数据库和sql方面的配置方法,大家一起往下面看看具体操作. 1.配置数据库 创建mybatis的配置文件,配置数据库的信息.数据库我们可以配置多个,但是默认的只能用一个. <?xml version="1.0" encoding="UTF-8"?> &

  • Java Mybatis框架由浅入深全解析上篇

    目录 学习路线 什么是三层架构 常用的SSM框架(了解) 什么是框架 什么是Mybatis框架 添加框架的步骤 1.新建库建表 2.新建maven项目 3.修改目录 4.修改pom.xml文件 5.修改pom.xml文件 总结 学习路线 什么是三层架构 在项目开发中,遵循一种形式模式,分为三层. 界面层: 用来接收客 户端的输入,调用业务逻辑层进行功能处理,返回结果给客户端.过去的servlet就是界面层的功能. **业务逻辑层:**用来进行整个项目的业务逻辑处理,向上为界面层提供处理结果,向下

随机推荐