mybatis plus的mapper.xml貌似是和mybatis一模一样的,可以使用mybatis plus自动生成的mapper.xml和mapper接口
本demo是springboot结合mybatis plus,IDE是idea。
本文的前提是你已经可以生成代码,并且测试生成mapper接口已经成功
利用mybatis plus的代码生成器生成各结构,红色方框里面的就是生成的代码。我按照course表和teacher两个表生成的。
接下来要注意一些事项,确保项目可以跑起来
1、springboot启动类注解mapper接口扫描
如果不注解,或者注解错了,在引用mapper接口时会报错
2、要配置mapper xml的位置
在yml文件下配置
其次,还要再pom.xml文件配置,我这里的mapper xml是放在resources下的,如果是放在java下面的,第二个resources就不能这么写了
好,配置结束,接下来来写多表查询的mapper xml文件,和mapper接口
这里定义一个selectTC接口,代表teacher表和course表的联查
接着在mapper xml文件编写映射
type代表返回的对象
conllection是一对多时使用
courses是自己在Teacher类添加的一个List
Teacher和Couse代码
package com.baomidou.ant.sys.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*
*
*
*
* @author jobob
* @since 2019-01-26
*/
//@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Course implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("cNumber")
private String cNumber;
@TableField("cName")
private String cName;
@TableField("tNumber")
private String tNumber;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String getcNumber() {
return cNumber;
}
public void setcNumber(String cNumber) {
this.cNumber = cNumber;
}
public String getcName() {
return cName;
}
public void setcName(String cName) {
this.cName = cName;
}
public String gettNumber() {
return tNumber;
}
public void settNumber(String tNumber) {
this.tNumber = tNumber;
}
@Override
public String toString() {
return "Course{" +
"cNumber='" + cNumber + '\'' +
", cName='" + cName + '\'' +
", tNumber='" + tNumber + '\'' +
'}';
}
}
package com.baomidou.ant.sys.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
*
*
*
*
* @author jobob
* @since 2019-01-26
*/
//@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class Teacher implements Serializable {
private static final long serialVersionUID = 1L;
@TableId("tNumber")
private String tNumber;
@TableField("tName")
private String tName;
private List courses;
public List getCourses() {
return courses;
}
public void setCourses(List courses) {
this.courses = courses;
}
public static long getSerialVersionUID() {
return serialVersionUID;
}
public String gettNumber() {
return tNumber;
}
public void settNumber(String tNumber) {
this.tNumber = tNumber;
}
public String gettName() {
return tName;
}
public void settName(String tName) {
this.tName = tName;
}
@Override
public String toString() {
return "Teacher{" +
"tNumber='" + tNumber + '\'' +
", tName='" + tName + '\'' +
", courses=" + courses +
'}';
}
}
get set和tostring方法是我自己生成的,因为不知道@Data注解怎么使用,有小伙伴知道的话,顺便给我留下言告诉我。
接下来测试
@Test
public void liancha(){
List teachers = new ArrayList<>();
teachers = teacherMapper.selectTC();
for (Teacher t:teachers) {
System.out.println("---"+t);
}
测试类前要加注解
测试结果
ok搞定。建议先把mapper映射弄清楚,不要以为根据别人项目去照写。我就是,跟着别人的代码一步一步打,但是却总是差狠多,因为别人不能把所有的点都讲清楚,所以有时报了错,你根本就不知道错在哪里。改不了只能从头开始,万一成功了,你也不明白这是为什么,下一次要写同样的功能是只能按步骤,机械化似的复制代码,不明所以然,有bug往往需要耗费很多的时间来解决。