一、mybatis的高级查询
1.一对一查询操作
测试一对一查询
需求:查询指定用户信息。
分析:可以将用户的信息保存在两张表中,第一张表保存用户的基本信息,第二张表保存用户的身份证信息,这时用户的基本信息与用户的身份证信息就是一组一对一的信息。
用户基本信息表
create table t_user(
user_id int primary key auto_increment,
user_name varchar(20),
user_age int,
user_address varchar(30)
);
用户身份证信息表
create table t_card(
card_id int primary key auto_increment,
user_id_fk int not null unique,
card_code varchar(20),
card_year int,
foreign key(user_id_fk) references t_user(user_id)
);
#测试数据
insert into t_user values(null,'zhangsan',23,'西安');
insert into t_card values(null,1,'111111111',20);
创建工程项目
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>com.wangxing.mybatistest</groupId>
<artifactId>MyBatisTest8</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- 配置数据库访问驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- MyBatis框架的依赖包 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
</project>
mybatis核心配置文件
<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.wangxing.mybatistest</groupId>
<artifactId>MyBatisTest8</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- 配置数据库访问驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!-- MyBatis框架的依赖包 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
</project>
数据库连接配置文件 mydata.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
创建javabean
用户基本信息类
package com.wangxing.mybatis.bean;
/**
* 用户基本信息类
* @author 14336
*
*/
public class UserBean {
/* 访问修饰符共四种:public,default(就是不写),protected,private,可见范围从大到小。
* 不写,也就是default,也称package,是指同一个包内可以访问到这个类
* */
private int userid;
private String username;
private int userage;
private String useraddress;
//由于当我们在查询用户基本信息的时候需要连同用户身份证信息一起得到,
//所以我们就需要在保存用户基本信息的java实体类中新增一个成员变量,用来保存用户身份证信息。
private CardBean cardBean;
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 int getUserage() {
return userage;
}
public void setUserage(int userage) {
this.userage = userage;
}
public String getUseraddress() {
return useraddress;
}
public void setUseraddress(String useraddress) {
this.useraddress = useraddress;
}
public CardBean getCardBean() {
return cardBean;
}
public void setCardBean(CardBean cardBean) {
this.cardBean = cardBean;
}
}
用户身份证信息类
package com.wangxing.mybatis.bean;
/**
* 用户身份证信息类
* @author 14336
*
*/
public class CardBean {
private int cardid;
private int useridfk;
private String cardcode;
private int cardyear;
//由于当我们在查询用户身份证信息的时候需要连同用户基本信息一起得到,
//所以我们就需要在保存用户身份证信息的java实体类中新增一个成员变量,用来保存用户基本信息。
private UserBean userBean;
public int getCardid() {
return cardid;
}
public void setCardid(int cardid) {
this.cardid = cardid;
}
public int getUseridfk() {
return useridfk;
}
public void setUseridfk(int useridfk) {
this.useridfk = useridfk;
}
public String getCardcode() {
return cardcode;
}
public void setCardcode(String cardcode) {
this.cardcode = cardcode;
}
public int getCardyear() {
return cardyear;
}
public void setCardyear(int cardyear) {
this.cardyear = cardyear;
}
public UserBean getUserBean() {
return userBean;
}
public void setUserBean(UserBean userBean) {
this.userBean = userBean;
}
}
创建数据访问接口
package com.wangxing.mybatis.mapper;
import com.wangxing.mybatis.bean.UserBean;
public interface UserMapper {
//根据用户id得到用户信息,包括用户的身份证信息
UserBean getUserAndCardByUserId(int userid);
}
创建SQL映射文件
<?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.wangxing.mybatis.mapper.UserMapper">
<!-- 嵌套resultMap:方式一 -->
<!-- association 一对一配置 -->
<!-- property:成员变量名称 -->
<!-- javaType:成员变量的类型 -->
<!--
<resultMap type="UserBean" id="userMap">
<id column="user_id" property="userid"/>
<result column="user_name" property="username"/>
<result column="user_age" property="userage"/>
<result column="user_address" property="useraddress"/>
<association property="cardBean" javaType="CardBean">
<id column="card_id" property="c