Mybatis笔记整理2(各种关联查询)

POJO类,均省略setget与tostring方法

User类

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;// 地址
	
	//附加对象List
	private List<Orders> ordersList;
	}

Order类

public class Orders  implements Serializable{

	private static final long serialVersionUID = 1L;
	private Integer id;
    private Integer userId;
    private String number;
    private Date createtime;
    private String note;    
    //附加对象  用户对象
    private User user;

QueryVo

public class QueryVo implements Serializable {

	private static final long serialVersionUID = 1L;
	private User user;
	Integer[] ids;
	}

UserMapper各种查询

UserMapper

public interface UserMapper {

	
	//遵循四个原则
	//接口 方法名  == User.xml  id 
	//返回值类型    Mapper.xml文件中返回值类型要一致
	//方法的入参类型 与Mapper.xml中入参的类型要一致
	//命名空间 绑定此接口
	public User findUserById(Integer id);
	public List<User> findUserByQueryVo(QueryVo vo);
	
	//查询数据条数
	public Integer countUser();
	
	//根据性别和名字查询用户
	public  List<User> selectUserBySexAndUsername(User user);
	
	//根据多个id查询用户信息
	//public List<User>  selectUserByIds(QueryVo  vo);
	public List<User>  selectUserByIds(@Param(value="idarray")Integer[] ids);
	//public List<User>  selectUserByIds(List<Integer> ids);

}

UserMapper.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">
<!-- 写Sql语句   -->
<mapper namespace="com.itheima.mybatis.mapper.UserMapper">
	<sql id="selector">
		select * from user
	</sql>

	<!-- 通过ID查询一个用户 -->
	<select id="findUserById" parameterType="Integer" resultType="User">
		select * from user where id = #{v}
	</select>
	
	<!-- //根据用户名称模糊查询用户列表
	#{}    select * from user where id =     占位符  ? ==  '五'
	${}    select * from user where username like '%五%'  字符串拼接  
	
	 -->
	<select id="findUserByUsername" parameterType="String" resultType="com.itheima.mybatis.pojo.User">
		select * from user where username like "%"#{haha}"%"
	</select>
	
	<!-- 添加用户 -->
	<insert id="insertUser" parameterType="com.itheima.mybatis.pojo.User">
		<selectKey keyProperty="id" resultType="Integer" order="AFTER">
			select LAST_INSERT_ID()
		</selectKey>
		insert into user (username,birthday,address,sex) 
		values (#{username},#{birthday},#{address},#{sex})
	</insert>
	
	<!-- 更新 -->
	<update id="updateUserById" parameterType="com.itheima.mybatis.pojo.User">
		update user 
		set username = #{username},sex = #{sex},birthday = #{birthday},address = #{address}
		where id = #{id}
	</update>
	
	<!-- 删除 -->
	<delete id="deleteUserById" parameterType="Integer">
		delete from user 
		where id = #{vvvvv}
	</delete>
	
	<!-- 根据用户名模糊查询 -->
	<select id="findUserByQueryVo" parameterType="QueryVo" resultType="com.itheima.mybatis.pojo.User">
		select * from user where username like "%"#{user.username}"%"
	</select>
	
	<!-- 查询用户条数
	 -->
	 <select id="countUser"  resultType="Integer">
	 	select count(*) from user 
	 </select>
	 
	 <!-- 根据性别和名字查询用户     where可以去掉第一个and      -->
	 <select id="selectUserBySexAndUsername" parameterType="User" resultType="User">
	 
		 	<include refid="selector"></include>
		 	<where>
		 	<if test="sex !=null and sex !=''">
			 	and sex=#{sex}	
		 	
		 	</if>
		 	<if test="username !=null and username!=''">
				and username=#{username}
		 	</if>
	 	</where>
	 </select>
	 
	 <!-- 多个ID -->
	<select id="selectUserByIds"  parameterType="QueryVo"  resultType="User">
			<include refid="selector"></include>
			<where>
				id in
				<foreach collection="idarray"  item="id"  separator="," open="("  close=")">
					#{id}	
				</foreach>
			</where>
		
	</select>
</mapper>

数据库操作

public class MybatisMapperTest {

	//根据ID查询
	@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帮我生成一个实现类  (给接口)
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		
		
		User user = userMapper.findUserById(10);
		System.out.println(user);
	}
	//根据包装类模糊查询
	@Test
	public void testMapperQueryVo() throws Exception {
		//加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream in = Resources.getResourceAsStream(resource);
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		//创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//SqlSEssion帮我生成一个实现类  (给接口)
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		QueryVo  vo =new QueryVo();
		User  user =new User();
		user.setUsername("五");
		vo.setUser(user);
		
		List<User> us = userMapper.findUserByQueryVo(vo);
		for (User u : us) {
			System.out.println(u);
		}
	
	}
	//简单类型查询
	@Test
	public void testMapperQueryVoCount() throws Exception {
		//加载核心配置文件
		String resource = "sqlMapConfig.xml";
		InputStream in = Resources.getResourceAsStream(resource);
		//创建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		//创建SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		
		//SqlSEssion帮我生成一个实现类  (给接口)
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		QueryVo  vo =new QueryVo();
		User  user =new User();
		user.setUsername("五");
		vo.setUser(user);
		
		Integer i = userMapper.countUser();
		System.out.println(i);
		
	
	}
	 //查询订单表order的所有数据
	@Test
	public void testOrderList() 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 mapper = sqlSession.getMapper(OrderMapper.class);
		
		List<Orders> ordersList = mapper.selectOrdersList();
		for (Orders orders : ordersList) {
			System.out.println(orders);
		}
	}
	
