1.准备数据
sql.sql
2.创建java类.
[Order.java]
public class Order {
private Integer id ;
private String orderNo ;
//建立关联关系
private User user ;
//get/set
}
[Item.java]
public class Item {
private Integer id;
private String itemName;
//订单项和订单之间的关联关系
private Order order;
//get/set
}
3.创建Order映射文件
[resource/OrderMapper.xml]
<?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="orders">
<insert id="insert">
insert into orders(orderno,uid) values(#{orderNo},#{user.id})
</insert>
<!-- findById -->
<select id="selectOne" parameterType="int" resultMap="RM_Order">
select
o.id oid ,
o.orderno oorderno ,
o.uid uid ,
u.name uname ,
u.age uage
from orders o
left outer join users u on o.uid = u.id where o.id = #{id}
</select>
<!-- findAll -->
<select id="selectAll" resultMap="RM_Order">
select
o.id oid ,
o.orderno oorderno ,
o.uid uid ,
u.name uname ,
u.age uage
from orders o
left outer join users u on o.uid = u.id
</select>
<!-- 自定义结果映射 -->
<resultMap id="RM_Order" type="com.it18zhang.mybatisdemo.domain.Order">
<id property="id" column="oid"/>
<result property="orderNo" column="oorderno"/>
<association property="user" javaType="com.it18zhang.mybatisdemo.domain.User">
<id property="id" column="uid" />
<result property="name" column="uname" />
<result property="age" column="uage" />
</association>
</resultMap>
</mapper>
4.修改配置文件,添加映射。
[resource/mybatis-config.xml]
<!-- 引入映射文件 -->
<mappers>
<mapper resource="*Mapper.xml"/>
</mappers>
5.测试类
public class TestOrder {
/**
* insert
*/
@Test
public void insert() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession s = sf.openSession();
User u = new User();
u.setId(2);
Order o = new Order();
o.setOrderNo("No005");
o.setUser(u);
s.insert("orders.insert",o);
s.commit();
s.close();
}
@Test
public void selectOne() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession s = sf.openSession();
Order order = s.selectOne("orders.selectOne",1);
System.out.println(order.getOrderNo());
s.commit();
s.close();
}
@Test
public void selectAll() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession s = sf.openSession();
List<Order> list = s.selectList("orders.selectAll");
for(Order o : list){
System.out.println(o.getOrderNo() + " : " + o.getUser().getName());
}
s.commit();
s.close();
}
}
配置一对多
------------------
1.在User中增加orders集合。
public class User {
...
private List<Order> orders ;
//get/set
}
2.改造UserMapper.xml
组合多对一和一对多关联关系到一个实体(Order)中
---------------------------------------------
1.关系
Order(*) -> (1)User
Order(1) -> (*)Item
2.Order.java
class Order{
...
List<Item> items ;
//get/set
}
2'.修改配置文件增加别名
[resources/mybatis-config.xml]
<?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>
<typeAliases>
<typeAlias type="com.it18zhang.mybatisdemo.domain.User" alias="_User"/>
<typeAlias type="com.it18zhang.mybatisdemo.domain.Order" alias="_Order"/>
<typeAlias type="com.it18zhang.mybatisdemo.domain.Item" alias="_Item"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 引入映射文件 -->
<mappers>
<mapper resource="UserMapper.xml"/>
<mapper resource="OrderMapper.xml"/>
</mappers>
</configuration>
3.OrderMapper.xml
<?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="orders">
<insert id="insert">
insert into orders(orderno,uid) values(#{orderNo},#{user.id})
</insert>
<!-- findById -->
<select id="selectOne" parameterType="int" resultMap="RM_Order">
select
o.id oid ,
o.orderno oorderno ,
o.uid uid ,
u.name uname ,
u.age uage ,
i.id iid,
i.itemname iitemname
from orders o
left outer join users u on o.uid = u.id
left outer join items i on o.id = i.oid
where o.id = #{id}
</select>
<!-- findAll -->
<select id="selectAll" resultMap="RM_Order">
select
o.id oid ,
o.orderno oorderno ,
o.uid uid ,
u.name uname ,
u.age uage ,
i.id iid,
i.itemname iitemname
from orders o
left outer join users u on o.uid = u.id
left outer join items i on o.id = i.oid
</select>
<!-- 自定义结果映射 -->
<resultMap id="RM_Order" type="com.it18zhang.mybatisdemo.domain.Order">
<id property="id" column="oid"/>
<result property="orderNo" column="oorderno"/>
<association property="user" javaType="com.it18zhang.mybatisdemo.domain.User">
<id property="id" column="uid" />
<result property="name" column="uname" />
<result property="age" column="uage" />
</association>
<collection property="items" ofType="_Item">
<id property="id" column="iid" />
<result property="itemName" column="iitemname" />
</collection>
</resultMap>
</mapper>
4.测试
@Test
public void selectOne() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession s = sf.openSession();
Order order = s.selectOne("orders.selectOne",1);
System.out.println(order.getOrderNo() + order.getUser().getName());
for(Item i : order.getItems()){
System.out.println(i.getId() + ":" + i.getItemName());
}
s.commit();
s.close();
}