mybatis基础

mybatis框架概述

搭建mybatis开发环境

简单的mybatis项目(mapper.xml配置)

resultMap的使用

SqlMapConfig.xml配置(也就是config.xml)

注意事项

传递PoJo包装对象

连接池的分类

mybatis的sql语句一对一(多对一)

mybatis的sql语句一对多

mybatis的sql语句多对多

mybatis的延迟加载

一级,二级缓存

mybatis的注解开发

基于注解的一二级缓存



mybatis框架概述
( 下面一段概念性的描述,来自摘抄)
mybatis 是一个基于 java 的持久层框架,它封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要处理加载驱动、创建连接、创建 statement 等过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

搭建mybatis开发环境

 1.我们需要先下载相关的jar包或者使用maven,这里我们使用的是maven工程。
 2.创建maven工程,在创建的项目里的pom.xml文件里添加mybatis的坐标以及其他要使用的jar包的坐标, 

在这里插入图片描述

 3.编写实体类
 4.编写持久层接口
 5.编写持久层接口的映射文件xxxDao.xml
      要求:
             创建的位置必须和持久层接口的在相同的包名中,也就是目录结构相同
             且命名也建议和接口名相同

6 .项目的结构应该是这样的

在这里插入图片描述

其中Resources是项目的配置信息存放目录,接口的映射文件就要写在里面,且目录结构要和接口一样

这时我们可以在接口提供几种方法,然后在映射文件里一一映射,

 其中映射文件的开头是这样的,加约束,不可变
 <?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">

简单的mybatis项目

下面我们来实现一下配置文件的作用,在接口写一个方法

        List<Student> findAllstudent();

那么接下来在配置文件的配置应该如下、

  <mapper namespace="com.Dao.IStudentDao">
    <select id="findAllstudent"  resultType="Student"> resultType用于指定结果集的类型
    select * from student;
    </select>
</mapper>
其中需要使用mapper标签把所有在此文件配置的东西都括起来,
namespace的值是接口的全限定类名,那么为什么要怎么做呢,原因是当有多个实体类,多个实体类接口时。我们访问接口的方法,但由于没有指的映射文件,那么将会找不到配置好的映射文件
由于mybatis是操作数据库的,
我们在select里面写好sql语句,注意里面的id必须是对应接口的方法名,且是唯一标识符

接口的方法的返回值为list,而我们也要配置当从数据库查询出来的数据应该要封装到什么类里面去,也就是使用resultType

是用参数查询数据库

 Student findByid(int id);   接口方法
 配置文件的配置
 <select id="findByid" parameterType="int" resultType="student"> 
        parameterType是接收的参数类型
    select * from student where id=#{d};
</select>   
 sql语句的条件查询通过  #{id}来指定,相当于是占位符,这里括号里的名称可以随便写那是因为
 参数是基本类型int,所以可以不用在意,
 当使用模糊查询时.要么在形参 使用百分号,where username like '%${value}%',也就是再sql语句里
  要么在实参传参的时候写好百分号如(“%xiao%”)

其中的删除,修改,添加操做

void insertstudent(Student stu);   添加
void updatestudent(Student stu);  修改
void deletestudent(int id);    删除

<insert id="insertstudent" parameterType="Student">
    insert into student(id,name,age,sex) values (#{studentid},#{sname},#{studentage},#{studentsex});
</insert>
<update id="updatestudent" parameterType="com.cangcnag.Student">
     update student set name=#{sname},age=#{studentage},sex=#{studentsex} where     id=#{studentid};
</update>
配置都是差不多,但没有返回值,我们的传统的数据库操作,可以接收执行成功返回的计数,这里没有

resultMap的使用

   之前我们说了,操作数据库离不开实体类,但这里就延申了一个问题,当实体类的属性和和数据库
   表的字段名称不符时,是不能使用上面的查询方法的(上面的查询里我们默认的是属性和字段相
   同,其中mssql在windows系统上是不区分大小写的),我们需要进行额外的配置
     <resultMap id="resultmap" type="Student">
          <id property="studentid" column="id"/>  <!--主键用id标签-->
          <result property="sname" column="name"></result>  <!--非主键用result-->
          <result property="studentsex" column="sex"/>
          <result property="studentage" column="age"/>
    </resultMap>
<select id="findAllstudent"  resultMap="resultmap">  <!--将resulttype改成resultMap-->
    select * from student;
</select>
  其中resultMap的id也是本配置文件的唯一标识,type是数据库返回要的类型,之前我们是写在select里
  面的  ,id标签是指得主键,result指的是非主键,  property指的是实体类的属性名,column指的是数
  据库字段名,,通过这种方法将属性字段不同的它们连接起来,接下来只要在需要的select标签里引用
  就可以了 
   
   其实当属性名和数据库字段名不一致时,我们在查询返回的数据封装对象时,可以在查询
   语句哪里将字段改名为类对象的属性名,这样做效率高,但是写代码的时间和效率降低了

细节: parameterType="",代表参数的类型,因为我们要传入的是一个类的对象,所以类型 就写类的全名称 ,其他地方需要使用到实体类的地方,也需要全名称,但mybatis有一个取别名的方式,简化了名称
在SqlMapConfig.xml配置文件里

  <configuration>
<typeAliases>
  <typeAlias type="com.nanc.Student" alias="student"></typeAlias>  单个的指定该实体类的类名为什么
    <package name="com.item"/>而这种方式则表示该目录下的实体类都可以使用类名表示,不需要全类名
</typeAliases>
</configuration>

SqlMapConfig.xml配置
映射文件写好了,我们就来进行conf

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值