黑马程序员技术交流社区

标题: 【上海校区】MyBatis的基本使用 [打印本页]

作者: 偷树的光头强    时间: 2018-11-29 19:10
标题: 【上海校区】MyBatis的基本使用
一:MyBatis整体架构
二:配置文件详解
1.配置文件
        全局配置文件:mybatis-config.xml作用:配置数据源,引入映射文件
       映射文件:XxMapper.xml 作用:配置sql语句、参数、结果集封装类型等
2.SqlSessionFactory作用:获取SqlSession
       通过new SqlSessionFactoryBuilder().build(inputStream)来构建,inputStream:读取配置文件的IO流
3.SqlSession作用:执行CRUD操作
4.Executor
       执行器,SqlSession通过调用它来完成具体的CRUD它是一个接口,提供了两种实现:缓存的实现、数据库的实现
5.Mapped Statement
       在映射文件里面配置,包含3部分内容:
       具体的sql,sql执行所需的参数类型,sql执行结果的封装类型
       参数类型和结果集封装类型包括3种:
       HashMap,基本数据类型,pojo
6.xxxMapper.xml映射文件
        名称空间必须改成UserMapper接口的全路径,StatementId必须和接口方法名一致,结果集的封装类型已经和方法的返回类型一致

7.mybatisconfig.xml配置文件
       讲究严格的顺序,具体顺序遵循文档的顺序:

<!-- 引入外部资源文件,resource:相对路径,url:绝对路径 -->
<properties  resource = "jdbc.properties" />

8.settings参数:
设置参数
描述
有效值
默认值
cacheEnabled
该配置影响的所有映射器中配置的缓存的全局开关。
true | false
true
lazyLoadingEnabled
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
特定关联关系中可通过设置
fetchType属性来覆盖该项的开关状态。
true | false
false
aggressiveLazyLoading
当启用时,带有延迟加载属性的对象的加载与否完全取
决于对任意延迟属性的调用;反之,每种属性将会按需加载。

true | false
true
mapUnderscoreToCamelCase
是否开启自动驼峰命名规则(camel case)映射,即从经典数
据库列名
A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
true | false
False

9.类型别名

1.typeAlias      
      <typeAliases>
           <!-- 类型别名:type-pojo类的全路径,alias-别名名称(可随便写,推荐和类名一致) -->
           <typeAlias type="cn.itcast.mybatis.pojo.User" alias="user" />
      </typeAliases>
2.package
      <typeAliases>
          <!-- 类型别名:type-pojo类的全路径,alias-别名名称(可随便写,推荐和类名一致) -->
          <!-- <typeAlias type="cn.itcast.mybatis.pojo.User" alias="user" /> -->
         <!-- 开启别名包扫描,name:包路径,扫描的别名就是类名,并且大小写不敏感 -->
          <package name="cn.itcast.mybatis.pojo"/>
      </typeAliases>
3.typeHandlers
4.environments
      1.default
      2.build
5.Mappers 映射
      1.resource
      2.file
      3.class
      4.package
6.CRUD标签
      1.insert :
            useGeneratedKeys : 开启主键的回显 , true & false
            keyColumn : 主键的列名
            keyProperty : 主键对应的属性名
      2.update
      3.select
      4.delete
7.parameterType 参数
parameterType有三种类型的输入参数:
    1.基本数据类型
    2.hashMap
    3.pojo包装类

hashMap类型通过#{key}或者${key},复杂类型通过${key.属性名}或者#{key.属性名}
    接收参数两种方式:
        1.#{} : 预编译
        2.${} : 非预编译   sql拼接,不能防止sql注入
${}用法:
    使用${} 去接收参数信息,在一个参数时,默认情况下必须使用${value}获取参数值,
#{}用法:
    #{} 只是表示占位,与参数的名字无关,如果只有一个参数,可以使用任意参数名接收参数值,会自动对应。


推荐使用@Param注解指定参数名:
    #{参数名},${参数名}
#{}接收多个参数:
        1.默认规则获取参数{0,1,param1,param2}
        2.使用@Param注解指定参数名
如果没指定参数名,用#{0},#{1}或者#{param1},#{param2}


注意:
    1.单个参数时,#{}与参数名无关的。
    2.多个参数时,#{} ${}与参数名(@Param)有关。


什么时候需要加@Param注解?什么时候不加?
单个参数不加,多个参数加
终极解决方案:都加。


8.ResultMap 自定义映射
      type : 结果集的封装类型 , id : 唯一标识 , autoMapping : 开启自动匹配,如果开启了驼峰匹配,就以驼峰匹配形式
      id : 指定主键映射 ,不要省略,提高性能
      result : 其他非主键字段 , column : 表中的字段名 , property : 对应实体类属性名








作者: 一个人一座城0.0    时间: 2018-11-30 14:08
到此一游。
作者: 不二晨    时间: 2018-12-5 16:29





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2