mybtisplus 多表联查的详细样例
时间: 2023-05-16 22:04:51 浏览: 95
以下是一个 MyBatis Plus 多表联查的详细样例:
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT u.*, r.role_name FROM user u LEFT JOIN user_role ur ON u.id = ur.user_id LEFT JOIN role r ON ur.role_id = r.id WHERE u.id = #{id}")
UserVO selectUserWithRoleById(@Param("id") Long id);
}
```
在这个例子中,我们使用了 MyBatis Plus 的 BaseMapper 接口来继承 UserMapper 接口。我们还定义了一个 selectUserWithRoleById 方法,该方法使用了多表联查来获取用户和角色信息。在这个查询中,我们使用了 LEFT JOIN 来连接 user、user_role 和 role 表,并使用 WHERE 子句来过滤出指定的用户。最后,我们将查询结果映射到一个 UserVO 对象中,该对象包含了用户和角色的信息。
注意:这个例子中的查询并不是最优的,实际上,我们可以使用 MyBatis Plus 提供的 Wrapper 来更好地组织查询条件。但是,为了简化示例,我们在这里直接使用了 SQL 语句。
相关问题
mybtisplus 多数据源 集成 mysql jdbc 集成 neo4j jdbc相关代码
mybatis-plus 多数据源集成 mysql 和 neo4j 的代码示例:
首先在 pom.xml 中添加 mybatis-plus-boot-starter 和 neo4j-jdbc-driver 依赖:
```xml
<dependencies>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<!-- mysql jdbc -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
<!-- neo4j jdbc -->
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-jdbc-driver</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
```
然后在 application.properties 中配置两个数据源的相关信息:
```properties
# mysql 数据源配置
spring.datasource.mysql.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.mysql.username=root
spring.datasource.mysql.password=root
spring.datasource.mysql.driver-class-name=com.mysql.cj.jdbc.Driver
# neo4j 数据源配置
spring.datasource.neo4j.url=jdbc:neo4j:bolt://localhost:7687
spring.datasource.neo4j.username=neo4j
spring.datasource.neo4j.password=123456
spring.datasource.neo4j.driver-class-name=org.neo4j.jdbc.Driver
```
接着在 MybatisPlusConfig.java 中配置多数据源:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.neo4j")
public DataSource neo4jDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
public DataSource multipleDataSource(@Qualifier("mysqlDataSource") DataSource mysqlDataSource,
@Qualifier("neo4jDataSource") DataSource neo4jDataSource) {
Map<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put(DbType.MYSQL, mysqlDataSource);
targetDataSources.put(DbType.NEO4J, neo4jDataSource);
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(targetDataSources);
dynamicDataSource.setDefaultTargetDataSource(mysqlDataSource);
return dynamicDataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean.getObject();
}
}
```
上述代码中,我们定义了两个数据源:mysqlDataSource 和 neo4jDataSource,使用 @ConfigurationProperties 注解读取 application.properties 中的配置信息。然后通过 DynamicDataSource 类将这两个数据源动态切换。
最后在实体类对应的 Mapper 中使用注解 @DS 指定数据源,示例代码如下:
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
@DS(DbType.MYSQL)
@Select("select * from user")
List<User> selectMysqlUsers();
@DS(DbType.NEO4J)
@Select("match (n:User) return n")
List<User> selectNeo4jUsers();
}
```
上述代码中,我们在查询 mysql 和 neo4j 数据库的方法上分别使用了不同的数据源。其中 @DS 注解是自定义的一个切面注解,用于切换数据源。DbType 是一个枚举类,用于标识数据源类型。
完整示例代码可以参考以下链接:
https://github.com/zhengweikeng/spring-boot-demo/tree/master/mybatis-plus-multi-datasource
Mybtisplus常用注解
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus 提供了很多实用的注解,这里列举一些常用的注解:
1. @TableName:实体类与表的映射关系。
2. @TableField:实体类属性与表字段的映射关系。
3. @TableId:用于标识实体类中的主键属性。
4. @EnumValue:用于标识枚举类中哪个属性作为数据库存储值。
5. @Version:实现乐观锁的注解,用于标识版本号属性。
6. @LogicDelete:用于逻辑删除的注解,用于标识逻辑删除字段。
7. @SqlParser:用于自定义 SQL 解析器。
8. @SqlCondition:用于在 SQL 中添加判断条件。
9. @InsertIgnore:当插入数据时,如果已经存在相同的记录,该注解可以忽略插入操作。
10. @UpdateIgnore:当更新数据时,如果没有需要更新的字段,该注解可以忽略更新操作。
以上注解是 MyBatis-Plus 中比较常用的一些注解,可以根据实际情况选择使用。
阅读全文