Mybatis查询
- 用户表和订单表,一个用户有多个订单,一个订单只对应一个用户,两者一对多关系
表
Orders表: Customer表:
mybatis-config配置文件
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.hjy.mybatis.test.dao"/>
</mappers>
bean创建
//Customer
public class Customer {
private Integer cid;
private String cname;
private String cpassword;
private List<Orders> ordersList;
}
//Orders
public class Orders {
private Integer oid;
private String oname;
private Customer customer;
}
dao创建
//Customer
public interface CustomerMapper {
List<Orders> selectUserOrderById(Integer cid);
}
//Orders
public interface OrdersMapper {
Orders selectOrdersById(Integer oid);
}
1、一对一查询
查询Orders:一个订单只属于一个用户,根据Orders的id查询与之唯一对应的Customer
<!--
namespace对应dao接口,xml文件必须和dao名字一样
resultMap用于查询查询字段和数据库列名不一致情况、级联查询
resultMap里的id必须写,如果其余字段与数据库列名一致,可以使用autoMapping=true
association用与一对一查询,使用javaType
collection用域多对多查询,使用ofType
column对应数据库列名,property对应bean字段
-->
<mapper namespace="com.hjy.mybatis.test.dao.OrdersMapper">
<resultMap id="selectOrdersById_Map" type="com.hjy.mybatis.test.bean.Orders" autoMapping="true">
<id column="oid" property="oid"/>
<association property="customer" javaType="com.hjy.mybatis.test.bean.Customer" autoMapping="true">
<id column="cid" property="cid"/>
</association>
</resultMap>
<select id="selectOrdersById" resultMap="selectOrdersById_Map" parameterType="int">
select * from
orders inner JOIN customer on
oid = #{oid} and orders.cid = customer.cid
</select>
</mapper>
2、一对多查询
查询Customer:一个用户有多个订单,根据Customer的id查找他所有的Orders
<mapper namespace="com.hjy.mybatis.test.dao.CustomerMapper">
<resultMap id="selectUserOrderById_Map" type="com.hjy.mybatis.test.bean.Customer" autoMapping="true">
<id column="cid" property="cid"/>
<collection property="ordersList" ofType="com.hjy.mybatis.test.bean.Orders" autoMapping="true">
<id column="oid" property="oid"/>
</collection>
</resultMap>
<select id="selectUserOrderById" resultMap="selectUserOrderById_Map">
select * from customer
inner join orders on customer.cid = #{cid}
</select>
</mapper>
查询
sessionUtils.java
//静态方法获取session对象
public class SessionUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "com\\hjy\\mybatis\\config\\mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession(true);
}
}
main方法
public class App {
public static void main(String[] args) {
try(SqlSession session = SessionUtils.getSession()) {
//一对一查询
OrdersMapper mapper = session.getMapper(OrdersMapper.class);
Orders orders = mapper.selectOrdersById(2);
System.out.println(orders);
//多对多查询
CustomerMapper mapper1 = session.getMapper(CustomerMapper.class);
List<Orders> orders1 = mapper1.selectUserOrderById(2);
System.out.println(orders1);
}
}
}