SpringBoot整合mybatisPlus
实现多对多关系的维护 user <1----n-> user_roles <-n-----1> roles
1、依赖
<!--记得修改自己对应的版本-->
<!-- mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
<!-- mybatis-plus支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2、application.yml配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/erp?useUnicode=true&charecterEncoding=utf-8
username: root
password: root
mybatis-plus:
#实体类的包
type-aliases-package: com.hdax.pojo
# mapper映射文件
mapper-locations: classpath:com/hdax/dao/*Mapper.xml
configuration:
#日志实现方式
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、pojo实体类
- User
@TableName(value = "users", resultMap = "userBase") @Component @Data public class User implements Serializable { @TableId(value = "uid", type = IdType.AUTO) private Integer id; @TableField(value = "uname") private String name; @TableField(value = "upassword") private String password; @TableField(value = "salt") private String salt; @TableField(value = "state") private Integer state; @TableField(exist = false) private List<Roles> roles; }
- Roles
@Component @TableName(value = "roles", resultMap = "rolesBase") @Data public class Roles { @TableId(value = "rid", type = IdType.AUTO) private Integer id; @TableField(value = "rname") private String name; @TableField(exist = false) private List<User> users; }
3、dao接口
- UserDao
//继承BaseMapper类传入泛型 public interface UserMapper extends BaseMapper<User> { User findByRid(@Param("rid")Integer rid); }
- RolesDao
public interface RolesMapper extends BaseMapper<Roles> { Roles findByUid(@Param("uid")Integer uid); }
4、mapper映射文件
该文件的位置要与配置的映射文件一致
- UserMapper
<!-- 结果集映射--> <resultMap id="userBase" type="User"> <id property="id" column="uid"/> <result property="name" column="uname"/> <result property="password" column="upassword"/> <result property="salt" column="salt"/> <result property="state" column="state"/> <collection property="roles" ofType="Roles" column="uid" select="com.hdax.dao.RolesMapper.findByUid"/> </resultMap> <!-- 根据用户角色中间表查询该用户拥有几种角色--> <select id="findByRid" resultType="User"> select u.uid as id, u.uname as name, u.upassword as password, u.salt , u.state from users as u inner join users_roles as us on u.uid = us.uid where us.rid = #{rid} </select>
- RolesMapper
<!-- 结果集映射--> <resultMap id="rolesBase" type="Roles"> <id property="id" column="rid"/> <result property="name" column="rname"/> <collection property="users" column="rid" ofType="User" select="com.hdax.dao.UserMapper.findByRid"/> </resultMap> <!-- 根据用户角色中间表查询该角色被几种用户拥有--> <select id="findByUid" resultType="Roles"> select r.rid as id, r.rname as name from roles as r inner join users_roles as ur on r.rid = ur.rid where ur.uid = #{uid} </select>
5、测试
@MapperScan(“com.hdax.dao”)要在测试类上添加该注解
public class RolesMapperTest {
@Autowired
private RolesMapper rolesMapper;
@Test
public void findAll(){
List<Roles> roles = rolesMapper.selectList(null);
roles.forEach(System.out::println);
}
}