您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
06-mybatis的多表操作-多对多配置实现
发布时间:2025-02-02 12:28:15编辑:雪饮阅读()
-
基于上篇现在建立Role.java如:
package sp28.domain;
public class Role {
private int id;
private String roleName;
private String roleDesc;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", roleDesc='" + roleDesc + '\'' +
'}';
}
}
然后User.java中新增roleList属性并生成getter和setter,并重新编写toString方法
package sp28.domain;
import java.util.Date;
import java.util.List;
public class User {
private int id;
private String username;
private String password;
private Date birthday;
private List<Order> orderList;
private List<Role> roleList;
public List<Role> getRoleList() {
return roleList;
}
public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
}
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday=" + birthday +
", orderList=" + orderList +
", roleList=" + roleList +
'}';
}
}
然后UserMapper.java中新增查询用户并每个用户都包含其角色列表的抽象方法
package sp28.dao;
import sp28.domain.User;
import java.util.List;
public interface UserMapper {
public List<User> findAll();
public List<User> findUserAndRoleAll();
}
sqlMapConfig.xml中要定义role类型别名,因为我要用别名去定义findUserAndRoleAll的实现中调用。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<typeAliases>
<typeAlias type="sp28.domain.User" alias="user"/>
<typeAlias type="sp28.domain.Order" alias="order"/>
<typeAlias type="sp28.domain.Role" alias="role"/>
</typeAliases>
<typeHandlers>
<typeHandler handler="sp28.handler.DateTypeHandler"/>
</typeHandlers>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sp28/mapper/UserMapper.xml"></mapper>
<mapper resource="sp28/mapper/OrderMapper.xml"></mapper>
</mappers>
</configuration>
然后在UserMapper.xml中去定义findUserAndRoleAll的实现
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sp28.dao.UserMapper">
<resultMap id="userMap" type="user">
<!--
column:数据表的字段名称
property:实体的属性名称
-->
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="birthday" column="birthday"/>
<!--
配置集合信息
property:集合名称
ofType: 集合中元素的数据类型
-->
<collection property="orderList" ofType="order">
<!--封装order的数据-->
<id property="id" column="oid"/>
<result column="ordertime" property="ordertime"/>
<result column="total" property="total"/>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
select *,o.id oid from user u,orders o where u.id=o.uid
</select>
<resultMap id="userRoleMap" type="user">
<!--
column:数据表的字段名称
property:实体的属性名称
-->
<!--user信息-->
<id column="userId" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="birthday" property="birthday"/>
<!--user内部的roleList信息-->
<collection property="roleList" ofType="role">
<id column="roleId" property="id"/>
<result column="roleName" property="roleName"/>
<result column="roleDesc" property="roleDesc"/>
</collection>
</resultMap>
<select id="findUserAndRoleAll" resultMap="userRoleMap">
select * from user u,sys_user_role ur,sys_role r where u.id=ur.userId and ur.roleId=r.id
</select>
</mapper>
最后编写测试方法test3于MapperTest.java中
package sp28;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import sp28.dao.OrderMapper;
import sp28.dao.UserMapper;
import sp28.domain.Order;
import sp28.domain.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MapperTest {
@Test
public void test1() throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class);
List<Order> orderList=mapper.findAll();
for (Order order : orderList) {
System.out.println(order);
}
sqlSession.close();
}
@Test
public void test2() throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
List<User> userList=mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void test3() throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
List<User> userList=mapper.findUserAndRoleAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
关键字词:mybatis
相关文章
- 05-mybatis的多表操作-一对多配置实现
- 04-mybatis的多表操作-一对一的配置实现2
- 03-mybatis的多表操作-一对一的配置实现
- 02-mybatis的多表操作-订单环境代码实现
- 06-mybatis核心配置文件深入-plugins分页助手的分页相
- 05-mybatis核心配置文件深入-plugins分页助手的代码实
- 04-mybatis核心配置文件深入-plugins标签介绍和查询全
- 03-mybatis核心配置文件深入-自定义DateTypeHandler实
- 02-mybatis核心配置文件深入-typeHandler测试环境搭建
- 04-mybatis映射文件深入-动态sql-sql片段的抽取