Mybatis笔记3
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中的多表查询
示例:用户和账户,一个用户可以有多个账户,一个账户只能属于一个用户
步骤:
- 建立两张表:用户表和账户表,让用户表和账户表之间具备一对多的关系:需要使用外键在账户表中添加
- 建立两个实体类:用户实体类和账户实体类,让用户和账户的实体类能体现出一对多的关系
- 建立两个配置文件,用户的配置文件和账户的配置文件
- 实现配置:当我们查询用户是,可以同时得到用户下所包含的账户信息,当我们查询账户是,可以同时得到账户的所属用户信息
账户表的创建

用户表的创建

接口的建立
用户接口
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的更多相关文章
- Mybatis笔记二:接口式编程
目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...
- MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...
- MyBatis笔记一:GettingStart
MyBatis笔记一:GettingStart 1.MyBatis优点 我们的工具和各种框架的作用就是为了我们操作数据库简洁,对于一些数据库的工具能帮我们少写一些处理异常等等的代码,但是他们并不是自动 ...
- 【MyBatis笔记】mapper文件的配置以及说明
<!doctype html>[MyBatis笔记]mapper文件的配置以及说明 figure:last-child { margin-bottom: 0.5rem; } #write ...
- mybatis笔记2 基础理论准备
之前发了一篇mybatis的crud入门笔记,算是入门了,为了让功力加深一级,来研究下mybatis的理论知识,哈哈,以后好拿来跟技术经理吹吹牛- 按照问题来吧!个人觉得有自主意识,带着自己的问题来研 ...
- mybatis笔记<二> 整合spring
mybatis与spring整合需要添加几个jar包,mybatis-spring, spring-context, spring-jdbc 1. spring ioc只要一个jar包就ok 2. 我 ...
- mybatis笔记<一> Demo
mybatis作为一个orm互联网公司基本都在用,今天写个笔记.记录一下mybatis使用 参考官网:http://www.mybatis.org/mybatis-3/getting-started. ...
- 【狂神说】JAVA Mybatis 笔记+源码
简介 自学的[狂神JAVA]MyBatis GitHub源码: https://github.com/Donkequan/Mybatis-Study 分享自写源码和笔记 配置用的 jdk13.0.2 ...
- mybatis笔记3 一些原理的理解
1,mybatis流程跟踪,原理理解 基本思路: 从SqlSessionFactory的初始化出发,观察资源的准备和环境的准备,以及实现持久层的一些过程: 进入SqlSessionFactoryBea ...
- mybatis笔记1 基本的配置和操作
mybatis比较轻量,适合开发比较小型的或者业务比较复杂的系统: 相对于hibernate来说可以灵活的写sql,更灵活的处理遇到的业务逻辑: 可以说hibernate是pojo实体对db的orm映 ...
随机推荐
- MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]
MyBatis项目案例 项目图示: 项目源码地址:https://github.com/JluTiger/mybatispro 1.项目功能 项目案例:后台管理系统用户数据维护平台 所有用户数据查询 ...
- java中nextLine()与next()的区别
java中的next()和nextLine()还是有很大区别的. next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自 ...
- MySQL枚举类型enum字段在插入不在指定范围的值时, 是否是"插入了enum的第一个值"?
刚刚在看<<深入浅出MySQL>>一书的"ENUM类型"一节, 以下面的代码举例, 得出结论: "还可以看出对于不在ENUM指定范围内的值时, 并 ...
- 微信小程序的z-index在苹果ios无效
1.在微信开发者工具可以正常显示 2.在安卓真机手机可以正常显示 3.在ios手机真机无法正常显示 原因:父级view的css属性有 position: fixed; ,把它注释掉即可
- taocrypt
taocrypt MySQL Bugs: #25189: mysqld: coding.cpp:243: void TaoCrypt::Base64Decoder::Decode(): Asserti ...
- PHP curl put方式上传文件
发送端: <?php function curlPut($destUrl, $sourceFileDir, $headerArr = array(), $timeout = ) { $ch = ...
- Java基础 Scanner 使用nextLine接收字符串
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- Mysql的三种数据类型
Mysql的三种数据类型 1.数值类型 2.日期和时间类型 3.字符串类型 00x1 [数值类型] 00x2 [日期和时间类型] 00x3 [字符串类型]
- flutter 的Animation简单了解
import 'package:flutter/material.dart'; class AnimationDemo extends StatelessWidget { @override Widg ...
- Python3入门(十三)——连接数据库
以Mysql为例: 要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection: 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结 ...