Mybatis多表查詢
一對一查詢
一對一查詢的模型MapperScannerConfigurer
用戶表和訂單表的關系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶
創建Order和User實體
public class Order {private int id;private Date ordertime;private double total;//代表當前訂單從屬于哪一個客戶private User user;
}public class User {private int id;private String username;private String password;private Date birthday;}
創建接口
public interface OrderMapper {List<Order> findAll();
}
配置OrderMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.controller.OrderMapper">
<resultMap id="orderMap" type="com.model.Order"><result column="id" property="id" /><result column="ordertime" property="ordertime"/><result column="total" property="total"/><association property="user" javaType="com.model.User"><result column="uid" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="birthday" property="birthday"/></association>
</resultMap><select id="findAll" resultMap="orderMap">select * from orders o,user u where o.uid=u.id</select>
</mapper>
測試結果
@Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);List<Order> all = mapper.findAll();System.out.println(all);}
一對多查詢
一對多查詢的模型
用戶表和訂單表的關系為,一個用戶有多個訂單,一個訂單只從屬于一個用戶
一對多查詢的需求:查詢一個用戶,與此同時查詢出該用戶具有的訂單
1.2.3 修改User實體
public class Order {private int id;private Date ordertime;private double total;//代表當前訂單從屬于哪一個客戶private User user;
}public class User {private int id;private String username;private String password;private Date birthday;//代表當前用戶具備哪些訂單private List<Order> orderList;
}
創建UserMapper接口
public interface UserMapper {List<User> findAll();
}
配置UserMapper.xml
<resultMap id="userMap" type="com.model.User"><result column="username" property="username" /><result column="password" property="password"/><result column="id" property="id"/><result column="birthday" property="birthday"/><collection property="orderList" ofType="com.model.Order"><result property="id" column="oid"/><result property="ordertime" column="ordertime"/><result property="total" column="total"/></collection></resultMap><select id="findAll" resultMap="userMap">select * ,o.id oid from user u left join orders o on u.id=o.uid</select>
測試結果
@Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);userMapper mapper = sqlSession.getMapper(userMapper.class);List<User> all = mapper.findAll();System.out.println(all);}
多對多查詢
多對多查詢的模型
用戶表和角色表的關系為,一個用戶有多個角色,一個角色被多個用戶使用
多對多查詢的需求:查詢用戶同時查詢出該用戶的所有角色
創建Role實體,修改User實體
public class User {private int id;private String username;private String password;private Date birthday;//代表當前用戶具備哪些訂單private List<Order> orderList;//代表當前用戶具備哪些角色private List<Role> roleList;
}public class Role {private int id;private String rolename;}
添加UserMapper接口方法
List<User> findAllUserAndRole();
配置UserMapper.xml
<resultMap id="roleMap" type="com.model.User"><result column="username" property="username" /><result column="password" property="password"/><result column="id" property="id"/><result column="birthday" property="birthday"/><collection property="roleList" ofType="com.model.Role"><result property="id" column="rid"/><result property="rolename" column="rolename"/></collection></resultMap><select id="findAllUserAndRole" resultMap="roleMap">select u.*,r.id rid,r.* from user u left join sys_user_role ur on u.id=ur.userid inner join sys_role r on r.id=ur.roleid</select>
測試結果
@Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);userMapper mapper = sqlSession.getMapper(userMapper.class);List<User> all = mapper.findAllUserAndRole();System.out.println(all);}