Mybatis(四)多表操作
2024-08-29 01:43:52
数据库如下:
一、创建数据库所对应的bean类
public class User {
private Integer uId;
private String username;
private String sex;
private String address; public Integer getuId() {
return uId;
} public void setuId(Integer uId) {
this.uId = uId;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} 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;
} @Override
public String toString() {
return "User{" +
"uId=" + uId +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
public class Order { private Integer oId;
private Integer number;
private String orderName;
private Integer userId; private User user; public Integer getoId() {
return oId;
} public void setoId(Integer oId) {
this.oId = oId;
} public Integer getNumber() {
return number;
} public void setNumber(Integer number) {
this.number = number;
} public String getOrderName() {
return orderName;
} public void setOrderName(String orderName) {
this.orderName = orderName;
} public Integer getUserId() {
return userId;
} public void setUserId(Integer userId) {
this.userId = userId;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String toString() {
return "Order{" +
"oId=" + oId +
", number=" + number +
", orderName='" + orderName + '\'' +
", userId=" + userId +
", user=" + user +
'}';
}
}
二、核心配置文件sqlMapConfig.xml
(1)、jdbc.properties与sqlMapperConfig.xml文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/school?characterEncoding=utf-8
jdbc.username=root
jdbc.password=dyhroot
<?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 resource="jdbc.properties"/> <!--别名的应用,一定要特别注意标签是有顺序的,不然会报异常-->
<typeAliases>
<!--这样写就是该文件中所有的"dyh.bean.User" 都用User代替了-->
<!--这样写有一个弊端,就是除了用户之外还有其他实体类,比如Order、Customer…… 那就要写n别名了,所以不推荐使用-->
<!--<typeAlias type="dyh.bean.User" alias="User"/>--> <!--推荐使用包的形式-->
<package name="dyh.bean"/>
</typeAliases> <environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<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> <!-- Mapper的位置 Mapper.xml 写Sql语句的文件的位置 -->
<mappers>
<mapper resource="orderMapper/OrderMapper.xml"/>
<!--使用mapper接口类路径
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。--> <!--<package name="userMapper"/>--> <!--注册指定包下的所有mapper接口
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。--> <!--注意:但是这两种引入sql映射文件的办法,用IDEA的maven工程,这样写有问题,还没找到原因,有可能是不可以这么书写-->
</mappers> </configuration>
三、代理接口OrderMapper与对应的映射文件OrderMapper.xml
public interface OrderMapper {
//一对一关联查询,以订单为中心关联用户
public List<Order> selectOrders();
}
<?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="dyh.mapper.OrderMapper"> <!--一对一关联查询,以订单为中心关联用户
public List<Order> selectOrders();--> <resultMap id="order" type="Order">
<!--orders表操作,数据库字段user_id 与 Order类中的属性userId 不一致,其他字段不可省略-->
<result property="userId" column="user_id"/>
<result property="orderName" column="orderName"/>
<result property="oId" column="oId"/>
<result property="number" column="number"/> <association property="user" javaType="User">
<id property="uId" column="uId"/>
<result property="username" column="username"/>
<result property="sex" column="sex"/>
<result property="address" column="address"/>
</association> </resultMap> <select id="selectOrders" resultMap="order">
SELECT
o.orderName,
o.number,
o.user_id,
o.oId,
u.uId,
u.username,
u.sex,
u.address
FROM
orders o
LEFT JOIN
users u
ON
o.user_id = u.uId;
</select>
</mapper>
四、测试
package dyh.test; import dyh.bean.Order;
import dyh.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.Test; import java.io.InputStream;
import java.util.List; public class MybatisTest { @Test
public void testMapper() throws Exception {
//加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession(); //SqlSEssion帮我生成一个实现类 (给接口)
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class); List<Order> orders = orderMapper.selectOrders();
for (Order order : orders) {
System.out.println(order);
}
}
}
测试结果:
其他:
一对多关联(步骤同上)
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address; //一个用户对应多张订单
private List<Orders> ordersList;
//一对多关联
public List<User> selectUserList(); -->
<resultMap type="User" id="user">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<!-- 一对多 -->
<collection property="ordersList" ofType="Orders">
<id column="id" property="id"/>
<result column="number" property="number"/>
</collection>
</resultMap>
<select id="selectUserList" resultMap="user">
SELECT
o.id,
o.user_id,
o.number,
o.createtime,
u.username
FROM user u
left join orders o
on o.user_id = u.id
</select>
最新文章
- C#中ToString()格式详解
- SNMP
- 利用nodejs的cheerio抓取网站数据
- 第三章 Docker 入门
- bzoj1854
- poj 2763: [JLOI2011]飞行路线(spfa分层图最短路)
- CentOS 7 之Helloworld with c
- poj 1659 Frogs&;#39; Neighborhood (度序列)
- Appium基于安卓的各种FindElement的控件定位方法实践和建议
- Java的properties文件读取和属性修改
- c/c++ 头文件的血案
- DataTable插件报错:Uncaught TypeError: Cannot read property &#39;style&#39; of undefined
- LOJ2541 PKUWC2018 猎人杀 期望、容斥、生成函数、分治
- Codeforces Round #341 (Div. 2) E - Wet Shark and Blocks
- 网络通信协议二之ISO/OSI参考模型
- 彻底删除vscode及安装的插件和个人配置信息
- Informatica 常用组件Lookup之二 已连接和未连接的查找
- MySql存储过程简单实例
- 从零开始玩转JMX(一)——简介和Standard MBean
- 架构实战项目心得(六):后台服务nosql数据库mongodb