MyBatis注解方式与映射文件方式配合实现一对一,一对多,多对多(二)

MyBatis注解方式与映射文件方式配合实现一对多##

注解的方式实现一对多如下(一个人有多本书):

在实体类中设置相应的属性(一定要有setter 和 getter方法):
User3.java

package com.mybatisdemo1.bean;

import java.util.List;

/**
 * 用户实体类
 * @author LIU
 * @version 1.0 2017-11-6
 */
public class User3 {

	private int id;
	
	private String userName;
	
	private String password;
	
	private List<Book> book;

	public List<Book> getBook() {
		return book;
	}

	public void setBook(List<Book> book) {
		this.book = book;
	}

	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public String getPassword() {
		return password;
	}
	
	public void setPassword(String password) {
		this.password = password;
	}
	
}

Book.java

package com.mybatisdemo1.bean;

public class Book {
	
	private int bid;
	private String bookName;
	public int getBid() {
		return bid;
	}
	public void setBid(int bid) {
		this.bid = bid;
	}
	public String getBookName() {
		return bookName;
	}
	public void setBookName(String bookName) {
		this.bookName = bookName;
	}
	
}

数据访问接口的代码:
User3Dao.java

package com.mybatisdemo1.dao;

import java.util.List;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.mybatisdemo1.bean.Book;
import com.mybatisdemo1.bean.User3;

/**
 * 实现一对多
 * @author LIU
 * @version 1.0 2017-11-6
 */
public interface User3Dao {

	/**
	 * 查询一对多的情况,从没有外键的开始,以主键作为连接
	 * 如:@Result(column="id",property="book",many=@Many(select="getBook"))
	 *TODO
	 *LIU
	 * @param id
	 * @return
	 *下午5:17:12
	 */
	@Select("select * from user where id = #{id}")
	@Results(
		{
			@Result(column="id",property="id",id=true),
			@Result(column="userName",property="userName"),
			@Result(column="password",property="password"),
			@Result(column="id",property="book",many=@Many(select="getBook"))
		}
	)
	public User3 getUser3(int id);
	
	
	
	@Select("select * from book where uid = #{uid}")
	@Results(
		{
			@Result(column="bid",property="bid",id=true),
			@Result(column="bookName",property="bookName"),
		}
	)
	public List<Book> getBook();
	
}

xml文件方式实现一对多,可以使用vo类,直接设置了对应结果的所有列名,不需要配置结果集,这是最简单的,这里将结果集写出。
如果不适用vo避免配置结果集,xml文件方式实现一对多的实体类依旧如同注解方式一样设计。
User3Mapper.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.dao.GroupDao">
	
	<resultMap type="User3" id="User3">
		<id column="id" property="id"/>
		<result column="userName" property="userName"/>
		<result column="password" property="password"/>
		<collection property="book" ofType="com.mybatisdemo1.bean.Book">  
	        <id property="bid" column="bid"/>  
	        <result property="bookName" column="bookName"/>  
	        <result property="uid" column="uid"/>  
	    </collection>
	</resultMap>
	
	
	<select id="getUser3" parameterType="int" resultMap="User3">
		select u.id as id,u.`password` as password,u.userName as userName,b.bid as bid,b.bookName as bookName,b.uid as uid
		from user u,book b
		where u.id=b.uid and u.id=#{id}
	</select>
	
	
</mapper>

web.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.mybatisdemo1.bean.User" alias="User"/>
		<typeAlias type="com.mybatisdemo1.bean.User3" alias="User3"/>
	</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/test" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper class="com.mybatisdemo1.dao.UserDao" /> 
		<mapper class="com.mybatisdemo1.dao.User2Dao" /> 
		<mapper class="com/mybatisdemo1/dao/User3Mapper.xml" /> 
	</mappers>
</configuration>

测试项目目录结构:

这里写图片描述

感谢您的阅读,欢迎参观我的个人网站:知行乐集【www.zhixinglj.cn】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值