Mybatis笔记3

2019-08-09 00:00:00 mybatis 笔记

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. 实现配置:当我们查询用户是,可以同时得到用户下所包含的账户信息,当我们查询账户是,可以同时得到账户的所属用户信息

账户表的创建

《Mybatis笔记3》

用户表的创建

《Mybatis笔记3》

接口的建立

用户接口

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>

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

《Mybatis笔记3》

添加一个实体类,继承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》

《Mybatis笔记3》

《Mybatis笔记3》

相关文章