黑马Mybatis day3 多表查询 1.xml配置方式 2.注解方式

时间:2023-03-09 02:42:37
黑马Mybatis day3 多表查询 1.xml配置方式 2.注解方式
 package com.itheima.mozq;

 import com.itheima.domain.Order;
import com.itheima.mapper.OrderMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List; public class OneToOneTest {
OrderMapper mapper; @Before
public void before() throws IOException {
//加载配置
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
//创建SSF
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建SS
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(OrderMapper.class);
} @Test
public void testFindAll(){
List<Order> orderList = mapper.findAll();
for (Order order : orderList) {
System.out.println(order);
}
}
}

OneToOneTest

 package com.itheima.mozq;

 import com.itheima.domain.User;
import com.itheima.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List; public class OneToManyTest {
UserMapper mapper; @Before
public void before() throws IOException {
//加载配置
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
//创建SSF
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建SS
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
} @Test
public void testFindWithOrder(){
List<User> userList = mapper.findWithOrder();
for (User user : userList) {
System.out.println(user);
}
}
}

OneToManyTest

 package com.itheima.mozq;

 import com.itheima.domain.Order;
import com.itheima.domain.User;
import com.itheima.mapper.OrderMapper;
import com.itheima.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List; public class ManyToManyTest {
UserMapper mapper; @Before
public void before() throws IOException {
//加载配置
InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
//创建SSF
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//创建SS
SqlSession sqlSession = sqlSessionFactory.openSession(true);
mapper = sqlSession.getMapper(UserMapper.class);
} @Test
public void testFindWithRole(){
List<User> userList = mapper.findWithRole();
for (User user : userList) {
System.out.println(user);
}
}
}

ManyToManyTest

 <?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> <!--通过properties标签加载外部properties文件-->
<properties resource="jdbc.properties"></properties> <!--自定义别名-->
<typeAliases>
<typeAlias type="com.itheima.domain.User" alias="User"></typeAlias>
<typeAlias type="com.itheima.domain.Role" alias="Role"></typeAlias>
<typeAlias type="com.itheima.domain.Order" alias="Order"></typeAlias>
</typeAliases> <!--数据源环境-->
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments> <!--设置映射关系-->
<mappers>
<!--指定接口所在的包-->
<package name="com.itheima.mapper"></package>
</mappers> </configuration>

sqlMapConfig.xml

 ### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### log4j.rootLogger=debug, stdout

log4j.properties

 jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3307/test
jdbc.username=root
jdbc.password=root

jdbc.properties

 package com.itheima.mapper;

 import com.itheima.domain.Order;
import com.itheima.domain.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select; import java.util.List; public interface OrderMapper { @Select("select * from orders")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "ordertime", property = "ordertime"),
@Result(column = "total", property = "total"),
@Result(
column = "uid",
property = "user",
javaType = User.class,
one = @One(select = "com.itheima.mapper.UserMapper.findById")) })
List<Order> findAll(); @Select("select * from orders where uid=#{uid}")
List<Order> findByUid(int uid);
}

OrderMapper

 package com.itheima.mapper;

 import com.itheima.domain.Role;
import org.apache.ibatis.annotations.Select; import java.util.List; public interface RoleMapper { @Select("select * from (select ur.roleId from sys_user_role ur where ur.userId = #{uid}) as t1 left join sys_role t2 on t1.roleId=t2.id;")
List<Role> findByUid(int uid);
}

RoleMapper

 package com.itheima.mapper;

 import com.itheima.domain.User;
import org.apache.ibatis.annotations.*; import java.util.List; public interface UserMapper { @Insert("insert into user(username, password, birthday) values(#{username}, #{password}, #{birthday})")
void save(User user); @Delete("delete from user where id=#{id}")
void delete(int id); @Update("update user set username=#{username}, password=#{password}, birthday=#{birthday} where id=#{id}")
void update(User user); @Select("select * from user")
List<User> findAll(); @Select("select * from user where id=#{id}")
List<User> findById(int id); @Select("select * from user")
@Results({
@Result(id=true ,column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(column = "birthday", property = "birthday"),
@Result(
column = "id",
property = "orderList",
javaType = List.class,
many = @Many(select = "com.itheima.mapper.OrderMapper.findByUid")
)
})
List<User> findWithOrder(); @Select("select * from user")
@Results({
@Result(id=true ,column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(column = "birthday", property = "birthday"),
@Result(
column = "id",
property = "roleList",
javaType = List.class,
many = @Many(select = "com.itheima.mapper.RoleMapper.findByUid")
)
})
List<User> findWithRole(); }

UserMapper

 package com.itheima.domain;

 import java.util.Date;

 public class Order {

     private int id;
private Date ordertime;
private double total; //当前订单属于哪一个用户
private User user; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public Date getOrdertime() {
return ordertime;
} public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
} public double getTotal() {
return total;
} public void setTotal(double total) {
this.total = total;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String toString() {
return "Order{" +
"id=" + id +
", ordertime=" + ordertime +
", total=" + total +
", user=" + user +
'}';
}
}

Order

 package com.itheima.domain;

 public class Role {

     private int id;
private String roleName;
private String roleDesc; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getRoleName() {
return roleName;
} public void setRoleName(String roleName) {
this.roleName = roleName;
} public String getRoleDesc() {
return roleDesc;
} public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
} @Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", roleDesc='" + roleDesc + '\'' +
'}';
}
}

Role

 package com.itheima.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<Role> roleList; public List<Role> getRoleList() {
return roleList;
} public void setRoleList(List<Role> roleList) {
this.roleList = roleList;
} //描述的是当前用户具有的订单
private List<Order> orderList;
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
} 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 +
", roleList=" + roleList +
", orderList=" + orderList +
'}';
}
}

User