Mybatis映射文件的SQL深入 (Mybatis今天學的不多,看了半天的mysql必知必會) 動態sql語句 if語句,查詢一個用戶的時候,有可能根據地址查詢,用戶名查詢,性別查詢等,所以需要動態sql語句 1.介面中新添加方法 2.配置文件的寫法,根據條件查詢 3.測試方法 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中的多表查詢
示例:用戶和賬戶,一個用戶可以有多個賬戶,一個賬戶只能屬於一個用戶
步驟:
- 建立兩張表:用戶表和賬戶表,讓用戶表和賬戶表之間具備一對多的關係:需要使用外鍵在賬戶表中添加
- 建立兩個實體類:用戶實體類和賬戶實體類,讓用戶和賬戶的實體類能體現出一對多的關係
- 建立兩個配置文件,用戶的配置文件和賬戶的配置文件
- 實現配置:當我們查詢用戶是,可以同時得到用戶下所包含的賬戶信息,當我們查詢賬戶是,可以同時得到賬戶的所屬用戶信息
賬戶表的創建
用戶表的創建
介面的建立
用戶介面
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);
}
}