MyBatis 3 Java API-基本介绍
MyBatis 3 的 Java API 主要涵盖了创建 SqlSessionFactory、执行 SQL 操作以及管理配置等方面。以下是对 MyBatis 3 Java API 的基本介绍:1. SqlSessionFactoryBuilderSqlSessionFactoryBuilder 是用于创建 SqlSessionFactory 实例的构建器。你可以使用它加载 MyBatis 的配置信息并构建出一个 SqlSessionFactory 对象。InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);2. SqlSessionFactorySqlSessionFactory 是 MyBatis 的工厂类,用于创建 SqlSession 对象。它是线程安全的,通常在应用启动时创建一个 Sq...
MyBatis 3 Java API
MyBatis 3提供了丰富的Java API,允许你在Java代码中与MyBatis进行交互。以下是一些常用的MyBatis Java API:1. SqlSessionFactoryBuilderSqlSessionFactoryBuilder 用于创建 SqlSessionFactory 实例,它是一个单次使用的类。通常,在应用启动时创建一个 SqlSessionFactory 实例,并在整个应用的生命周期中重复使用。InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);2. SqlSessionFactorySqlSessionFactory 是一个线程安全的类,用于创建 SqlSession 实例。通常,在应用中只需要一个 SqlSessionFactory 实例。SqlSessio...
MyBatis 3 动态SQL-动态 SQL 中的插入脚本语言
MyBatis 3支持在动态 SQL 中使用一种称为 OGNL(Object-Graph Navigation Language)的插入脚本语言。OGNL 是一种表达式语言,用于访问和操作对象图中的数据。在 MyBatis 的动态 SQL 中,OGNL 可以用于条件判断、循环遍历、变量赋值等操作,以构建更复杂的 SQL 语句。以下是一些基本的 OGNL 使用示例:条件判断<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users WHERE <if test="condition == 'name'"> name = #{value} </if> <if test="condition == 'age'"> age = #{value} </if></select>...
MyBatis 3 动态SQL-多数据库支持
MyBatis 3 本身提供了一些机制,可以在同一份映射文件中支持多个数据库,以及在不同的环境中使用不同的数据库配置。多数据库支持在同一份映射文件中,可以使用动态 SQL 元素根据条件选择不同的 SQL 语句,从而支持多个数据库。例如,通过在 SQL 语句中使用 <choose>、<when> 和 <otherwise> 来选择不同的数据库:<select id="getUser" parameterType="map" resultType="User"> <choose> <when test="dbType == 'mysql'"> SELECT * FROM users_mysql WHERE id = #{id} </when> <when test="dbType == 'oracle'"> SELECT * ...
MyBatis 3 动态SQL-bind
<bind> 元素是 MyBatis 中用于声明变量的动态 SQL 元素。它允许你在 SQL 语句中声明一个变量,以便在后续的 SQL 片段中使用。以下是一个基本的使用示例:<select id="getUsersByCondition" parameterType="User" resultType="User"> <bind name="condition1" value="'%' + username + '%'" /> SELECT * FROM users WHERE username LIKE #{condition1}</select>在上述例子中,<bind> 元素用于声明了一个名为 condition1 的变量,它的值是一个字符串,表示在 username 前后都加上 % 的模糊查询条件。然后,这个变量可以在 SQL 语句的后续部分中被引用,以实现更复杂的条件逻辑。要注意以...
MyBatis 3 动态SQL-script
<script> 元素是 MyBatis 中用于包装动态 SQL 片段的元素。当你需要在 XML 映射文件中编写一段包含多个 SQL 语句的动态 SQL 时,<script> 元素会很有用。以下是一个基本的使用示例:<select id="getUsersByCondition" parameterType="User" resultType="User"> <script> SELECT * FROM users WHERE 1=1 <if test="id != null"> AND id = #{id} </if> <if test="username != null"> AND username = #{username} </if> <if test="email != null"> ...
MyBatis 3 动态SQL-foreach
<foreach> 元素是 MyBatis 中用于处理循环操作的动态 SQL 元素。它通常用于构建包含多个参数的 IN 子句,例如在查询时传递一个列表或数组。以下是一个基本的 <foreach> 使用示例:<select id="getUsersByIdList" parameterType="java.util.List" resultType="User"> SELECT * FROM users WHERE id IN <foreach collection="idList" item="id" open="(" separator="," close=")"> #{id} </foreach></select>在上述例子中: collection 属性指定了传递给 <foreach> 的集合或数组的名称。 item 属性指定...
MyBatis 3 动态SQL-trim、where、set
<trim>、<where>、<set> 元素是MyBatis中用于处理SQL语句的前缀和后缀的元素,用于动态拼接SQL语句的一部分。<trim> 元素<trim> 元素用于处理SQL语句的前缀和后缀,以及去除指定的前缀或后缀。例如,可以用于动态拼接WHERE子句:<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users <trim prefix="WHERE" prefixOverrides="AND | OR"> <if test="id != null"> AND id = #{id} </if> <if test="username != null"> AND username =...
MyBatis 3 动态SQL-choose、when、otherwise
<choose>、<when>、<otherwise> 是MyBatis中用于构建动态SQL的元素,类似于Java中的switch语句。它们的组合使得我们可以根据不同条件选择执行不同的SQL片段。下面是一个简单的示例,演示了如何使用这些元素:<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users <where> <choose> <when test="id != null"> AND id = #{id} </when> <when test="username != null"> AND username = #{username} </when> <otherwise&...
MyBatis 3 动态SQL-if
MyBatis 3中的<if>元素用于在XML映射文件中根据条件动态生成SQL语句的一部分。下面是一个简单的使用示例:<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users WHERE 1=1 <if test="id != null"> AND id = #{id} </if> <if test="username != null"> AND username = #{username} </if></select>在上述例子中,<if> 元素用于根据传递的参数动态生成查询条件。如果传递了 id 参数,那么会在SQL语句中添加 AND id = #{id},如果传递了 username 参数,会在SQL语句中添加 AND username = #{username}...
MyBatis 3 动态SQL-基本介绍
MyBatis 3中的动态SQL是一种强大的特性,它允许在XML映射文件中根据条件来动态生成SQL语句,从而满足不同的查询需求。以下是动态SQL的基本介绍:1. 动态SQL元素MyBatis提供了一系列的动态SQL元素,用于在XML映射文件中构建动态SQL语句。这些元素包括: <if>:根据指定条件包含或排除SQL片段。 <choose>、<when>、<otherwise>:类似于Java中的switch语句,选择一个分支进行执行。 <trim>:处理SQL语句的前缀和后缀,可以用于动态拼接WHERE子句等。 <foreach>:用于循环遍历集合,生成多个SQL片段。2. 动态SQL示例使用 <if> 元素:<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users WHERE 1=1 <if test="id...
MyBatis 3 动态SQL
MyBatis 3允许你使用动态SQL构建灵活的查询语句,以便根据不同条件生成不同的SQL语句。以下是一些常见的动态SQL用法:1. If元素使用<if>元素可以根据条件包含或排除部分SQL语句:<select id="getUser" parameterType="map" resultType="User"> SELECT * FROM users WHERE 1=1 <if test="id != null"> AND id = #{id} </if> <if test="username != null"> AND username = #{username} </if></select>在上面的例子中,<if> 元素用于根据传递的参数来动态生成查询条件。2. Choose、When、Otherwise元素<choose>元素类似于Java中的swi...
MyBatis 3 XML映射文件-缓存
MyBatis 3通过缓存机制来提高查询性能,可以在XML映射文件中配置缓存。MyBatis提供两种类型的缓存:本地缓存和二级缓存。1. 本地缓存本地缓存是MyBatis的默认缓存机制,它是基于线程的,每个线程拥有自己的本地缓存。本地缓存默认是开启的,但你可以通过在<settings>元素中配置localCacheScope来关闭它:<settings> <setting name="localCacheScope" value="STATEMENT"/></settings>上述配置中,localCacheScope 的值有两个选项:"SESSION" 和 "STATEMENT"。"SESSION" 表示在整个会话期间启用本地缓存,而 "STATEMENT" 表示仅在当前语句执行期间启用本地缓存。2. 二级缓存二级缓存是一个跨SqlSession的缓存,可以在多个会话中共享。要启用二级缓存,需要在XML映射文件的&l...
MyBatis 3 XML映射文件-自动映射
MyBatis 3中的XML映射文件可以通过自动映射来简化配置,减少样板代码。在MyBatis中,自动映射可以通过<resultMap> 元素的 autoMapping 属性来实现。下面是一个简单的例子,演示如何在XML映射文件中使用自动映射:<!-- 假设有一个数据库表,表中有id、name和age字段 --><!-- 数据库实体类 --><resultMap id="userResultMap" type="User" autoMapping="true"> <!-- id字段会自动映射 --> <id property="id" column="id" /> <!-- name和age字段也会自动映射 --> <result property="name" column="name" /> <result property=&quo...
MyBatis 3 结果映射-鉴别器
MyBatis 中的鉴别器(Discriminator)是一种用于处理不同结果映射的机制,通常用于处理具有不同属性的对象。在 MyBatis 3 中,鉴别器被用于根据某个属性的值选择不同的结果映射。以下是一个简单的例子,展示了如何在 MyBatis 中使用鉴别器:<resultMap id="animalResultMap" type="Animal"> <id property="id" column="id" /> <result property="name" column="name" /> <!-- 使用鉴别器 --> <discriminator javaType="int" column="type"> <!-- 指定鉴别值和对应的结果映射 --> <case value=&qu...
MyBatis 3 结果映射-集合
在MyBatis 3中,集合映射(Collection Mapping)用于描述一对多的关联关系,其中一个实体关联到多个子实体。集合映射可以通过 <collection> 元素进行配置。以下是一个简单的集合映射的例子:<resultMap id="userResultMap" type="com.example.model.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <!-- 配置一对多的关联 --> <collection property="posts" ofType=&quo...
MyBatis 3 结果映射-关联
在MyBatis 3中,关联(Association)是一种结果映射的方式,用于描述不同实体之间的关联关系。关联可以通过 <association> 元素来配置,它通常用于配置两个实体之间的一对一关系。以下是一个简单的关联映射的例子:<resultMap id="userResultMap" type="com.example.model.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <!-- 配置一对一的关联 --> <association property="profile" ...
MyBatis 3 结果映射-基本方法
在MyBatis 3中,结果映射是将数据库查询结果映射到Java对象的过程。MyBatis提供了多种方式来配置结果映射,以下是一些基本的方法:1. <resultType> 属性<resultType> 属性用于指定查询结果的映射类型,即返回的Java对象类型。它可以直接指定Java类的全限定名,或者使用别名(type aliases)。<select id="getUserById" resultType="com.example.model.User"> SELECT * FROM users WHERE id = #{id}</select>在这个例子中,getUserById 方法的查询结果将会映射到 com.example.model.User 类型的对象。2. <resultMap> 元素<resultMap> 元素用于定义更复杂的结果映射规则,可以精确地指定数据库列与Java对象属性之间的映射关系。以下是一个简单的 <resultMap> 的例...
MyBatis 3 XML映射文件-结果映射
在MyBatis 3 XML映射文件中,结果映射(Result Mapping)用于定义如何将查询结果映射到Java对象或其他类型。结果映射主要使用 <resultMap> 元素进行配置。以下是一个基本的结果映射的例子:<resultMap id="userResultMap" type="com.example.model.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/></resultMap>在这个例子中: id 属性指定了结果映射的唯一标识。 type 属性指定了映射到的Java对象类型。 <id> 元...
MyBatis 3 XML映射文件-参数
在MyBatis 3 XML映射文件中,参数(Parameters)是指在映射器接口方法中传递给SQL语句的值。参数可以通过 <parameterMap>、<parameterType>、<parameter> 等元素进行定义。以下是一些基本的参数配置方式:<parameterMap> 元素:<parameterMap> 元素用于定义参数映射,可以显式地为每个参数指定名称和类型。这个方式不太常用,因为MyBatis可以通过反射机制自动获取参数信息。<parameterMap id="userParameterMap" type="com.example.model.User"> <parameter property="id" jdbcType="INTEGER"/> <parameter property="username" jdbcType="VARCHAR"/...