Mybatis映射文件的SQL深入

(Mybatis今天学的不多,看了半天的mysql必知必会)

动态sql语句-if语句,查询一个用户的时候,有可能根据地址查询,用户名查询,性别查询等,所以需要动态sql语句

1.接口中新添加方法

user 查询的条件:有可能有用户名,有可能有性别,也有可能有地址,还有可能是都有
List<User> findUserByCondition(User user);

2.配置文件的写法,根据条件查询

    <!--根据条件查询-->
<select id="findUserByCondition" resultType="userMap" parameterType="user">
select * from user where 1=1
<if test="userName != null">
and username=#{userName}
</if>
</select>

3.测试方法

 public void testFindByCondition(){
User u = new User();
u.setUserName("老王"); //5.执行查询所有方法
List<User> users = userDao.findUserByCondition(u);
for(User user : users){
System.out.println(user);
} }

mybatis中的多表查询

示例:用户和账户,一个用户可以有多个账户,一个账户只能属于一个用户

步骤:

  1. 建立两张表:用户表和账户表,让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
  2. 建立两个实体类:用户实体类和账户实体类,让用户和账户的实体类能体现出一对多的关系
  3. 建立两个配置文件,用户的配置文件和账户的配置文件
  4. 实现配置:当我们查询用户是,可以同时得到用户下所包含的账户信息,当我们查询账户是,可以同时得到账户的所属用户信息

账户表的创建

用户表的创建

接口的建立

用户接口

public interface IAccountDao {
//查询所有账户
List<Account> finaAll();
}

账户接口

public interface IUserDao {
/**
* 查询所有用户
*/
List<User> findAll(); /**
* 根据id查询用户信息
*/
User findById(Integer userId); }

用户实体类的建立

用户实体类

package com.itheima.domain;

import java.io.Serializable;
import java.util.Date; public class User implements Serializable { private Integer id;
private String username;
private String address;
private String sex;
private Date birthday; @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
", sex='" + sex + '\'' +
", birthday=" + birthday +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}

账户实体类

package com.itheima.domain;

import java.io.Serializable;

public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money; @Override
public String toString() {
return "Account{" +
"id=" + id +
", uid=" + uid +
", money=" + money +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getUid() {
return uid;
} public void setUid(Integer uid) {
this.uid = uid;
} public Double getMoney() {
return money;
} public void setMoney(Double money) {
this.money = money;
}
}

初步的配置文件

用户的

<?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="com.itheima.dao.IUserDao"> <!-- 查询所有 -->
<select id="findAll" resultType="user">
select * from user
</select> <!-- 根据id查询用户 -->
<select id="findById" parameterType="INT" resultType="user">
select * from user where id = #{uid}
</select>
</mapper>

账户的

<?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="com.itheima.dao.IAccountDao">
<!-- 查询所有 -->
<select id="findAll" resultType="account">
select * from account
</select> </mapper>

目的:查询所有账户,同时还有获取到当前账户的所属用户信息

添加一个实体类,继承Account

package com.itheima.domain;
//让他继承Account
public class AccountUser extends Account{
//只需要用户名和地址
private String username;
private String address; public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
//让他先调用父类的toString
return super.toString()+" AccountUser{" +
"username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
}

接口添加方法

   //查询所有账户,并且带有用户名称和地址名称
List<AccountUser> findAllAccount();

test类实现功能

 @Test
//查询所有账户,同时包含用户名称和地址
public void testFindAllAccountUser(){
List<AccountUser> aus = accountDao.findAllAccount();
for(AccountUser au :aus){
System.out.println(au);
}
}

Mybatis笔记3的更多相关文章

  1. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  2. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  3. MyBatis笔记一:GettingStart

    MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...

  4. 【MyBatis笔记】mapper文件的配置以及说明

    <!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...

  5. mybatis笔记2 基础理论准备

    之前发了一篇mybatis的crud入门笔记,算是入门了,为了让功力加深一级,来研究下mybatis的理论知识,哈哈,以后好拿来跟技术经理吹吹牛- 按照问题来吧!个人觉得有自主意识,带着自己的问题来研 ...

  6. mybatis笔记<二> 整合spring

    mybatis与spring整合需要添加几个jar包,mybatis-spring, spring-context, spring-jdbc 1. spring ioc只要一个jar包就ok 2. 我 ...

  7. mybatis笔记<一> Demo

    mybatis作为一个orm互联网公司基本都在用,今天写个笔记.记录一下mybatis使用 参考官网:http://www.mybatis.org/mybatis-3/getting-started. ...

  8. 【狂神说】JAVA Mybatis 笔记+源码

    简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...

  9. mybatis笔记3 一些原理的理解

    1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...

  10. mybatis笔记1 基本的配置和操作

    mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映 ...

随机推荐

  1. Liskov替换原则(LSP)

    OCP背后的主要机制是抽象和多态.在静态类型语言中,比如C++和Java,支持抽象和多态的关键机制之一是继承.正是使用了继承,才可以创建实现其基类中抽象方法的派生类.是什么设计规则在支配着这种特殊的继 ...

  2. linux设备树编译器DTC【转】

    本文转载自:https://blog.csdn.net/chenmiaowu88/article/details/54342823 参考文件: \kernel\Documentation\device ...

  3. python命令行传入参数

    1.sys import sys a=eval(sys.argv[1])b=eval(sys.argv[2]) print(a+b) 1    2    3    4    5    6 evel() ...

  4. MQTT教學(一):認識MQTT

    http://swf.com.tw/?p=1002 本系列文章旨在補充<超圖解物聯網IoT實作入門>,採用Arduino.ESP8266和Node.js實作MQTT物聯網通訊實驗. MQT ...

  5. layui 鼠标悬停单元格显示全部

    {field : 'subjectId',title : '主题id',align: 'center',edit : 'text',templet:'<div><span title ...

  6. nxp基于layerscape系列芯片的硬件型号解析

    每一种layerscape系列芯片都有两种硬件型号: RDB 和QDS RDB: Refrence Design Board QDS: QorIQ Development system

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战

    笔记 4.Redis工具类封装讲解和实战     简介:高效开发方式 Redis工具类封装讲解和实战         1.常用客户端 https://redisdesktop.com/download ...

  8. ImageSwitcher 图片切换器

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  9. 贪心:leetcode 870. Advantage Shuffle、134. Gas Station、452. Minimum Number of Arrows to Burst Balloons、316. Remove Duplicate Letters

    870. Advantage Shuffle 思路:A数组的最大值大于B的最大值,就拿这个A跟B比较:如果不大于,就拿最小值跟B比较 A可以改变顺序,但B的顺序不能改变,只能通过容器来获得由大到小的顺 ...

  10. flutter 中的搜索条实现

    import 'package:flutter/material.dart'; import 'package:flutter_app/SearchBarDemo.dart'; void main() ...