一、不用vo的mybatisplus多表查詢分頁
mybatisplus是一個基於mybatis的增強工具,它提供了很多方便的查詢操作。在進行多表查詢分頁時,我們可以通過使用mybatisplus提供的Wrapper,來進行多表條件查詢。
首先,我們需要引入mybatisplus和分頁插件的依賴:
“`
com.baomidou
mybatis-plus-boot-starter
最新版本
com.baomidou
mybatis-plus-extension
最新版本
com.baomidou
mybatis-plus
最新版本
com.github.pagehelper
pagehelper
最新版本
“`
然後,定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
@TableField(exist = false)
private Integer pageNum;
@TableField(exist = false)
private Integer pageSize;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserPageList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`
最後,在Service中調用mapper方法,將條件設置到Wrapper中,並使用PageHelper進行分頁操作:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List getUserPageList(Integer pageNum, Integer pageSize, String username, String roleName) {
Page page = PageHelper.startPage(pageNum, pageSize);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.eq(User::getUsername, username)
.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserPageList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`
二、mybatisplus多表查詢
在進行多表查詢時,我們可以使用mybatisplus提供的Wrapper來設置多個表的條件查詢。在Wrapper中,我們可以使用innerJoin、leftJoin和rightJoin方法來進行聯表查詢操作。
首先,我們需要定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
…
}
@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`
最後,在Service中調用mapper方法,將條件設置到Wrapper中,即可獲取到對應的查詢結果:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`
三、mybatisplus自定義sql查詢
在有些情況下,我們需要自定義一些複雜的SQL語句來進行查詢。這時,我們可以使用mybatisplus提供的SqlInjector來進行自定義SQL查詢。
首先,我們需要實現一個繼承了AbstractMethod的類,並在其中定義自己的SQL方法:
“`
@Component
public class UserSqlInjector extends AbstractMethod {
@Override
public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo, SqlMethod sqlMethod) {
String sql = “select * from user where username = #{username}”;
SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
return addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
}
}
“`
然後,在mapper接口中定義查詢方法,並使用@SqlParser註解來告訴mybatisplus,該方法不需要進行自動分頁處理:
“`
@SqlParser(filter = true)
List selectUserByUsername(@Param(“username”) String username);
“`
最後,在Service中調用mapper方法即可:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List selectUserByUsername(String username) {
return userMapper.selectUserByUsername(username);
}
}
“`
四、mybatisplus多表分頁
在進行多表分頁查詢時,我們可以使用mybatisplus提供的Page對象和Wrapper條件來進行分頁操作。
首先,我們需要定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
…
}
@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;
@TableField(exist = false)
private List users;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserPageList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`
最後,在Service中調用mapper方法,將條件設置到Wrapper中,並使用PageHelper進行分頁操作:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List getUserPageList(Integer pageNum, Integer pageSize, String roleName) {
Page page = PageHelper.startPage(pageNum, pageSize);
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserPageList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`
五、mybatisplus多表連接查詢
在進行多表連接查詢時,我們可以使用mybatisplus提供的Wrapper來進行設置多個表的條件查詢。在Wrapper中,我們可以使用innerJoin、leftJoin和rightJoin方法來進行聯表查詢操作。
首先,我們需要定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
…
}
@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;
@TableField(exist = false)
private List users;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select u.*, r.role_name\n” +
“from user u\n” +
“left join user_role ur on u.id = ur.user_id\n” +
“left join role r on ur.role_id = r.id\n” +
“${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`
最後,在Service中調用mapper方法,將條件設置到Wrapper中,即可獲取到對應的查詢結果:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`
六、mybatisplus聯表查詢
在進行聯表查詢時,我們可以使用mybatisplus提供的Wrapper來進行設置多個表的條件查詢。在Wrapper中,我們可以使用innerJoin、leftJoin和rightJoin方法來進行聯表查詢操作。
首先,我們需要定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
…
}
@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;
@TableField(exist = false)
private List users;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select * from user u left join user_role ur on u.id = ur.user_id left join role r on ur.role_id = r.id ${ew.customSqlSegment}”)
List getUserList(@Param(Constants.WRAPPER) Wrapper wrapper);
“`
最後,在Service中調用mapper方法,將條件設置到Wrapper中,即可獲取到對應的查詢結果:
“`
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List getUserList(String roleName) {
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.nested(i -> i.eq(Role::getRoleName, roleName));
List userList = userMapper.getUserList(wrapper);
userList.forEach(user -> user.setRoles(userMapper.getUserRoles(user.getId())));
return userList;
}
}
“`
七、mybatisplus多表id查詢
在有些情況下,我們需要根據多個id進行查詢操作。這時,我們可以使用mybatisplus提供的Wrapper來進行條件查詢。
首先,我們需要定義實體類,並在實體類中使用@TableField註解來指定映射關係:
“`
@Data
public class User implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String username;
private String password;
@TableField(exist = false)
private List roles;
…
}
@Data
public class Role implements Serializable {
@TableId(value = “id”, type = IdType.AUTO)
private Long id;
private String roleName;
@TableField(exist = false)
private List users;
…
}
“`
接着,在mapper接口中定義查詢方法,使用@Select註解,並將查詢條件通過Wrapper進行設置:
“`
@Select(“select * from user where id in (${ids})”)
List getUserListByIds(@Param(“ids”) String ids);
“`
最後,在Service中調用mapper方法
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/185242.html