亲手整理Mybatis需要掌握的内容

Mybatis

mybatis是一个基于java的持久层框架 , 通过操作对象来实现对数据库的操作 , 使得开发者只需要关注sql语句 , 而不需要再区使用传统的jdbc创建连接等繁琐的事情 , 使用到的理念就是ORM

ORM ---->object relatonal mapping 对象关系映射

这种理念简单来说就是 : 把数据库表的字段与实体类以及实体类的属性相对应,通过操作实体类就实现了操作数据库表的目的

创建maven项目 , 需要导入的依赖有三个 :

  • mysql-cnnector-java , mybatis , junity

在运行项目时可能遇到的一个问题就是资源导出失败的问题 , 需要在build中配置一下

如果用到了上面的写法 , 也就是没有直接配置数据库连接池的相关信息 ,通过引入外部的db.properties文件 , 需要用的标签就是 properties

连接数据库的过程中有两步 , 第一步就是上面提到的配置核心配置文件 , 配置数据库的参数 , 第二步就是利用idea来连接数据库 , 连接数据库存在的问题就是时区问题 , 通过下面的办法来解决

dao包下面对应的就是实现pojo与mysql关联的部分 interface 和 mapper 文件

别名 : 解决resttype 和 parametertypr 对应的实体类路径过长 , 在核心配置问文件中配置

两种方式:

  • 在typealiases标签内配置 typealias type="" alias="" 自定义别名
  • 在typealiases标签内配置 package name="" 扫描包实现别名

通过扫描包实现的别名 , 是该类名的小写 , 如果需要自定义 , 需要在该实体类的上方加@Alias(“自定义别名”)

映射器mappers三种方式 :

  • 手动注册 , 每写一个mapper就绑定一个mapper , mapper resource=".xml"
  • 使用class文件绑定注册 , mapper class="" , 使用这种方法是有要求的:
    • interface和mapper必须同名 , 且必须在同一个目录下
  • 使用package注册 , package name=".dao"

模糊查询 : 与普通的增删改查不同的地方在于 sql语句中的 where id like #{value} , 以及测试类中的==("%id%")==

在sql语句中增加like , 同时在测试类中进行参数传递时需要加==%%==解决sql注入的安全隐患

属性名和字段名不一致使用resultMap :

resultMap id=“该map的标识” type=“对应的实体类”

result column=“数据库字段” property=“实体类属性”

select resultMap=“id”

另一种方式就是在写sql语句时使用as select 实体类属性名 as 数据库字段名 from

日志 LOG4J

导入LOG4J的依赖 , 创建log4j.properties , 在mybatis-config中配置 , 创建日志对象

static Logger logger = Logger.getLogger(UserDaoTest.class);

分页 : 能够减少数据的处理量 , limit 起始位置 , 检索的行数 , 只有一个数字 limit 5 , 返回从第一行开始的5条数据

直接在interface中利用注解实现sql语句 , 直接在方法上面使用注解 , 也需要在mybatis-config.xml中注册mapper , 使用的是通过class注解

@Select(“select * from mybatis.user”)

List getUserList();

对数据库进行操作时需要commit和close sqlSession , 可以在创建工具类的时候就开启自动提交

SqlSession sqlSession=sqlSessionFactory.openSession(true);

在接口的方法中使用==@Param(“sql接收的参数名”)==

@Update(“update mybatis.user set username=#{name} where id=#{id}”)

int updateUserByParam(@Param(“id”) int id, @Param(“name”) String username);

复杂查询 : 多对一查询 , 一对多查询

  • 多对一查询
    • 按照结果嵌套查询 , 使用resultMap
      • association property=“teacher” column=“tid” javaType=“Teacher” select=“getTeacher”
  • 一对多查询
    • collection property=“students” ofType=“Student”

动态sql : if , where , set , foreach

缓存 : 一级缓存 二级缓存

  • 一级缓存
    • 一级缓存也叫做本地缓存 , 连续执行两次相同的sql语句 , 只会发起一次请求
    • 无法关闭一级缓存 , 但是可以清除一级缓存 , session.clearCache();
  • 二级缓存
    • 二级缓存也叫全局缓存 , 基于namespace级别的缓存 , 一个名称空间对应一个二级缓存
    • 开启二级缓存的方式
      • 在mybatis-config.xml 中 setting name=“cacheEnabled” value=“true”/
      • 在mapper.xml中配置 cache
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值