MyBatis二

MyBatis二

自定义MyBatis

tR2AoQ.png

用户在映射配置文件中配置的相关属性

  • resultType 属性:用于指定结果集的类型。

  • parameterType 属性:用于指定传入参数的类型。

  • sql 语句中使用#{}字符: 它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。

    <select id="findById" resultType="com.itheima.domain.User" parameterType="int">
        select * from user where id = #{uid}
    </select>

ognl 表达式:

  • 它是 apache 提供的一种表达式语言,全称是:Object Graphic Navigation Language 对象图导航语言
  • 它是按照一定的语法格式来获取数据的。
  • 语法格式就是使用 #{对象.对象}的方式
    • #{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。

新增用户的id的返回值:

<!-- 配置保存时获取插入的 id --> 
<selectKey keyColumn="id" keyProperty="id" resultType="int">
    select last_insert_id();
</selectKey>

#{}与${}的区别

  1. #{}表示一个占位符号:

    • 通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,
    • #{}可以有效防止 sql 注入。 #{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{}括号中可以是 value 或其它名称。
  2. ${}表示拼接 sql 串

    • 通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${}括号中只能是 value。

定义resultMap

为什么要定义?

  • resultMap 标签可以建立查询的列名和实体类的属性名称不一致时建立对应关系。从而实现封装。在 select 标签中使用 resultMap 属性指定引用即可。同时 resultMap 可以实现将查询结果映射为复杂类
    型的 pojo,比如在查询结果映射对象中包括 pojo 和 list 实现一对一查询和一对多查询。

  • 定义

    <!-- 建立 User 实体和数据库表的对应关系
        type 属性:指定实体类的全限定类名
        id 属性:给定一个唯一标识,是给查询 select 标签引用用的。
    --> 
    <resultMap type="com.itheima.domain.User" id="userMap"> 
        <id column="id" property="userId"/>
        <result column="username" property="userName"/>
        <result column="sex" property="userSex"/>
        <result column="address" property="userAddress"/>
        <result column="birthday" property="userBirthday"/>
    </resultMap>
    
    id 标签:用于指定主键字段
    result 标签:用于指定非主键字段
    column 属性:用于指定数据库列名
    property 属性:用于指定实体类属性名称
  • 映射配置使用

    <!-- 配置查询所有操作 --> <select id="findAll" resultMap="userMap">
        select * from user
    </select>

properties(属性)

  • 第一种

    //properties标签内容
    <properties> 
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/eesy"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="1234"/>
    </properties>
    
    //datasource内容
    <dataSource type="POOLED"> 
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </dataSource>
  • 第二种

    //properties标签内容
    <properties url=file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.properties">
    </properties>
    
    //datasource内容
    <dataSource type="POOLED"> 
        <property name="driver" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </dataSource>
    • 此时外部文件种的内容
      jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/eesy
      jdbc.username=root
      jdbc.password=1234

typeAliases(类型别名)

  • 在 SqlMapConfig.xml 中配置:

    <typeAliases>
    <!-- 单个别名定义 --> 
        <typeAlias alias="user" type="com.itheima.domain.User"/>
    <!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) --> 
        <package name="com.itheima.domain"/>
        <package name="其它包"/>
    </typeAliases>

mappers标签下定义package

注册指定包下的所有 mapper 接口
如:<package name="cn.itcast.mybatis.mapper"/>
  • 使用这种方法就不需要再写mapper以及class或者resource了,因为它会自己找到包下的dao接口以及它所对应的映射配置文件。
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信