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;// 地址//附加对象Listprivate 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查询@Testpublic void testMapper() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//SqlSEssion帮我生成一个实现类  (给接口)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.findUserById(10);System.out.println(user);}//根据包装类模糊查询@Testpublic void testMapperQueryVo() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession 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);}}//简单类型查询@Testpublic void testMapperQueryVoCount() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession 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的所有数据@Testpublic void testOrderList() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//SqlSEssion帮我生成一个实现类  (给接口)OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);List<Orders> ordersList = mapper.selectOrdersList();for (Orders orders : ordersList) {System.out.println(orders);}}//  根据性别和名字查询用户 @Testpublic void testfindUserBySexAndUsername() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession 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查询用户 @Testpublic void testfindUserIDs() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession 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 oON o.user_id=u.id  </select></mapper>

关联查询

public class MybatisMapperTest2 {//一对一关联查询,以订单为中心,关联用户@Testpublic void testOrderList() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//SqlSEssion帮我生成一个实现类  (给接口)OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);List<Orders> selectOrdersList = orderMapper.selectOrders();for (Orders orders : selectOrdersList) {System.out.println(orders);}}//一对多关联查询,以用户为中心,关联用户@Testpublic void testUserList() throws Exception {//加载核心配置文件String resource = "sqlMapConfig.xml";InputStream in = Resources.getResourceAsStream(resource);//创建SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);//创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();//SqlSEssion帮我生成一个实现类  (给接口)OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);List<User> users = orderMapper.selectUserList();for (User user : users) {System.out.println(user);}}}

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

  1. mybatis笔记整理

    前言: mybatis可以说是最容易上手的持久层框架了,相比于hibernate 而言,它都是直接用sql语句对数据库进行操作,而不是用hql,尤其是关联关系复杂的时候,mybatis更容易实现.下面 ...

  2. Mybatis高级应用 多表关联查询

    >以订单商品数据模型为例子: 存在以下四张表,用户表user,用户订单表orders,订单明细表orderdetail,商品表items.四张表之间的关系如下图所示: 下面给出四张表结构的详细定 ...

  3. Mybatis笔记整理1(基本文件与配置,三种方式完成数据库操作)

    基本文件与配置 pojo类,省略setget,tostring方法 public class User implements Serializable {/*** */private static f ...

  4. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  5. MyBatis实现中间表关联查询

    MyBatis实现中间表关联查询 通常构建数据多对多模型的关系时,我们需要再建立一张中间表来关联另外两张表. 下面介绍一下,怎么用MyBatis来实现中间表关联查询并封装到实体类对象中. 现在有三张表 ...

  6. MyBatis多表关联查询

    本文将向大家介绍 MyBatis 中的多表关联查询 主要通过两个示例来说明在 MyBatis 中如何实现 一对多,多对一 和 多对多 查询 第一个示例:老师和学生关联 ​ 老师和学生是一对多的关系,一 ...

  7. java元婴期(25)----java进阶(mybatis(4)---高级映射查询缓存)

    1.需要用到的数据模型(这是后面高级查询需要用到的实例) 用户表user:          记录了购买商品的用户信息 订单表:orders          记录了用户所创建的订单(购买商品的订单) ...

  8. 传智_Springmvc+Mybatis由浅入深全套视频教程(燕青)-mybatis笔记(两天)(2017年8月5日16:09:55)

    专业实习消耗了半个月,学习进度一度停滞.mybatis基本的使用不难,和hibernate相比各有优势吧,不是一个风格的框架. mybatis笔记整理如下: 笔记链接:http://download. ...

  9. 关联查询---Mybatis学习笔记(九)

    商品订单数据模型 注意:分析数据库表和数据库表之间的关系可以先通过数据库中的主外键关系来分析,然后通过业务中的实际的关系来分析. 1.一对一查询 需求: 查询订单信息,关联查询创建订单的用户信息 分析 ...

最新文章

  1. 第六章练习题和知识面扩充
  2. 万字总结 MySQL核心知识,赠送25连环炮
  3. 从分治算法到 MapReduce
  4. 推荐15款响应式的 jQuery Lightbox 插件
  5. spring quartz 的定时器cronExpression表达式写法(转载)
  6. 交互原型细节提升之路
  7. 超详细图解!【MySQL进阶篇】MySQL事务和锁
  8. swing 状态视图分离_Java Swing模型视图适配器介体
  9. 记录用户转成超级用户的文件名字_一分钟了解Linux用户
  10. 阿里云峰会|阿里云数据中台重磅升级后拟扶持100万家企业数智化
  11. 机器人当中的摩擦力(未完)
  12. vuex其实超简单,只需3步
  13. 大开眼界:Facebook做了一个会“开眼”的AI,拯救眨眼照片
  14. npm、cnpm、yarn的安装与常用命令
  15. IT人:如何预防久坐伤身?
  16. OpenCV3.4 sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA' : undeclared
  17. 操作系统原理(三)操作系统用户界面
  18. 无线射频识别技术开发与应用学习视频
  19. 神经网络模型怎么建立,如何选择神经网络模型
  20. 求图像边界点坐标c语言,三、Windows图像处理—画点和线(边框函数)

热门文章

  1. 系统与软件安全研究(四)
  2. ISE工程导入Vivado
  3. 开发文档--编程规约
  4. matplotlib绘图(折线图,柱状图,饼状图,散点图,直方图)
  5. java毕业设计C2C和B2C业务平台Mybatis+系统+数据库+调试部署
  6. html表单按钮有,用好表单的按钮(一)_html
  7. 【理论恒叨】【立体匹配系列】经典AD-Census: (1)代价计算
  8. JAVA成都某4S店销售管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  9. 从零开始搭建仿抖音短视频APP--开发用户业务模块(4)
  10. .net mvc 输错密码锁定用户_国家工信部:手机有个密码必须设,否则钱包危险……...