MyBatis02课堂笔记

MyBatis标准配置

1.导入jar包

2.创建mybatis的全局配置文件:mybatis-config.xml

 3.创建mybatis的sql映射文件和mapper接口

要求:
sql映射文件的namespace值和接口的全类名保持一致。 sql映射文件的sql语句的id值和接口的方法名保持一致。 注意:接口中不要有重载的方法

 

4.写测试代码

MyBatis全局配置文件【了解】

1.Properties

作用:加载properties配置文件信息

 2.Settings标签

作用:Settings标签内部可以设置多个setting标签,每个setting标签对应着对mybatis的一个设置项

 3.typeAliases

 类型别名处理器:给一个类起别名

补充:MyBatis自带了一些类型别名,例如java基础学过的基本数据类型、引用数据类型

 4. typeHandlers

作用:java的数据类型转换为数据库的数据类型的

 5. Environments

作用:Environments里面有多个environment标签,每个environment标签可以设置mybatis的运行环境。

<environments default="development">
      <!--1. 配置数据库连接信息 -->
        <environment id="development">
            <!-- 
              transactionManager:事务管理器
                type:JDBC|MANAGED
                  JDBC:支持事务
                  MANAGED:不支持事务 -->
            <transactionManager type="JDBC" />
            <!-- 
               dataSource:数据源
                 type:UNPOOLED|POOLED|JNDI
                   UNPOOLED:每次使用重新打开或者关闭一个connection连接,不支持数据源,速度有点慢
                   POOLED:支持数据源,适合并发访问的项目
                   JNDI:过时的。 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}" />
                <property name="url" value="${jdbc.jdbcUrl}" />
                <property name="username" value="${jdbc.userName}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

6. databaseIdProvider

作用:为数据库厂商起别名

由于MyBatis支持多种数据库:Oracle、MySQL、SqlServler、Db2

在MyBatis全局配置文件中配置

 Sql映射文件

 7. Mappers

作用:加载Mapper接口或者SQL映射文件

 SQL映射文件

注意点:

1.对于增删改标签,必须提交事务。提交事务的两种方式:
   1.1.手动提交:openSession.commit()
  1.2.自动提交:sqlSessionFactory.openSession(true);
2.只有select必须指定返回值类型,所有标签的parameterType都可以省略。

往数据表中添加数据的时候获取自增逐渐

要求:

1.接口方法的参数必须是一个pojo对象
2.在insert标签设置两个属性:
  useGenerateKeys=true,keyProperty=“pojo对象属性”

 

 Sql片段

 作用:可以做sql语句重用

 

 MyBatis支持基于注解的sql语句

@Select(value="select * from book where bid = #{bid}")
public Book selectOne(int bid);
@Insert(value="insert into book(bname,author,price,type) values(#{bname},#{author},#{price},#{type});")
public void insert(Book book);
@Delete(value="DELETE FROM book WHERE bid=#{bid}")
public void delete(int bid);

如何在sql映射文件中取mapper接口中的参数

1.一个普通参数

  #{随便写}

 

2.多个普通参数

  #{param注解的value值}

方式一:

方式二:

 

 

输出:

 3.参数是一个pojo对象

   #{pojo对象的属性名}

4.是一个map对象

  #{map中键值对的key}

输出:

 5.参数是一个List、Collection

   #{list[下标]}或者#{collection[下标]}

 

 输出:

 6.参数是一个数组

  #{array[下标]}

 

7.复杂参数

 

 

输出:

 各种各样的返回值类型

 

  #{}与${}的区别【面试】

#{}:采用占位符?,以预编译的方式设置参数的,类似于javaweb部分的preparestatement对象,SQL安全的,不存在sql注入问题。
${}:直接将参数设置到sql语句中,类似于javaweb部分的statement对象,存在SQL注入问题。
在有些特殊情况下,我们必须使用${}.例如:表名、like模糊查询、排序字段。

 ResultMap标签

当数据表的列名和pojo对象的属性名不一致的时候,如何将表的列名映射到pojo对象属性上?

1.起别名

2.mapUnderScoreToCamelCase=true

3.ResultMap标签

 

ResultMap作用说明:

  1. 字段映射
  2. 将表的关联关系直接映射为pojo对象的关联关系【resultType属性不具备的功能】

猜你喜欢

转载自www.cnblogs.com/bai3535/p/12098596.html