JDBC不好用的地方:
- 结果集处理麻烦
- sql语句写在java类中,不利于维护
- 动态sql语句处理麻烦
- 配置数据源(连接池不方便)
- .....................
mybatis使用:
- 导入mybatis相关jar包
- 编写mybatis主配置文件(建议放在src下面)
- 编写dao层接口以及mapper映射文件(建议放在和dao层接口一致的位置)
mybatis优化:
- 命名空间必须是接口对应全路径,id必须是对应方法的名称,dao方法的参数只有一个, 实体类属性名称和表字段名称一致
- 提供jdbc.properties
- 让mybatis可以插入null
- 给实体类类型提供别名
- 提供log4j日志文件
接口代理开发:
- 命名空间必须是接口对应全路径,id必须是对应方法的名称
- 通过SqlSession让mybatis自动帮我们生成对应接口的实现类
mybatis级联查询:
一级二级缓存:
一级缓存:是mybatis默认提供的,mybatis会给每个sqlsession提供一个一级缓存空间,当我们使用该sqlsqlsession查询出结果的时候,mybatis会把结果放置在一级缓存中,当使用同一个sqlsession执行相同的sql语句的时候,直接从一级缓存中获取,当我们提交事务的时候一级缓存清空
二级缓存:需要我们手动开启,mybatis会给每个命名空间提供二级缓存空间,多个sqlsession只要操作的是同一个命名空间下的sql语句,那么多个sqlsession共享二级缓存空间,当一个sqlsession查寻这条sql语句会把执行结果放置在二级缓存中,第二个sqlsession查询的时候直接从二级缓存获取
1、在主配置文件中开启二级缓存
<setting name="cacheEnabled" value="true"/>
2、在命名空间中(映射文件中允许该命名空间二级缓存)
<cache></cache>
3、要缓存的对象实现序列化接口
public class User implements Serializable {
}
4、要想把查询结果放置在二级缓存中那么第一个sqlsession执行完成以后必须提交事务
redis:基于内存的key-value形式的非关系型数据库