	 //  根据性别和名字查询用户 
		@Test
		public void testfindUserBySexAndUsername() throws Exception {
			//加载核心配置文件
			String resource = "sqlMapConfig.xml";
			InputStream in = Resources.getResourceAsStream(resource);
			//创建SqlSessionFactory
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
			//创建SqlSession
			SqlSession sqlSession = sqlSessionFactory.openSession();
			
			//SqlSEssion帮我生成一个实现类  (给接口)
			UserMapper mapper = sqlSession.getMapper(UserMapper.class);
			User user=new User();
			//user.setSex("女");
			user.setUsername("天海翼");
			List<User> users = mapper.selectUserBySexAndUsername(user);
			for (User user2 : users) {
				System.out.println(user2);
			}
		}
		
		 //  根据多个ID查询用户 
		@Test
		public void testfindUserIDs() throws Exception {
			//加载核心配置文件
			String resource = "sqlMapConfig.xml";
			InputStream in = Resources.getResourceAsStream(resource);
			//创建SqlSessionFactory
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
			//创建SqlSession
			SqlSession sqlSession = sqlSessionFactory.openSession();
			
			//SqlSEssion帮我生成一个实现类  (给接口)
			UserMapper mapper = sqlSession.getMapper(UserMapper.class);
			/*列表
			 * QueryVo  vo=new QueryVo();
			List<Integer>  id=new ArrayList<>();
			id.add(24);
			id.add(25);
			id.add(28);
			vo.setIdsList(id);	
			List<User> ids = mapper.selectUserByIds(vo);
			for (User user : ids) {
				System.out.println(user);
			}*/
			//QueryVo  vo=new QueryVo();
			/*Integer [] ids = new Integer[2];
			ids[0]=1;
			ids[1]=26;*/
			
			Integer[] ids = {1,28};
			//vo.setIds(ids);
			
			List<User> users = mapper.selectUserByIds(ids);
			for (User user : users) {
				System.out.println(user);
			}
			
			
		}
}

用户订单关联查询

OrderMapper

public interface OrderMapper {
	
	
//	查询订单表order的所有数据

	public List<Orders>  selectOrdersList();
	//一对一关联查询,以订单为中心,关联用户
	public List<Orders> selectOrders();
	
	//一对多关联,以用户为中心
	public List<User>  selectUserList();
	
}

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">
<!-- 写Sql语句   -->
<mapper namespace="com.itheima.mybatis.mapper.OrderMapper">
	<!-- 查询订单表order的所有数据 -->
	<!-- <select id="selectOrdersList" resultType="Orders"> -->
	<resultMap type="Orders" id="orders">
		<id column="id" property="id"/>
		<result column="user_id" property="userId"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
	</resultMap>
		
	
	<select id="selectOrdersList"  resultMap="orders">
		select id,user_id,number,createtime, note from orders
	</select>
	
	
	<!-- 一对一关联查询,以订单为中心,关联用户 -->
	<!-- 定义Javabean(Orders)与数据库表orders之间映射 -->
	<resultMap type="Orders" id="order">		
		<id column="id"  property="id"/>
		<result column="createtime"  property="createtime"/> 
		<result column="user_id"  property="userId"/>
		<result column="number"  property="number"/>
		<result column="note"  property="note"/>
		<!-- 一对一 -->
		<!-- 定义User自身属性和与数据库表user之间字段映射 -->
		<association property="user"  javaType="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"/>
		</association>
	</resultMap>
	<select id="selectOrders"  resultMap="order">
	SELECT  
	o.id,
	o.user_id,
	o.number,
	o.note,
	o.createtime,
	u.username  
	FROM orders o  
	LEFT JOIN USER u  
	ON o.user_id=u.id
	</select>
	
	
	<!-- 一对多关联,以用户为中心 -->
	<resultMap type="User" id="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 property="ordersList"  ofType="Orders">
			<id  column="id"  property="id"/>
			<result  column="user_id"  property="userId"/>
			<result column="number"  property="number"/> 
			<result column="createtime"  property="createtime"/> 
			<result column="note"  property="note"/> 
		</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>

</mapper>

关联查询

public class MybatisMapperTest2 {

	
	//一对一关联查询,以订单为中心,关联用户
		@Test
		public void testOrderList() 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<Orders> selectOrdersList = orderMapper.selectOrders();
			for (Orders orders : selectOrdersList) {
				System.out.println(orders);
			}
		}
		
		//一对多关联查询,以用户为中心,关联用户
				@Test
				public void testUserList() 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<User> users = orderMapper.selectUserList();
					for (User user : users) {
						System.out.println(user);
					}
				}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值