Mybatis一对一与一对多

包结构

在这里插入图片描述

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.ps</groupId>
	<artifactId>MYBATIS</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<!-- 引入mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.0</version>
		</dependency>
		
		<!-- 引入驱动-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.39</version>
		</dependency>
		
		<!-- 引入分页插件 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper</artifactId>
			<version>5.1.4</version>
		</dependency>
		
		<!-- 引入redis -->
		<dependency>
			<groupId>org.mybatis.caches</groupId>
			<artifactId>mybatis-redis</artifactId>
			<version>1.0.0-beta2</version>
		</dependency>
		
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
			</resource>
		</resources>
	</build>

</project>

resources

创建properties资源文件
数据库连接: jdbc.properties

#驱动名
driverClassName=com.mysql.jdbc.Driver
#连接地址
url=jdbc:mysql://localhost:3306/unit02
#用户
userNames=root
#密码
password=ps123456
#初始连接数
initialSise=5
#最大连接数
maxTotal=8
#最大超时
maxWaitMillis=60000

redis连接:redis.properties

host=192.168.0.198
port=6379
password=123456

实体类

Dept

package cn.ps.lesson02.resultmap;

import java.util.List;

public class Dept {
	
	private String deptno;
	
	private String dname;
	
	private String djob;
	
	private List<Emp> empList;

	public List<Emp> getEmpList() {
		return empList;
	}

	public void setEmpList(List<Emp> empList) {
		this.empList = empList;
	}

	public String getDeptno() {
		return deptno;
	}

	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}

	public String getDname() {
		return dname;
	}

	public void setDname(String dname) {
		this.dname = dname;
	}

	public String getDjob() {
		return djob;
	}

	public void setDjob(String djob) {
		this.djob = djob;
	}
	
}

Emp

package cn.ps.lesson02.resultmap;

public class Emp {
	
	private String empno;
	
	private String ename;
	
	private int sal;
	
	private Dept dept;
	
	public Dept getDept() {
		return dept;
	}

	public void setDept(Dept dept) {
		this.dept = dept;
	}

	public String getEmpno() {
		return empno;
	}

	public void setEmpno(String empno) {
		this.empno = empno;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public int getSal() {
		return sal;
	}

	public void setSal(int sal) {
		this.sal = sal;
	}

	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", dept=" + dept + "]";
	}

}

接口类
DeptMapper

package cn.ps.lesson02.resultmap;

public interface DeptMapper {
	
	public Dept queryDept(int deptno);
}

EmpMapper

package cn.ps.lesson02.resultmap;

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

public interface EmpMapper {
	
	
	public Emp queryEmp(int empno);
	
	public Emp queryEmpName(int deptno);
	
	@Results(
			//sal是数据库的字段名,mySql是实体类的属性
			{
				@Result(column="sal",property="mySal")
			}
	)
	@Select("SELECT * FROM emp WHERE empno = #{0}")
	public Emp queryEmps(int empno);
	
}

DeptMapper.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="cn.ps.lesson02.resultmap.DeptMapper">
	<!-- 一对多 
			coolection="获取数据" 
			property="数据类型"
			javaTyoe="数据返回类型"
			select="需要查询的方法路径"
			column="往需要查询方法里面传入的参数"
	-->
	<resultMap type="cn.ps.lesson02.resultmap.Dept" id="dept">
		<collection property="empList" javaType="list" select="cn.ps.lesson02.resultmap.EmpMapper.queryEmpName" column="deptno"></collection>
	</resultMap>
	
	<!-- 一对多  先查出dept表里面的deptno编号-->
	<select id="queryDept" resultMap="dept">
		SELECT * FROM dept WHERE deptno = #{0}
	</select>
	
</mapper>

EmpMapper.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="cn.ps.lesson02.resultmap.EmpMapper">
	
	<!-- 
		设置resultMap返回值 
			type=返回值的类型
			column=数据库有的字段名	property=bean属性类里变量名	
			autoMapping="true" bean属性类里跟数据库字段名一致的,自动映射值。
			autoMapping="false" 在result里面设置的值会映射,其它都不会。
			association="获取bean的集合" property="empBean里面的deptBean类型" javaType="返回deptBean类型的的绝对路径" autoMapping="true自动映射"
	-->
	<!-- 一对一   通过empBean里面的deptBean类型将查询出来的数据插入deptBean里面-->
	<resultMap type="cn.ps.lesson02.resultmap.Emp" id="emp" autoMapping="true">
		<result column="sal" property="mySal"/>
		<association property="dept" javaType="cn.ps.lesson02.resultmap.Dept" autoMapping="true"></association>
	</resultMap>
	<!-- 一对一   	先从emp和dept表关联查出dept表里的数据 -->
	<select id="queryEmp" resultMap="emp">
		SELECT e.*,d.* FROM emp e INNER JOIN dept d ON e.deptno = d.deptno WHERE e.empno = #{0}
	</select>
	
	<!-- 一对多  由DeptMapper.xml里调用的查询方法 #{0}由DeptMapper.xml里传来-->
	<select id="queryEmpName" resultType="cn.ps.lesson02.resultmap.Emp">
		SELECT * FROM emp WHERE deptno = #{0}
	</select>
	
</mapper>

config.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>
	<properties resource="jdbc.properties" ></properties>
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING"/>
	</settings>
	<!-- 给返回类型取别名 -->
	<typeAliases>
		<typeAlias type="cn.ps.lesson02.selectKey.User" alias="user"/>
	</typeAliases>
	
	<!-- 连接数据库 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driverClassName}" />
				<property name="url" value="${url}" />
				<property name="username" value="${userNames}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 扫描 -->
	<mappers>
		<mapper resource="cn/ps/lesson02/resultmap/EmpMapper.xml"></mapper>
		<mapper resource="cn/ps/lesson02/resultmap/DeptMapper.xml"></mapper>
	</mappers>
	
</configuration>

测试类TestMybatis

package cn.ps.lesson02.resultmap;

import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

/**
 * 1.解决sql硬编码的问题 2.解决面向对象面向问题 每一个对象一个xml文件(映射文件 MAPPING)
 * 
 * @author 胡俊飞 2018年11月10日上午11:08:11
 */
public class TestMybatis {
	//获取session对象
	public static SqlSession getSeesion() {
		// 获取config.xml文件
		String resources = "config.xml";
		// 读取config.xml文件
		InputStream resourceAsStream = TestMybatis.class.getResourceAsStream(resources);
		// sessopm工厂负责生产回话
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
		// 回话就是跟数据库产生的连接可以操作数据库的增删改查
		SqlSession openSession = sqlSessionFactory.openSession();
		return openSession;
	}
	
	@Test
	public void testOneToOne() {
		SqlSession seesion = getSeesion();
		EmpMapper mapper = seesion.getMapper(EmpMapper.class);
		Emp queryEmp = mapper.queryEmp(7521);
		System.out.println(queryEmp.getDept().getDname());
	}
	
	@Test
	public void testOneToMany() {
		SqlSession seesion = getSeesion();
		DeptMapper mapper = seesion.getMapper(DeptMapper.class);
		Dept queryDept = mapper.queryDept(20);
		System.out.println(queryDept.getEmpList());
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值