Mybatis学习之路-Day4
1、Mybatis中的延迟加载
问题:在一对多中,当我们有一个用户,他有100个账户
在查询用户的时候,要不要把关联的账户查出来
在查询账户的时候,要不要把关联的用户查出来
在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的
在查询账号时,账户的所属用户信息应该随着账户查询一块出来
什么是延迟加载
在真正使用数据时才发起查询,不用的时候不查询,按需查询(懒加载)
什么是立即加载
不管用不用只要一调用方法就马上发起查询
多对一、一对一:通常使用立即加载
多对多、一对多:通常使用延迟加载
2、Mybatis中的缓存
什么是缓存
存在于内存中的临时数据
为什么使用缓存
减少和数据库的交互次数、提高执行效率
什么样的数据能使用缓存,什么样的数据不能使用缓存
适用于缓存:经常查询并且不经常改变、数据的正确与否对最终结果影响不大
不适用于缓存:数据经常改变、数据的正确与否对最终结果影响很大
例如:银行的汇率,股市的牌价
Mabatis中的一级缓存和二级缓存
3、Mybatis中的注解开发
环境搭建
单标CRUD操作(代理dao方式)
package com.kingniu.dao;
import com.kingniu.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* 在mybatis中针对CRUD一共有四个注解
* 分别是@SELECT @INSETR @UPDATE @DELETE
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
@Select("select * from user")
List<User> findAll();
/**
* 保存用户
* @param user
*/
@Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
void saveUser(User user);
/**
*
*/
@Update("update user set username = #{username},sex=#{sex},birthday=#{birthday},address=#{address} where id = #{id}")
void updateUser(User user);
/**
* 删除用户
* @param userId
*/
@Delete("delete from user where id = #{id}")
void deleteUser(Integer userId);
/**
* 根据id查询用户
* @param userId
* @return
*/
@Select("select * from user where id = #{id}")
User findById(Integer userId);
/**
* 模糊查询
* @param username
* @return
*/
@Select("select * from user where username like #{username}")
List<User> findUserByName(String username);
/**
* 查询用户数量
* @return
*/
@Select("select count(*) from user")
int findTotal();
}
类名和数据库名对不起来的时候,需要借助Results注解
多表查询操作
多对一和一对多
缓存的配置
开启二级缓存