欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis的入门之多表查询的多对多

程序员文章站 2022-05-24 10:26:59
...

IDEA的创建Maven
mybatis的入门之多表查询的多对多
点击下一步
mybatis的入门之多表查询的多对多
输入完成后,点击下一步,在点击完成就ok了
并且在pom.xml里面导入关系依赖坐标
mybatis的入门之多表查询的多对多
创建目录结构
mybatis的入门之多表查询的多对多
mybatis的入门之多表查询的多对多
mybatis的入门之多表查询的多对多
      所以我们要创建,2个实体类User和Role 实体类的属性名称都对应数据库的列名称 并且创建get和set 和重写toString 方法。
注意(实体类都要 实现Serializable(序列化))

User实体类

package com.itmei.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
        private Integer id;
        private String username;
        private String address;
        private String sex;
        private Date birthday;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                ", sex='" + sex + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}

Role实体类

package com.itmei.domain;

import java.io.Serializable;

public class Role implements Serializable {
    private  Integer roleId;
    private String roleName;
    private String roleDesc;

    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public String getRoleDesc() {
        return roleDesc;
    }

    public void setRoleDesc(String roleDesc) {
        this.roleDesc = roleDesc;
    }

    @Override
    public String toString() {
        return "Role{" +
                "roleId=" + roleId +
                ", roleName='" + roleName + '\'' +
                ", roleDesc='" + roleDesc + '\'' +
                '}';
    }
}

在实体类Role中加入 映射关系
mybatis的入门之多表查询的多对多
编写Role接口
mybatis的入门之多表查询的多对多
(前提你要在resources下创建和java目录下的接口包一样)
mybatis的入门之多表查询的多对多
RoleDao.xml 编写映射文件
mybatis的入门之多表查询的多对多
     我这里标签导错了,反正遇到这个问题记得点击刷新,在这里我们用mapper标签 里面有个属性namespace用于指定Dao的
mybatis的入门之多表查询的多对多
mybatis的入门之多表查询的多对多
mybatis的入门之多表查询的多对多
collection标签当然可以一对多或多对多。

配置文件SqlMapperConfig.xml

      我们在resources下创建SqlMapperConfig.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">
<!--mybatis的主配置文件-->
<configuration>
    <!--用于配置外部资源 这个位置要再前面 -->
    <properties resource="jdbcConfig.properties"></properties>

    <!--配置typeAliases标签:注册实体类的别名 (实体类的别名就是类的名称不区分大小写)-->
    <typeAliases>
        <package name="com.itmei.domain"/>
    </typeAliases>
    <!--配置环境-->
    <environments default="mysql">
        <!--mysql的环境-->
        <environment id="mysql">
            <!--事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源-->
            <dataSource type="POOLED">
                <!--数据库的基本信息-->
                <property name="driver" value="${jdbc.driver}"/> <!--这里的value引用外部信息${}里面的值要和外置信息的key名称一样-->
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--mapper的映射-->
    <mappers>
        <!--使用package标签:注册dao下的所有接口-->
        <package name="com.itmei.dao"/>
    </mappers>
</configuration>

外置数据库配置文件信息:
mybatis的入门之多表查询的多对多
编写测试类:
mybatis的入门之多表查询的多对多
创建RoleTest的测试类

package com.itmei.Test;

import com.itmei.dao.RoleDao;
import com.itmei.domain.Role;
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 RoleTest {
    private InputStream in;
    private SqlSession session;
    private  RoleDao roleDao;
        @Before//在测试方法执行前运行
        public void init() throws Exception {
            //1.读取配置
             in= Resources.getResourceAsStream("SqlMapConfig.xml");
            //2.创建构建者
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            //3.创建Sqlsession工厂对象
            SqlSessionFactory factory = builder.build(in);
            //4.创建Sqlsession对象
             session = factory.openSession(); //也可以在openSession里面放true ,也是提交的意思
            //5.创建Dao的代理对象
             roleDao = session.getMapper(RoleDao.class);
        }
        @After//在测试方法执行后运行
        public void end() throws Exception {
            //7.提交事务
            session.commit();
            //8.释放资源
            session.close();
            in.close();
        }


    /**
     * 查询角色同时获取用户信息
     * @throws Exception
     */
    @Test
    public void testFindAll() throws  Exception{
        List<Role> roles=roleDao.findAll();
        for (Role role:roles){
            System.out.println("-----每一个用户信息--------");
            System.out.println(role);
            System.out.println(role.getUsers());

        }

    }
}

测试结果:
mybatis的入门之多表查询的多对多
把获取用户信息的关了就,只查询出职位
mybatis的入门之多表查询的多对多
log4j.properties 这个是日志的配置
有他就可以看见运行的日志信息
mybatis的入门之多表查询的多对多

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n


这个问题是没有上面的log4j.properties 这个是日志的配置
mybatis的入门之多表查询的多对多

相关标签: java开发知识