springboot + mybatis-plus实现多表联合查询功能(注解方式)
第一步:加入mybatis-plus依赖
第二步:配置数据源
spring: thymeleaf: cache: false encoding: utf-8 prefix: classpath:/templates/ suffix: .html enabled: true datasource: url: jdbc:mysql://192.168.1.152:3306/timo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root type: com.alibaba.druid.pool.DruidDataSource mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
第三步:创建两张有关联关系的表(我的如下 )
sys_user:用户表
sys_role:权限表
第四步:将两张表映射到实体类bean(其实sys_role建不建都无所谓,可以不建sys_role的实体类)
@Data @TableName("sys_user") //当实体类名(前提是开启驼峰)与数据库表名一致时可不写 public class SysUser extends Model { @TableId(type = IdType.AUTO) private Long id; private String username; private String password; private String salt; private Integer deptId; private String picture; private String sex; private String email; private String phone; @Version private Integer version; @TableField(fill = FieldFill.INSERT) private Date createDate; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateDate; private Integer status;
********************不想建这个实体类就不建 没有意义
public class SysRole { private long id; private String roleName; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = roleName; } }
第五步:定义mapper(注意看这个@Select里面的SQL)
第六步:定义一个通用实体类Record
import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.Reader; import java.util.*; /** * @author Wxiaokun * @version 1.0 * @date 2020/9/25 0025 下午 4:15 */ public class Record extends HashMap implements Map { private static final long serialVersionUID = 1L; Map map = null; HttpServletRequest request; public Record(HttpServletRequest request){ this.request = request; Map properties = request.getParameterMap(); Map returnMap = new HashMap(); Iterator entries = properties.entrySet().iterator(); Map.Entry entry; String name = ""; String value = ""; while (entries.hasNext()) { entry = (Map.Entry) entries.next(); name = (String) entry.getKey(); Object valueObj = entry.getValue(); if(null == valueObj){ value = ""; }else if(valueObj instanceof String[]){ String[] values = (String[])valueObj; for(int i=0;i<values.length;i++){ value = values[i] + ","; } value = value.substring(0, value.length()-1); }else{ value = valueObj.toString(); } returnMap.put(name, value); } map = returnMap; } public Record() { map = new HashMap(); } @Override public Object get(Object key) { Object obj = null; if(map.get(key) instanceof Object[]) { Object[] arr = (Object[])map.get(key); obj = request == null ? arr:(request.getParameter((String)key) == null ? arr:arr[0]); } else { obj = map.get(key); } return obj; } public String getString(Object key) { return (String)get(key); } @SuppressWarnings("unchecked") @Override public Object put(Object key, Object value) { if(value instanceof ClobProxyImpl){ // 这里必须要到如durid数据源的依赖 读取数据库 Clob类型数据 try { ClobProxyImpl cpi = (ClobProxyImpl)value; Reader is = cpi.getCharacterStream(); //获取流 BufferedReader br = new BufferedReader(is); String str = br.readLine(); StringBuffer sb = new StringBuffer(); while(str != null){ //循环读取数据拼接到字符串 sb.append(str); sb.append("\n"); str = br.readLine(); } value = sb.toString(); } catch (Exception e) { e.printStackTrace(); } } return map.put(key, value); } @Override public Object remove(Object key) { return map.remove(key); } @Override public void clear() { map.clear(); } @Override public boolean containsKey(Object key) { return map.containsKey(key); } @Override public boolean containsValue(Object value){ return map.containsValue(value); } public Set entrySet() { return map.entrySet(); } @Override public boolean isEmpty() { return map.isEmpty(); } public Set keySet() { return map.keySet(); } @SuppressWarnings("unchecked") @Override public void putAll(Map t) { map.putAll(t); } @Override public int size() { return map.size(); } public Collection values() { return map.values(); } }
第七步:接下来就是测试了
测试结果如下:
至此 到这里 我觉得这个东西就有点像Jfinal底层封装的Record类了,在多表联合查询的情况下,我们可以方便的使用mybatis-plus来进行了。
到此这篇关于springboot + mybatis-plus实现多表联合查询功能(注解方式)的文章就介绍到这了,更多相关Mybatis-plus 多表联合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring使用Configuration注解管理bean的方式详解
在Spring的世界里,Configuration注解就像是一位细心的园丁,它的主要职责是在这个繁花似锦的园子里,帮助我们声明和管理各种各样的bean,本文给大家介绍了在Spring中如何优雅地管理你的bean,需要的朋友可以参考下2024-05-05Java基本类型包装类概述与Integer类、Character类用法分析
这篇文章主要介绍了Java基本类型包装类概述与Integer类、Character类用法,结合实例形式分析了java基本数据类型与字符串转换相关操作技巧,需要的朋友可以参考下2019-03-03SpringBoot配置Spring Security的实现示例
本文主要介绍了SpringBoot配置Spring Security的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-10-10Java使用Collections.sort()排序的示例详解
这篇文章主要介绍了Java使用Collections.sort()排序的示例详解,Collections.sort(list, new PriceComparator());的第二个参数返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。对此感兴趣的可以了解一下2020-07-07
最新评论