一、一对一
一对多采用
association标签进行封装javaBean
sqlMapper
<resultMap type="account" id="accoutMap">
<!-- 封装主键 -->
<id column="id" property="aid" />
<!-- 封装普通属性 -->
<result column="uid" property="userId" />
<result column="money" property="userMoney" />
<!-- 封装一对一javaBean -->
<association property="user" javaType="user">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="birthday" property="birthday" />
<result column="sex" property="sex" />
<result column="address" property="address" />
</association>
</resultMap>
<select id="findAll" resultMap="accoutMap">
SELECT * FROM account a LEFT JOIN
USER u ON u.id = a.uid;
</select>
account
private Integer aid;
private Integer userId;
private Double userMoney;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getAid() {
return aid;
}
public void setAid(Integer aid) {
this.aid = aid;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Double getUserMoney() {
return userMoney;
}
public void setUserMoney(Double userMoney) {
this.userMoney = userMoney;
}
user
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
private List<Account> accounts;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public List<Account> getAccounts() {
return accounts;
}
public void setAccounts(List<Account> accounts) {
this.accounts = accounts;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
test
SqlSessionFactory sqlSessionFactory;
@Before
public void beforeTest() throws IOException {
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
}
@Test
public void testAccout() {
SqlSession session = sqlSessionFactory.openSession();
AccountDao accountDao = session.getMapper(AccountDao.class);
List<Account> findAll = accountDao.findAll();
for (Account account : findAll) {
System.out.println(account);
}
}
核心配置文件
<configuration>
<properties resource="jdbc.properties">
</properties>
<typeAliases>
<!-- <typeAlias type="cn.it.demo.domain.User" alias="uu"/> -->
<package name="cn.it.demo.domain" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.it.demo.dao"/>
<!-- <mapper resource="UserMapper.xml"></mapper> -->
<!--<mapper class="cn.itcast.demo.dao.UserDao" /> -->
</mappers>
</configuration>
二、一对多
collection标签进行封装javaBean的集合
mybatis支持多重封装
<resultMap type="user" id="userMap">
<!-- 用户主键信息 -->
<id column="id" property="id" />
<!-- 用户的普通属性 -->
<result column="username" property="username" />
<result column="birthday" property="birthday" />
<result column="sex" property="sex" />
<result column="address" property="address" />
<collection property="accounts" ofType="Account">
<id column="aid" property="aid" />
<result column="uid" property="userId" />
<result column="money" property="userMoney" />
</collection>
</resultMap>
<select id="findAll" resultMap="userMap" parameterType="map">
SELECT
u.*, a.id aid,a.uid,a.money FROM USER u LEFT JOIN account a ON
(u.id =
a.uid)
</select>
三、多对多
多对多其实就是两个一对多
<!-- 实体类和表之间的关系 -->
<resultMap type="user" id="userMapper">
<!-- 实体类中属性和表字段之间的关系 -->
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="birthday" property="birthday"/>
<result column="address" property="address"/>
<!-- 配置集合的关联对象
property:集合属性名称
ofType:集合中元素的全限定类名
-->
<collection property="roles" ofType="cn.itcast.entity.Role">
<id column="rid" property="id"/>
<result column="role_name" property="rolename"/>
<result column="role_desc" property="roledesc"/>
</collection>
</resultMap>
<!-- 查询所有用户
一个多操作
-->
<select id="findAllUser" resultMap="userMapper">
SELECT u.*,r.id rid , r.role_name,r.role_desc FROM USER u LEFT JOIN user_role ur ON (u.id = ur.uid)
LEFT JOIN role r ON(ur.rid = r.id)
</select>
<resultMap type="role" id="roleMapper">
<id column="rid" property="id"/>
<result column="role_name" property="rolename"/>
<result column="role_desc" property="roledesc"/>
<!-- 配置关联的集合对象 -->
<collection property="users" ofType="user">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="birthday" property="birthday"/>
<result column="address" property="address"/>
</collection>
</resultMap>
<!-- 查询所有角色的同时查询角色的用户 -->
<select id="findAllRoles" resultMap="roleMapper">
SELECT r.id rid,r.role_name,r.role_desc,u.* FROM role r LEFT JOIN user_role ur ON (r.id = ur.rid)
LEFT JOIN USER u ON (ur.uid = u.id)
</select>