精华内容
下载资源
问答
  • 比如:查第一页,查询10条数据,却只得到三条,因为那七条数据mybatis进行了一对多映射,一个对七个,所以只有三条数据了 原sql <select id="sparePartsManagement" resultMap=...

    1. 其实这个问题仔细一想也没什么

    1.首先使用PageHelper单表没有问题
    2.连表查询不牵扯到一对多也没有问题
    3.连表查询牵扯到一对多分页错误:

    比如:查第一页,查询10条数据,却只得到三条,因为那七条数据mybatis进行了一对多映射,一个对七个,所以只有三条数据了

    原sql

    <select id="sparePartsManagement" resultMap="sparePartsManagementResultMap">
            select r.SAP_NO rSAP_NO,
            s.CONSIGNEE sCONSIGNEE,s.SHIPPING_ADDRESS sSHIPPING_ADDRESS,s.COMPANY sCOMPANY,
            s.ID sID,s.PHONE sPHONE,s.DESR sDESR,
            e.EXPRESS_NO eEXPRESS_NO,e.ID eID
            from spares_requirement s
            left join repair_product r on  r.ID = s.REPAIR_PRODUCT_ID and r.IS_DEL = 0
            left join express e on  r.ID = e.REPAIR_PRODUCT_ID and e.IS_DEL = 0
            <where>
                s.IS_DEL = 0
    <!--            and r.IS_DEL = 0 and e.IS_DEL = 0-->
                <if test="consignee != null and consignee != ''">
                    and s.CONSIGNEE = #{consignee}
                </if>
                <if test="sapNo != null and sapNo != ''">
                    and r.SAP_NO = #{sapNo}
                </if>
                <if test="expressNo != null and expressNo != ''">
                    and e.EXPRESS_NO = #{expressNo}
                </if>
            </where>
        </select>
        <resultMap id="sparePartsManagementResultMap" type="com.santank.domain.vo.VoSparePartsManagement">
            <result property="id" column="sID"/>
            <result property="sapNo" column="rSAP_NO"/>
            <result property="consignee" column="sCONSIGNEE"/>
            <result property="shippingAddress" column="sSHIPPING_ADDRESS"/>
            <result property="company" column="sCOMPANY"/>
            <result property="phone" column="sPHONE"/>
            <result property="desr" column="sDESR"/>
            <collection property="expressList" ofType="com.santank.domain.vo.VoExpress">
                <result property="id" column="eID"/>
                <result property="expressNo" column="eEXPRESS_NO"/>
            </collection>
        </resultMap>
    

    因为PageHelper默认查询下面的第一条数据,因为collection进行了一对多映射,所有数据分页不对,所有我们将collection sql部分拆开来,让collection去查另外一个sql,然后在对应相应的resultMap即可。

    因为collection导致的错误,所有我们将collection部分拆开单独写sql,sql需要的连接其他表的字段值我们带过来即可

    新的写法

    <select id="selectExpressRepair_product" resultMap="expressRepair_productMap">
        select
        e.EXPRESS_NO eEXPRESS_NO,e.ID eID
        from  express e
        where e.REPAIR_PRODUCT_ID = #{id}
    </select>
    
    <select id="sparePartsManagement" resultMap="sparePartsManagementResultMap">
        select r.SAP_NO rSAP_NO,r.ID rID,s.CONSIGNEE sCONSIGNEE,s.SHIPPING_ADDRESS sSHIPPING_ADDRESS,s.COMPANY sCOMPANY,
        s.ID sID,s.PHONE sPHONE,s.DESR sDESR
        from repair_product r
        left join spares_requirement s on  r.ID = s.REPAIR_PRODUCT_ID and r.IS_DEL = 0
        <where>
            r.IS_DEL = 0
            <if test="consignee != null and consignee != ''">
                and s.CONSIGNEE = #{consignee}
            </if>
            <if test="sapNo != null and sapNo != ''">
                and r.SAP_NO = #{sapNo}
            </if>
           <!-- <if test="expressNo != null and expressNo != ''">
                and e.EXPRESS_NO = #{expressNo}
            </if>-->
        </where>
    </select>
    <resultMap id="sparePartsManagementResultMap" type="com.santank.domain.vo.VoSparePartsManagement">
        <result property="id" column="rID"/>
        <result property="sapNo" column="rSAP_NO"/>
        <result property="consignee" column="sCONSIGNEE"/>
        <result property="shippingAddress" column="sSHIPPING_ADDRESS"/>
        <result property="company" column="sCOMPANY"/>
        <result property="phone" column="sPHONE"/>
        <result property="desr" column="sDESR"/>
        <collection property="expressList" ofType="com.santank.domain.vo.VoExpress" select="selectExpressRepair_product" column="rID">
           <!-- <result property="id" column="eID"/>
            <result property="expressNo" column="eEXPRESS_NO"/>-->
        </collection>
    </resultMap>
    <resultMap id="expressRepair_productMap" type="com.santank.domain.vo.VoExpress">
        <result property="id" column="eID"/>
        <result property="expressNo" column="eEXPRESS_NO"/>
    </resultMap>
    
    
    
    

    PageHelper分页出现问题主要就是mybatis一对多出现问题,连表查询并不会出现分页错误,但是连表查询牵扯到一对多就会出现分页错误,所以我们只要将collection部分单独拆出来写sql就行了,就像上面的写法即可,需要连接的字段值参数使用column带过去就行了。

    展开全文
  • MyBatis一对多和多对一

    万次阅读 多人点赞 2013-10-29 23:40:22
    在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。...
         在学习MyBatis3的过程中,文档上面一直在强调一个id的东西!在做这个实验的时候,也因为没有理解清楚id含义而导致一对多的“多”中也只有一条数据。id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。所以不同数据的id应该唯一区别,不然导致数据结果集只有一条数据。
    

    一、表


    二、实体

    1.person

    package com.kerwin.mybatis.pojo;
    
    import java.util.List;
    
    public class Person {
    
    	private int id;
    	private String name;
    	private List<Orders> orderList;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public List<Orders> getOrderList() {
    		return orderList;
    	}
    
    	public void setOrderList(List<Orders> orderList) {
    		this.orderList = orderList;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", name=" + name + "]";
    	}
    
    	public Person() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Person(int id, String name, List<Orders> orderList) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.orderList = orderList;
    	}
    
    }
    

    2.order


    package com.kerwin.mybatis.pojo;
    
    public class Orders {
    	private int id;
    	private double price;
    	private Person person;
    	
    	
    	
    	public Person getPerson() {
    		return person;
    	}
    
    	public void setPerson(Person person) {
    		this.person = person;
    	}
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    
    
    	public double getPrice() {
    		return price;
    	}
    
    	public void setPrice(double price) {
    		this.price = price;
    	}
    
    
    	
    
    	@Override
    	public String toString() {
    		return "Orders [id=" + id + ", price=" + price + "]";
    	}
    
    	public Orders() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    }
    

    三、映射mapper文件

    1. PersonMapper.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="com.kerwin.mybatis.pojo.Person">
    	<resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">
    		<id column="p_id" property="id"/>
    		<result column="name" property="name"/>
    		<collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">
    			<id column="o_id" property="id"/>
    			<result column="price" property="price"/>
    		</collection>
    		
    	</resultMap>
    	
    	<select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >
    		select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
    	</select>
    	
    	
    </mapper>

    2.     OrdersMapper.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="com.kerwin.mybatis.pojo.Orders">
    	<resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">
    		<id column="o_id" property="id"/>
    		<result column="price" property="price"/>
    		<association property="person" javaType="com.kerwin.mybatis.pojo.Person">
    			<id column="p_id" property="id"/>
    			<result column="name" property="name"/>
    		</association>
    	</resultMap>
    	
    	<select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">
    		select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id} 
    	</select>
    
    </mapper>

    3.sqlMapConfig.xml

    <?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>
    
    <typeAliases>
    	<typeAlias type="com.kerwin.mybatis.pojo.Author" alias="Author"/>
    </typeAliases>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
    	<mapper resource="com/kerwin/mybatis/pojo/AuthorMapper.xml"/>
    	<mapper resource="com/kerwin/mybatis/pojo/PostMapper.xml"/>
    	<mapper resource="com/kerwin/mybatis/pojo/PersonMapper.xml"/>
    	<mapper resource="com/kerwin/mybatis/pojo/OrdersMapper.xml"/>
      </mappers>
    </configuration>

    四。测试类

    /**
     * 
     */
    package com.kerwin.mybatis.test;
    
    import java.io.InputStream;
    
    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.BeforeClass;
    import org.junit.Test;
    
    import com.kerwin.mybatis.pojo.Orders;
    import com.kerwin.mybatis.pojo.Person;
    
    /**
     * @author Administrator
     * 
     */
    public class PersonAndOrderTest {
    
    	private static SqlSessionFactory sessionFactory;
    	
    	/**
    	 * @throws java.lang.Exception
    	 */
    	@BeforeClass
    	public static void setUpBeforeClass() throws Exception {
    		SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
    		InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
    		sessionFactory = factoryBuilder.build(inputStream);
    
    	}
    	
    	//一对多,查询person(一)级联查询订单order(多)
    	@Test
    	public void testSelectPersonFetchOrder() throws Exception {
    		SqlSession session = sessionFactory.openSession();
    		Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);
    		System.out.println(person);
    		System.out.println(person.getOrderList().size());
    		for(Orders orders : person.getOrderList()){
    			System.out.println(orders);
    		}
    		session.close();
    	}
    	
    	//多对一,查询订单order(多)级联查询person(一)
    	@Test
    	public void testSelectOrdersFetchPerson() throws Exception{
    		SqlSession session = sessionFactory.openSession();
    		Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);
    		System.out.println(orders);
    		System.out.println(orders.getPerson());
    		session.close();
    	}
    	
    }
    

    五、测试结果

    1.一对多,查询person(一)级联查询订单order(多)


    2.多对一,查询订单order(多)级联查询person(一)


    注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,导致测试结果级联出来的多一直只有一条数据,具体如下:



    展开全文
  • Mybatis03_一对多查询

    万次阅读 2020-05-13 18:45:33
    Mybatis03_一对多查询 student表结构: student表内容: classes表结构: classes表内容: Student实体: package com.blu.entity; import lombok.Data; @Data public class Student { private long id; ...

    Mybatis03_一对多查询

    一对多级联查询(查询学生带班级)

    student表结构:
    在这里插入图片描述
    student表内容:
    在这里插入图片描述
    classes表结构:
    在这里插入图片描述
    classes表内容:
    在这里插入图片描述
    Student实体:

    package com.blu.entity;
    import lombok.Data;
    
    @Data
    public class Student {
    	private long id;
    	private String name;
    	private Classes classes;
    }
    

    Classes实体:

    package com.blu.entity;
    import java.util.List;
    import lombok.Data;
    
    @Data
    public class Classes {
    	private long id;
    	private String name;
    	private List<Student> students;
    }
    

    StudentRepository接口:

    package com.blu.repository;
    import com.blu.entity.Student;
    
    public interface StudentRepository {
    
    	public Student findById(long id);
    	
    }
    

    StudentRepository.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="com.blu.repository.StudentRepository">
    	<resultMap type="com.blu.entity.Student" id="studentMap">
    		<id column="id" property="id"></id>
    		<result column="name" property="name"></result>
    		<association property="classes" javaType="com.blu.entity.Classes">
    			<id column="cid" property="id"></id>
    			<result column="cname" property="name"></result>
    		</association>
    	</resultMap>
    
    	<select id="findById" parameterType="long" resultMap="studentMap">
    		select s.id, s.name, c.id as cid,c.name as cname
    		from student s, classes c
    		where s.id=#{id} and s.cid=c.id
    	</select>
    </mapper>
    

    resultMap标签写法:

    type标签指定返回值类型,相当于resultType
    子标签id用于标识主键,result标识其他字段
    子子标签column标识查询结果集中的字段,property用于标识实体类中的属性
    association标签用于标识对象属性,javaType指定该对象所属类名
    

    注册Mapper

    <mapper resource="com/blu/mapper/StudentRepository.xml"></mapper>
    

    测试方法:

    public class Test {
    	public static void main(String[] args) {
    		InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
    		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    		SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    		StudentRepository StudentRepository = sqlSession.getMapper(StudentRepository.class);
    		Student student = StudentRepository.findById(1L);
    		System.out.println(student);
    		sqlSession.close();
    	}
    }
    

    运行结果:

    Student(id=1, name=张三, classes=Classes(id=2, name=2班, students=null))
    
    反向一对多级联查询(查班级带学生)

    ClassesRepository接口:

    package com.blu.repository;
    
    import com.blu.entity.Classes;
    
    public interface ClassesRepository {
    	public Classes findById(long id);
    }
    

    ClassesRepository.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="com.blu.repository.ClassesRepository">
    	<resultMap type="com.blu.entity.Classes" id="classesMap">
    		<id column="cid" property="id"></id>
    		<result column="cname" property="name"></result>
    		<collection property="students" ofType="com.blu.entity.Student">
    			<id column="id" property="id"></id>
    			<result column="name" property="name"></result>
    		</collection>
    	</resultMap>
    
    	<select id="findById" parameterType="long"
    		resultMap="classesMap">
    		select s.id,s.name,c.id as cid,c.name as cname
    		from student s,classes c
    		where c.id = #{id} and s.cid = c.id
    	</select>
    </mapper>
    

    resultMap标签写法:

    collection标签用于标识集合属性,ofType指定集合的泛型
    

    注册mapper:

    <mapper resource="com/blu/mapper/ClassesRepository.xml"></mapper>
    

    测试方法:

    public class Test3 {
    	public static void main(String[] args) {
    		InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
    		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    		SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    		SqlSession sqlSession = sqlSessionFactory.openSession();
    		ClassesRepository classesRepository = sqlSession.getMapper(ClassesRepository.class);
    		Classes classes = classesRepository.findById(2L);
    		System.out.println(classes);
    		sqlSession.close();
    	}
    }
    

    结果:

    Classes(id=2, name=2班, students=[Student(id=1, name=张三, classes=null), Student(id=2, name=李四, classes=null), Student(id=3, name=王五, classes=null)])
    
    展开全文
  • mybatis一对多查询

    千次阅读 2019-08-22 17:50:03
    每次写一对多都是上网百度记不住,这次写个demo记录下。 1.项目结构,eg:一个用户可以有多个角色,一个角色可以有多个权限。 2.用户实体类,在用户实体类中添加一个roles的列表,用于存储查询出来的roles。 ...

    摘要:查询需求是shiro查询一个用户的同时将其角色和角色的权限一并查出来。每次写一对多都是上网百度记不住,这次写个demo记录下。

    1.项目结构,eg:一个用户可以有多个角色,一个角色可以有多个权限。

    2.用户实体类,在用户实体类中添加一个roles的列表,用于存储查询出来的roles。

    package com.ssm.entity;
    
    import java.util.ArrayList;
    
    public class Users {
    	private int userId;
    	private String userName;
    	private String userPassword;
    	//角色引用
    	private ArrayList<Roles> roles;
    	
    	public ArrayList<Roles> getRoles() {
    		return roles;
    	}
    	public void setRoles(ArrayList<Roles> roles) {
    		this.roles = roles;
    	}
    	public int getUserId() {
    		return userId;
    	}
    	public void setUserId(int userId) {
    		this.userId = userId;
    	}
    	public String getUserName() {
    		return userName;
    	}
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    	public String getUserPassword() {
    		return userPassword;
    	}
    	public void setUserPassword(String userPassword) {
    		this.userPassword = userPassword;
    	}
    	public Users() {
    		super();
    	}
    	
    	public Users(int userId, String userName, String userPassword) {
    		super();
    		this.userId = userId;
    		this.userName = userName;
    		this.userPassword = userPassword;
    	}
    	
    	public Users(String userName, String userPassword) {
    		super();
    		this.userName = userName;
    		this.userPassword = userPassword;
    	}
    }
    

    3.角色实体类,在角色实体类中加入一个权限的列表,用于存储查询出来的每个用户的角色身上的权限。

    package com.ssm.entity;
    
    import java.util.ArrayList;
    
    public class Roles {
    	private int roleId;
    	private String roleName;
    	//权限引用
    	private ArrayList<Permissions> permissions;
    
    	public ArrayList<Permissions> getPermissions() {
    		return permissions;
    	}
    	public void setPermissions(ArrayList<Permissions> permissions) {
    		this.permissions = permissions;
    	}
    	
    	public int getRoleId() {
    		return roleId;
    	}
    	public void setRoleId(int roleId) {
    		this.roleId = roleId;
    	}
    	public String getRoleName() {
    		return roleName;
    	}
    	public void setRoleName(String roleName) {
    		this.roleName = roleName;
    	}
    	public Roles() {
    		super();
    	}
    	
    	public Roles(int roleId, String roleName) {
    		super();
    		this.roleId = roleId;
    		this.roleName = roleName;
    	}
    	
    	public Roles(String roleName) {
    		super();
    		this.roleName = roleName;
    	}
    }
    

    4.权限实体类。

    package com.ssm.entity;
    
    public class Permissions {
    	private int permissionId;
    	private String permissionName;
    	
    	public int getPermissionId() {
    		return permissionId;
    	}
    	public void setPermissionId(int permissionId) {
    		this.permissionId = permissionId;
    	}
    	public String getPermissionName() {
    		return permissionName;
    	}
    	public void setPermissionName(String permissionName) {
    		this.permissionName = permissionName;
    	}
    	public Permissions(int permissionId, String permissionName) {
    		super();
    		this.permissionId = permissionId;
    		this.permissionName = permissionName;
    	}
    	public Permissions() {
    		super();
    	}
    	public Permissions(String permissionName) {
    		super();
    		this.permissionName = permissionName;
    	}
    }
    

    5.mapper文件。

    <?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="com.ssm.dao.UsersMapper">
    
            //这里数据库的设计是,用户表,用户角色关系表,角色表,角色权限关联表,权限表。
    	
            //sql代码片段
            <sql id="usersColumn">
    		users.user_id,user_name,user_password
    	</sql>
    	<sql id="rolesColumn">
    		roles.role_id,role_name
    	</sql>
    	<sql id="permissionsColumn">
    		permissions.permission_id,permission_name
    	</sql>
    	<sql id="userRoleColumn">
    		user_role_id,user_role.user_id,user_role.role_id
    	</sql>
    	<sql id="rolePermissionColumn">
    		role_permission_id,role_permission.role_id,
    		role_permission.permission_id
    	</sql>
    
            //用户基础map,base版本。
    	<resultMap type="Users" id="usersBaseMap">
    		<id property="userId" column="user_id"/>
    		<result property="userName" column="user_name"/>
    		<result property="userPassword" column="user_password"/>
    	</resultMap>
    	
            //继承基础userMap,oftype:引用的java类型
    	<resultMap type="Users" id="usersRolesPermissionsMap" extends="usersBaseMap">
    		<collection property="roles" ofType="Roles">
    			<id property="roleId" column="role_id"/>
    			<result property="roleName" column="role_name"/>
    			<collection property="permissions" ofType="Permissions">
    				<id property="permissionId" column="permission_id"/>
    				<result property="permissionName" column="permission_name"/>
    			</collection>
    		</collection>
    	</resultMap>	
    	
            //查询出来的角色和权限列表会自动封装到user对象中
    	<select id="login" parameterType="Users" resultMap="usersRolesPermissionsMap">
    		select 
    		<include refid="usersColumn"/>,
    		<include refid="rolesColumn"/>,
    		<include refid="permissionsColumn"/>,
    		<include refid="userRoleColumn"/>,
    		<include refid="rolePermissionColumn"/>
    		from users,roles,permissions,user_role,role_permission
    		where
    			 users.user_id = user_role.user_id
    	        and  roles.role_id = user_role.role_id
    		and  roles.role_id = role_permission.role_id
    		and  permissions.permission_id = role_permission.permission_id
    		and  users.user_name = #{userName}
    	</select>
    </mapper>

    6.这样我们写dao通过user的name去查询用户时就可以把用户身上的角色和权限一并查出。

     

     

     

    展开全文
  • MyBatis实现一对一一对多关联查询

    万次阅读 多人点赞 2019-09-25 00:20:31
    MyBatis如何实现一对一一对多查询的? 可以通过关联查询实现。关联查询是几个表联合查询,只查询一次,通过在resultMap里面的association,collection节点配置一对一一对多的类就可以完成 具体实现如下 准备...
  • Mybatis一对多、多对一、批量插入

    万次阅读 2015-10-21 12:03:56
    在项目开发中,我们有遇到的对象关系通常是复杂的,每个对象并不是单独的。...接下来就讲述一下在Mybatis中处理一对多关系的映射。 1、先捋清楚学生和老师的ER模型以及数据库表 数据库表中主要是在学生端的表中有一
  • mybatis一对多mapper文件如何配置

    万次阅读 2018-08-30 17:15:41
    mybatis想来大家不陌生吧,但是不知道大家对mybatis中的一对多了解吗? 老生常谈的话题,学生-老师关系:一个老师对应多个学生。首先建表t_student、t_teacher表(没有用外键,之前一直以为一对多一对一必须要...
  • MyBatis一对多,多对一,多对多

    万次阅读 多人点赞 2017-05-09 21:15:36
    MyBatis中的一对多和对多一,多对多 主要就是resultMap中 association – 一个复杂的类型关联;许多结果将包成这种类型(一对多) collection – 复杂类型的集合(多对一) 这2个属性的使用,而一对多和多对一都...
  • MyBatis 一对多映射的一个小坑

    千次阅读 2015-05-11 18:15:54
    MyBatis 一对多 映射时,必须显式指定 column 的名字,即使 它和property的名字完全相同
  • 使用mybatis操作数据库也有好一阵时间了,本篇记录并解释一下使用mybatis进行一对多,多对一查询显示数据。(一对一此处不讲解,会了一对多查询,一对一也就会了) 本例用员工表和部门表作为讲解,首先看员工表和...
  • mybatis一对多关联查询两种方式

    万次阅读 2018-12-24 00:01:06
    mybatis一对多关联查询两种方式前提:方式一:方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` ( `id` int(11) PRIMARY KEY, `name` varchar(20) , `age` ...
  • mybatis一对多嵌套查询: 嵌套查询特点:发送1+n条sql语句 步骤: 新建domain类: 数据库设计: 定义一个domainMapper接口: 新建一个domainMapper.xml文件 本例中为DepartmentMapper.xml: &lt;?xml version=...
  • 场景:现有两张表 s_class(班级表) s_student(学生表) ...方法二:mybatis提供一对多的查询,一次查询解决 对比:方法二明显比方法一更合适,更符合需求,更方便操作 实际操作: 创...
  • mybatis一对多两种mapper写法

    千次阅读 2018-11-12 15:05:37
    mybatis一对多两种mapper写法 第一种 &lt;resultMap type="com.example.demo.model.TuserModel" id="extendMapper"&gt; &lt;id column="id" property="id" /...
  • PageHelper关于Mybatis一对多查询返回Total错误 遇到的问题: pagehelper进行一对多查询时,返回的总数量对不上,例如需求是一个页面展示10个spu信息,实际上只展示了6个spu,其分页的依据是根据sku,6个spu中包含了...
  • First (一对一) 首先我来说下一对一的理解,就是一个班主任只属于一个班级,一个班级也只能有一个班主任。好吧这就是对于一对一的理解怎么来实现呢?这里我介绍了两种方式: 一种是:使用嵌套结果映射来处理重复的...
  • MyBatis一对多关联查询

    万次阅读 2017-03-09 09:57:26
    MyBatis一对多关联
  • MyBatis关联映射:一对一一对多

    万次阅读 2017-06-20 21:00:59
    一、一对一场景:生活中每一个人都有一个身份证,这是最简单的一对一的关系。(1)用户表(2)身份证表(3)用户实体对象,com.xuliugen.mybatis.demo.bean.User(4)身份证实体对象,...
  • 上篇文章说了MyBatis中的一对一查询的两种方法,这里总结一下MyBatis中一对多和多对一的查询方法。 业务还用上篇文章中的订单业务来分析,表结构如下: 如上图订单和用户的关系,一个订单对应多个订单明细表,这里...
  • mybatis多对一映射association详解

    千次阅读 2020-10-27 15:18:13
    简单映射(一对一对一映射 方式1:按照查询嵌套处理 方式2:按照结果嵌套处理 简单映射(一对一mybatis结果集映射ResultMap 对一映射 我们有2个类,一个班级类ClassRoom,一个学生类...
  • mybatis个持久层框架,是apache下的开源项目,前身是itbatis,是个不完全的ORM框架,mybatis提供输入和输出的映射,需要程序员自己写sql语句,mybatis重点 sql语句的灵活操作。 适合用于:需求变化频繁, ...
  • mybatis一对多映射collection

    千次阅读 2020-10-28 09:32:46
    一对多映射 方式1:按照查询嵌套处理 方式2:按照结果嵌套处理 简单映射(一对一mybatis结果集映射ResultMap 一对多映射 我们有2个类,一个班级类ClassRoom,一个学生类Student 班级类代码如下...
  • mybatis实现多表一对一一对多,多对多关联查询

    万次阅读 多人点赞 2018-02-03 15:40:08
    1、一对一 关键字:association 作用:针对pojo对象属性的映射  property:pojo的属性名  javaType:pojo类名 (1) 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集 <!-- 1、...
  • package com.zr.test_mybatis.model; import java.util.List; //部门实体类 public class DeptInfo { private String deptId; private String deptName; private List emps; public List getEmps() { ...
  • 也就是一对多变成了多条一对一。过程如下:这是数据库返回的记录,一共57条这是组成的实体对象。一共57个这就造成了上述的现象,一对多变成了多条一对一。造成这种现象的原因mysql查询的结果中,返回的列没有用于...
  • mybatis一对多查询配置

    千次阅读 2013-09-24 11:41:18
    mybatis关联查询(1—N)   1,数据表说明  Prodectorder_Imei_Conf (表) ——》ProdectorderImeiConf(实体类)   Prodectorder_Imei_Conf_Info(表) ——》ProdectorderImeiConfInfo(实体类)
  • Mybatis一对一一对多、多对多查询。+MYSQL

    万次阅读 多人点赞 2018-08-09 10:03:28
    场景:使用三张数据表:student学生表、teacher教师表、position职位表 一个学生可以有多为老师、一位...一对多关系,从职位角度:职位对老师一对多 多对多关系:查找被教授教导的所有学生(首先职位对老师一对多...
  • 先给大家看一下我的项目 整个的个 构造: 好,然后 开始我的mybatis关系,用的是mysql 1.首先,先导入依赖: dependency> groupId>junitgroupId> artifactId>junitartifactId> version>4.12...
  • mybatis-generator这是原来的github地址 现在在此基础上添加了一对一一对多映射配置,配置在table标签上 如果需要一对一配置生成,需要添加插件配置 在context中添加如下配置<!-- 生成一对一配置 --> ...
  • 本章主要记录MyBatis中的多表映射:一对多、多对一和多对多,涉及到的知识点有: 1. resultMap:当数据库方法返回的是复合数据类型(如list等),通常使用resultMap而非resultType。 2. collection:在resultMap...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 161,266
精华内容 64,506
关键字:

mybatis一对一一对多多对一多对多