1 表结构 员工表和部门表:一个员工所属一个部门,一个部门下有多个员工,这样就形成了一对多和多对一的表关系,下面用Mybatis展示给大家。
2 表中的模拟数据内容
3 idea中项目的整体结构
本项目采用Maven的管理形式,通过使用Maven中聚合来管理各个层次。如果想要了解Maven聚合关系的请在留言处,给我留言,我也会解答大家在学习过程中遇到的问题。
4 Pojo层
package com.zxf.pojo;
import java.util.List;
public class Dept {
private String dept_id;
private String dept_name;
private String dept_manager;
private List<Employee> employees;
public String getDept_id() {
return dept_id;
}
public void setDept_id(String dept_id) {
this.dept_id = dept_id;
}
public String getDept_name() {
return dept_name;
}
public void setDept_name(String dept_name) {
this.dept_name = dept_name;
}
public String getDept_manager() {
return dept_manager;
}
public void setDept_manager(String dept_manager) {
this.dept_manager = dept_manager;
}
public List<Employee> getEmployees() {
return employees;
}
public void setEmployees(List<Employee> employees) {
this.employees = employees;
}
}
package com.zxf.pojo;
import java.io.Serializable;
public class Employee implements Serializable {
private String emp_no;
private String emp_name;
private String dept_id;
private String emp_gender;
private String emp_email;
//员工基本情况表和部门信息表是多对一的关系,每一个员工只归属一个部门
private Dept dept;
public String getEmp_no() {
return emp_no;
}
public void setEmp_no(String emp_no) {
this.emp_no = emp_no;
}
public String getEmp_name() {
return emp_name;
}
public void setEmp_name(String emp_name) {
this.emp_name = emp_name;
}
public String getDept_id() {
return dept_id;
}
public void setDept_id(String dept_id) {
this.dept_id = dept_id;
}
public String getEmp_gender() {
return emp_gender;
}
public void setEmp_gender(String emp_gender) {
this.emp_gender = emp_gender;
}
public String getEmp_email() {
return emp_email;
}
public void setEmp_email(String emp_email) {
this.emp_email = emp_email;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>mybatisProject3</artifactId>
<groupId>com.zxf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatisProject3-pojo</artifactId>
</project>
4 mapper层
package com.zxf.mapper;
import com.zxf.pojo.Dept;
public interface DeptMapper {
Dept selectDeptById(String dept_id);
}
<?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.zxf.mapper.DeptMapper">
<!-- 根据 dept_id 查询部门信息,返回resultMap -->
<select id="selectDeptById" parameterType="string" resultMap="deptResultMap">
SELECT * from dept WHERE dept_id=#{dept_id}
</select>
<!-- 映射 Dept 对象的 resultMap -->
<resultMap id="deptResultMap" type="dept">
<id property="dept_id" column="dept_id"></id>
<result property="dept_name" column="dept_name"></result>
<result property="dept_manager" column="dept_manager"></result>
<!-- 一对多关联映射:collection fetchType="lazy"表示延迟加载 -->
<collection property="employees" javaType="ArrayList" column="dept_id"
ofType="Employee"
select="com.zxf.mapper.EmployeeMapper.selectEmployeeByDeptId"
>
<id property="emp_no" column="emp_no"></id>
<result property="dept_id" column="dept_id"></result>
<result property="emp_name" column="emp_name"></result>
<result property="emp_email" column="emp_email"></result>
<result property="emp_gender" column="emp_gender"></result>
</collection>
</resultMap>
</mapper>
package com.zxf.mapper;
import com.zxf.pojo.Employee;
public interface EmployeeMapper {
Employee selectEmployeeById(String emp_no);
}
<?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.zxf.mapper.EmployeeMapper">
<!-- 根据 emp_no 查询员工信息,多表连接,返回resultMap -->
<select id="selectEmployeeById" parameterType="string" resultMap="employeeResultMap">
SELECT * from employee_basic e ,dept d
WHERE e.dept_id = d.dept_id
and e.emp_no = #{emp_no}
</select>
<!-- 根据部门 dept_id 查询员工信息,返回resultMap -->
<select id="selectEmployeeByDeptId" parameterType="string" resultMap="employeeResultMap">
SELECT * from employee_basic WHERE dept_id = #{dept_id}
</select>
<!-- 映射employee对象的resultMap -->
<resultMap id="employeeResultMap" type="Employee">
<id property="emp_no" column="emp_no"></id>
<result property="dept_id" column="dept_id"></result>
<result property="emp_name" column="emp_name"></result>
<result property="emp_email" column="emp_email"></result>
<result property="emp_gender" column="emp_gender"></result>
<!-- 多对一关联映射:association -->
<association property="dept" javaType="dept">
<id property="dept_id" column="dept_id"></id>
<result property="dept_name" column="dept_name"></result>
<result property="dept_manager" column="dept_manager"></result>
</association>
</resultMap>
</mapper>
有关数据库连接和log4j的配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.0.148:3306/test
jdbc.user=root
jdbc.password=abc123
<?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"/>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.zxf.pojo"/>
</typeAliases>
<!-- default引用environment的id,当前所使用的环境 -->
<environments default="abc">
<environment id="abc">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.zxf.mapper.EmployeeMapper"></mapper>
<mapper class="com.zxf.mapper.DeptMapper"></mapper>
</mappers>
</configuration>
log4j.rootCategory=DEBUG,CONSOLE,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{YYYY-MM-dd hh:mm:ss} %L %m %n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=h://zhang.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %n %L
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>mybatisProject3</artifactId>
<groupId>com.zxf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mybatisProject3-mapper</artifactId>
<dependencies>
<dependency>
<groupId>com.zxf</groupId>
<artifactId>mybatisProject3-pojo</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
5 service层,这里只写了简单的测试类
package com.zxf;
import com.zxf.mapper.DeptMapper;
import com.zxf.pojo.Dept;
import com.zxf.pojo.Employee;
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.InputStream;
import java.util.List;
public class Test1 {
private SqlSessionFactory sqlSessionFactory;
private SqlSession session;
private InputStream is;
private DeptMapper deptMapper;
@Before //用于测试方法之前执行。
public void init() throws Exception{
is= Resources.getResourceAsStream("zhangMyBatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
session=sqlSessionFactory.openSession();
deptMapper=session.getMapper(DeptMapper.class);
}
@After //用于测试方法之后执行。
public void destory()throws Exception{
session.commit();
session.close();
is.close();
}
@Test
public void test1(){
//通过部门编号查询,当前部门的人员
Dept dept = deptMapper.selectDeptById("101");
System.out.print(dept.getDept_name());
System.out.println(" 部门负责人编号:"+dept.getDept_manager());
System.out.println("***********************************************");
List<Employee> employees = dept.getEmployees();
for (Employee e:employees){
System.out.print(e.getEmp_name()+" ");
System.out.println(e.getEmp_gender());
}
}
}
103 技术部门的人员情况
package com.zxf;
import com.zxf.mapper.DeptMapper;
import com.zxf.mapper.EmployeeMapper;
import com.zxf.pojo.Employee;
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.InputStream;
public class Test2 {
private SqlSessionFactory sqlSessionFactory;
private SqlSession session;
private InputStream is;
private EmployeeMapper employeeMapper;
@Before //用于测试方法之前执行。
public void init() throws Exception{
is= Resources.getResourceAsStream("zhangMyBatis.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
session=sqlSessionFactory.openSession();
employeeMapper=session.getMapper(EmployeeMapper.class);
}
@After //用于测试方法之后执行。
public void destory()throws Exception{
session.commit();
session.close();
is.close();
}
@Test
public void test1(){
Employee employee = employeeMapper.selectEmployeeById("HW9801");
System.out.print(employee.getEmp_name()+" 所在部门:");
System.out.println(employee.getDept().getDept_name());
}
}
例如员工编号:hw9803所在的部门
6 最后还有个父模块的POM文件配置内容
<?xml version="1.0" encoding="UTF-8"?>
<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>com.zxf</groupId>
<artifactId>mybatisProject3</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatisProject3-pojo</module>
<module>mybatisProject3-mapper</module>
<module>mybatisProject3-service</module>
</modules>
<!--对依赖的坐标的版本做集中管理-->
<properties>
<junit.version>4.12</junit.version>
<mybatis.version>3.2.8</mybatis.version>
<mysql.version>5.1.32</mysql.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!--配置资源拷贝插件-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resouces</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>