MyBatis最佳实践:参数详解

第一章:MyBatis 参数详解

  1. parameterType:
    1. 简单数据类型:
      1. int  double  String  Long
    2. 简单的写法:
      1. Java.lang.Integer ==> int、Int、integer、Integer 都可以,框架提供简写的方式
    3. POJO(JavaBean 实体类):对象类型,默认是不能简写,可以配置 User 对象。
    4. POJO 包装对象类型:
      1. 包含更多的实体类:
        public class QueryVo implements Serializable {
            //自己属性
            private String name;
        
            //user 属性
            private User user;
        
            //role 属性
            private Role role;
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        
            public User getUser() {
                return user;
            }
        
            public void setUser(User user) {
                this.user = user;
            }
        
            public Role getRole() {
                return role;
            }
        
            public void setRole(Role role) {
                this.role = role;
            }
        
        }
        
        //------------------------
        //测试包装类查询:
        public List<User> findByVo(QueryVo vo);
        
        //------------------------
        <!-- 包装类测试 -->
        <select id="findByVo" resultType="com.qcby.model.User" parameterType="com.qcby.model.QueryVo">
            select * from user where username = #{user.username}
        </select>
  2. resultType:
    1. 返回简单数据类型:
      1. int  double  long  String
    2. 返回 POJO 数据类型:
      1. 返回 User 对象类型
  3.  关联映射:
    1. 返回类型为 resultMap 映射结果集返回
    2. 创建映射结果集,设置返回类型:
      1. <result/> 实体类和数据库关联字段进行映射
      2. 复杂属性单独处理:
        1. association:处理对象
          1. javaType:标明对象类型
        2. collection:处理集合
          1. ofType:标明对象​​​​​​​
  4. resultMap 结果类型:
    1. resultType 可以指定 pojo 将查询结果映射为 pojo,但需要 pojo 的属性名和 SQL 查询的列名一致方可映射成功
    2. 如果 SQL 查询字段名和 pojo 的属性名不一致,可以通过 resuletMap 将字段名和属性名做一个对应关系,resultMap 实质上还需要将查询结构映射到 pojo 对象中
    3. resultMap 可以实现将查询结构映射为复杂类型的 Pojo,比如现在查询结果映射对象中包括 Pojo 和 list 实现一对一和一对多查询。
      <!-- 配置 resultMap,用来进行数据封装
          id="唯一的名称,用来被引用的唯一标识"
          type="进行封装数据的类型"
      -->
      <resultMap id="userMap" type="com.qcby.model.User">
          <!-- property="JavaBean 中的属性"-->
          <!-- colum="表中的字段"-->
          <result property="id" column="id"/>
          <result property="username" column="_username"/>
          <result property="birthday" column="_birthday"/>
          <result property="sex" column="_sex"/>
          <result property="address" column="_address"/>
      </resultMap>
      
      <!-- 演示 resultMap 配置 -->
      <select id="findUsers" resultMap="userMap">
          select id _id,username _username,birthday _birthday,sex _sex,address _address from user
      </select> 
  5. #{} 和 $ value} 符号:
    1. ${value}:数据拼接,在本地 SQL 语句进行拼接(会有SQL 注入问题)
    2. #{}:占位符 ==> 被编译成占位符  ?
    3. 两者的选择:
      1. 能用 #{} 就用 #{},尽量少用 ${}
      2. 当数据作为参数,或者 order by 排序时用 ${}
      3. 传参时参数使用  @Param 注解,
      4. 正确的将参数传入 SQL 语句中,一般通过 #{} 的方式,${} 会有 SQL 注入的问题

第二章:SqlMapConfig.xml 配置文件

  1. 定义 properties 标签的方式管理数据库的信息
    1. 把数据库的信息定义 property 标签中的方式
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configuration
              PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
          <!-- 配置具体的环境 -->
          <environments default="mysql">
              <environment id="mysql">
                  <transactionManager type="JDBC"></transactionManager>
                  <!-- 配置是否需要使用连接池, POOLED 使用,UNPOOLED 不适用-->
                  <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver"/>
                      <property name="url" value="jdbc:mysql:///mybatis_demo"/>
                      <property name="username" value="root"/>
                      <property name="password" value="root"/>
                  </dataSource>
              </environment>
          </environments>
      
          <!-- 加载映射的配置文件 -->
          <mappers>
              <mapper resource="Mapper/UserMapper.xml"/>
          </mappers>
      
      </configuration>
    2. 在项目中定义 jdbc.properties 属性文件,存储数据库相关的信息,统一管理:
      1. jdbc.properties 属性文件
        jdbc.driver=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql:///mybatis_demo
        jdbc.username=root
        jdbc.password=root
      2. SqlMapConfig.xml 的配置文件
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE configuration
                PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
                "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
        
            <!-- 读取外部的配置文件
                    resource:文件的相对路径写法
            -->
            <properties resource="jdbc.properties"></properties>
        
            <!-- 配置具体的环境 -->
            <environments default="mysql">
                <environment id="mysql">
                    <transactionManager type="JDBC"/>
                    <!-- 配置是否需要使用连接池, POOLED 使用,UNPOOLED 不适用-->
                    <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>
                </environment>
            </environments>
        
            <!-- 加载映射的配置文件 -->
            <mappers>
                <mapper resource="Mapper/UserMapper.xml"/>
            </mappers>
        
        </configuration>
  2. 类型别名定义:
    1. MyBatis 自己有类型别名的注册类,编写 int 或者 integer 通过注册可以找到 java.lang.Integer
    2. 也可以自己进行别名的注册:
      <!-- 定义别名 -->
          <typeAliases>
              <!-- 把com.qcby.model.User 使用 user 别名来显示,别名 user User USER 都可以,默认是忽略大小写的 -->
      <!--        <typeAlias type="com.qcby.model.User" alias="user"/>-->
              <!-- 针对com.qcby.model 包下的所有的类,都可以使用当前的类名作为别名 -->
              <package name="com.qcby.model"/>
          </typeAliases>
    3. UserMapper.xml 的配置文件使用别名:
      <!-- ersultType="com.com.qcby.model.User"  全路径形式 -->
      <!-- ersultType="user" 别名形式 -->
      <select id="findById" resultType="user">
          select * from user where id=#{id};
      </select>
  3. MyBatis 连接池的分类:
    1. MyBatis 内置了连接池技术,dataSource 标签的 type 属性有 3 个取值
      1. POOLED:使用连接池
      2. UNPOOLED:不适用连接池
      3. JNDI:使用  JNDI 实现连接池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值