您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
06-mybatis注解开发-一对多的注解开发
发布时间:2025-02-04 09:40:59编辑:雪饮阅读()
-
在User.java中新增orders属性并并getter和setter以及重新toString,如:D:\os\SpringWebApp\SpringProject2Module9\src\main\java\sp29\domain\User.java:
package sp29.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> orders;
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
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 +
", orders=" + orders +
'}';
}
}
然后OderMapper.java接口中新增findByUid抽象方法,提供给UserMapper以User为主体查询每个user的订单列表,如D:\os\SpringWebApp\SpringProject2Module9\src\main\java\sp29\dao\OrderMapper.java:
package sp29.dao;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import sp29.domain.Order;
import sp29.domain.User;
import java.util.List;
public interface OrderMapper {
@Select("select * from orders where uid=#{uid}}")
public List<Order> findByUid(int uid);
@Select(" select * from orders")
@Results({
@Result(column="id",property = "id"),
@Result(column="ordertime",property = "ordertime"),
@Result(column="total",property = "total"),
@Result(
property = "user",
column = "uid",
javaType = User.class,
one = @org.apache.ibatis.annotations.One(
select = "sp29.dao.UserMapper.findById"
)
)
})
public List<Order> findAll();
}
UserMapper以User为主体查询每个user的订单列表,如D:\os\SpringWebApp\SpringProject2Module9\src\main\java\sp29\dao\UserMapper.java:
package sp29.dao;
import org.apache.ibatis.annotations.*;
import sp29.domain.User;
import java.util.List;
public interface UserMapper {
@Select("select * from user")
public List<User> findAll();
@Select("select * from user where id=#{id}")
public User findById(int id);
@Delete("delete from user where id=#{id}")
public void delete(int id);
@Update("update user set username=#{username},password=#{password} where id=#{id}")
public void update(User user);
@Insert("insert into user values(#{id},#{username},#{password},'','',#{birthday})")
public void save(User user);
@Select("select * from user")
@Results({
@Result(column="id",property = "id"),
@Result(column = "username",property = "username"),
@Result(column = "password",property = "password"),
@Result(
property = "orders",
column = "id",
javaType = List.class,
many = @Many(select = "sp29.dao.OrderMapper.findByUid")
)
})
public List<User> findUserAndOrdersAll();
}
然后编写测试类如D:\os\SpringWebApp\SpringProject2Module9\src\test\java\sp29\MapperTest3.java:
package sp29;
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.Before;
import org.junit.Test;
import sp29.dao.UserMapper;
import sp29.domain.User;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MapperTest3 {
private UserMapper mapper;
@Before
public void before() throws IOException{
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession(true);
mapper=sqlSession.getMapper(UserMapper.class);
}
@Test
public void testFindAll(){
List<User> userList=mapper.findUserAndOrdersAll();
for (User user:userList) {
System.out.println(user);
}
}
}
关键字词:mybatis,注解,一对多