前言
前面介绍过Mybatis的基本操作,这里只整理Mybatis的多表查询的操作,这里介绍注解开发的mybatis操作,以及用注解方式进行多表查询的操作。
一、java目录结构
二、配置文件pom.xml
<?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>org.example</groupId>
<artifactId>Mavenwebcpp</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>0.9.5</version>
</dependency>
</dependencies>
<build>
<!-- 配置了很多插件 -->
<plugins>
<!-- 配置的jdk的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 配置的tomcat插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>9090</port>
<path>/mgr</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
</project>
三、核心配置文件sqmMapConfig.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>
<!-- 在这里将jdbc.properties的配置文件加载进来 -->
<properties resource="jdbc.properties"></properties>
<!-- 数据源环境 -->
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED"><!-- 数据源为连接池类型 -->
<!-- jdbc的配置在jdbc.properties中定义 -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 核心配置文件在这里添加以后的Mapper映射文件 -->
<!-- 核心配置文件添加UserMapper映射文件 -->
<mappers>
<package name="dao"/>
</mappers>
</configuration>
四、实体类
package entity;
import java.util.List;
public class Users {
private long id;
private String username;
private String password;
private String birthday;
private List<Orders> orderList;
private List<Role> roleList;
@Override
public String toString() {
return "Users{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday='" + birthday + '\'' +
", orderList=" + orderList +
", roleList=" + roleList +
'}';
}
public List<Role> getRoleList() {
return roleList;
}
public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
}
public List<Orders> getOrderList() {
return orderList;
}
public void setOrderList(List<Orders> orderList) {
this.orderList = orderList;
}
public long getId() {
return id;
}
public void setId(long 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;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
}
package entity;
public class Role {
private int id;
private String rolename;
}
package entity;
public class Orders {
private long id;
private String ordertime;
private double total;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", ordertime='" + ordertime + '\'' +
", total=" + total +
", user=" + user +
'}';
}
private Users user;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getOrdertime() {
return ordertime;
}
public void setOrdertime(String ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}
五、接口类
package dao;
import entity.Users;
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 java.util.List;
public interface UserMapper {
@Select("select * from users where id = #{uid}" )
public List<Users> findById(int id);
@Select("select * from users")
@Results({
@Result(id = true,column = "id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(
property = "orderList",
column = "id",
javaType = List.class,
many = @Many(select = "dao.OrderMapper.findById")
)
})
List<Users> findAllUserAndOrder();
@Select("select * from users")
@Results({
@Result(id = true,property = "id",column = "id"),
@Result(property = "username",column = "username"),
@Result(property = "password",column = "password"),
@Result(property = "birthday",column = "birthday"),
@Result(
property = "roleList",
column = "id",
javaType = List.class,
many = @Many(select = "dao.RoleMapper.findByUid"))
})
List<Users> findAllUserAndRole();
}
package dao;
import entity.Role;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface RoleMapper {
@Select("select * from sys_role r,sys_user_role ur where r.id=ur.roleid and ur.userid=#{uid}")
List<Role> findByUid(int uid);
}
package dao;
import entity.Orders;
import entity.Users;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface OrderMapper {
@Select("select * from orders")
@Results({
@Result(column = "id",property = "id"),
@Result(column = "ordertime",property = "ordertime"),
@Result(column = "total",property = "total"),
@Result(
property = "user", //受封装的属性名称
column = "uid", //根据哪个字段去查询user表数据
javaType = Users.class, //受封装的实体类
//select属性 代表查询哪个接口的方法获取数据
one=@One(select = "dao.UserMapper.findById")
)
})
public List<Orders> findAll();
@Insert("insert into orders values(4,'2018-12-12',2000,2)")
public void add();
@Update("update orders set ordertime='2019-12-12' where id=4 ")
public void update();
@Delete("delete from orders where id=4")
public void Ddelete();
@Select("select * from orders where uid=#{uid}")
List<Orders> findById(int uid);
}
六、测试类
import dao.OrderMapper;
import entity.Orders;
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 Demo1 {
private OrderMapper mapper;
private SqlSession sqlSession;
@After
public void after(){
sqlSession.close();
}
@Before
public void bef() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = build.openSession(true);
mapper = sqlSession.getMapper(OrderMapper.class);
}
@Test
//查询所有Order订单(注解方式)
public void test5() throws IOException {
bef();
List<Orders> all = mapper.findAll();
for(Orders order:all)
{
System.out.println(order);
}
after();
}
@Test
//增加Order订单(注解方式)
public void test6() throws IOException {
bef();
mapper.add();
after();
}
@Test
//修改Order订单(注解方式)
public void test7() throws IOException {
bef();
mapper.update();
after();
}
@Test
//删除Order订单(注解方式)
public void test8() throws IOException {
bef();
mapper.Ddelete();
after();
}
}
import dao.OrderMapper;
import dao.UserMapper;
import entity.Orders;
import entity.Role;
import entity.Users;
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 Demo2 {
private UserMapper mapper;
private SqlSession sqlSession;
@After
public void after(){
sqlSession.close();
}
@Before
public void bef() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = build.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
}
@Test
//查询所有Order订单(注解方式)
public void test5() throws IOException {
bef();
List<Users> all = mapper.findAllUserAndOrder();
for(Users user : all) {
System.out.println(user.getUsername());
List<Orders> orderList = user.getOrderList();
for (Orders order : orderList) {
System.out.println(order);
}
System.out.println("-----------------------------");
}
after();
}
@Test
//增加Order订单(注解方式)
public void test6() throws IOException {
bef();
List<Users> all = mapper.findAllUserAndRole();
for(Users user : all)
{
System.out.println(user.getUsername());
List<Role> roleList = user.getRoleList();
for(Role role : roleList)
{
System.out.println(role);
}
System.out.println("----------------------------------");
}
after();
}
}
七、数据库
/*
Navicat MySQL Data Transfer
Source Server : mysql
Source Server Version : 50147
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50147
File Encoding : 65001
Date: 2019-04-20 16:37:34
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ordertime` varchar(255) DEFAULT NULL,
`total` double DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `uid` (`uid`),
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('1', '2018-12-12', '3000', '1');
INSERT INTO `orders` VALUES ('2', '2018-12-12', '4000', '1');
INSERT INTO `orders` VALUES ('3', '2018-12-12', '5000', '2');
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`rolename` varchar(255) DEFAULT NULL,
`roleDesc` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES ('1', 'CTO', 'CTO');
INSERT INTO `sys_role` VALUES ('2', 'COO', 'COO');
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`userid` int(11) NOT NULL,
`roleid` int(11) NOT NULL,
PRIMARY KEY (`userid`,`roleid`),
KEY `roleid` (`roleid`),
CONSTRAINT `sys_user_role_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `sys_role` (`id`),
CONSTRAINT `sys_user_role_ibfk_2` FOREIGN KEY (`roleid`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES ('1', '1');
INSERT INTO `sys_user_role` VALUES ('2', '1');
INSERT INTO `sys_user_role` VALUES ('1', '2');
INSERT INTO `sys_user_role` VALUES ('2', '2');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`birthday` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'lucy', '123', '2018-12-12');
INSERT INTO `user` VALUES ('2', 'haohao', '123', '2019-12-12');
总结
全部代码在这里,以及java目录文件,数据库等,可以运行成功的项目,喜欢的可以自行构建。