MyBatis_2_动态SQL_参数传递_注解_事务处理

MyBatis框架

动态SQL

if判断
<select id="selectByCondition" resultMap="userMap">
	SELECT * FROM users WHEN
    <!--test属性的表达式为真时,if标签中的文本内容就会拼接到sql语句中-->
	<if test="id!=null">
		 id=#{id}
	</if>
</select>
choose/when/otherwies选择
 <!--单条件动态查询-->
<select id="selectByCondition" resultMap="userMap">
	select * from users where
    <choose> <!--相当于java中的switch-->
    	<when test="id!=null">id=#{id}</when><!--case-->
        <when test="userName!=null and userName != ''">
        	userName = #{userName}
        </when>
        <otherwise>1=1</otherwise>
        <!--恒等式解决语法错误,或者使用where标签-->
    </choose>
</select>
trim/where/set条件
 <!--多条件动态查询-->
<select id="selectByCondition" resultMap="userMap">
	SELECT * FROM users
   	<where>
    <!--智能生成WHERE语句,并解决了where and的sql语句错误,替换恒等式解决方案-->
    	<if test="id!=null">
	        AND id=#{id}
	    </if>
    	<!--test属性中判断条件是否满足-->
		<if test="userName!=null and userName != ''">
        	AND userName = #{userName}
    	</if>
    </where>
</select>

<!--单条件动态查询-->
<update id="updateOne" resultMap="userMap">
	UPDATE users
    <set>
    <!--set标签生成SET语句,并智能去除语句中多余逗号-->
    	<if test="userName!=null and userName!=''">
        	user_name = #{userName},
        </if>
        <if test="userSex!=null and userSex!=''">
        	user_sex = #{userSex},
        </if>
        <if test="userAge!=null and userAge!=''">
        	user_age = #{userAge},
        </if>
    </set>
    where id = #{id};
</update>

<trim prefix="" suffix="" suffixOverrides="" prefixOverrides="">
<!--
prefix:在trim标签内sql语句加上前缀。
suffix:在trim标签内sql语句加上后缀。
suffixOverrides:指定去除多余的后缀内容,如:suffixOverrides=",",去除trim标签内sql语句多余的后缀","。
prefixOverrides:指定去除多余的前缀内容
-->
</trim>
foreach循环
<select id="selectByCondition" resultMap="userMap">
  SELECT * FROM user
  <where>
    <foreach item="id" index="index" collection="list"
        open="id IN (" separator="," close=")" nullable="true">
          #{id}
    <!--item项,index索引,collection传入参数(数组或集合),open开头字符串-->
    <!--close结束字符串,separator循环间隔字符串,-->    
    </foreach>
  </where>
</select>

MyBatis参数传递

MyBatis接口方法中可接受各种参数,框架底层对参数进行不同封装处理

单个参数:

  1. POJO、javaBean类型,属性名和参数占位符一致

  2. Map集合,键名和参数占位符一致

  3. Collection

封装为Map,封装两次分别为arg0、collectin

  1. List

封装为List,封装三次次分别为arg0、collectin、list

  1. Array

封装为Map,封装两次次次分别为arg0、array

  1. 其他类型,直接使用

多参数:

  1. 封装为Map集合

  2. 集合中单个参数将会封装两次,命名为arg和param

即:map.put(“arg0”,参数1);map.put(“param0”,参数1);

  1. 可以使用@Param("xxx")注解中的字符串替换默认的arg键名

即:map.put(“xxx”,参数1);map.put(“param0”,参数1);

MyBatis注解开发

注解开发会比配置文件开发更方便,注解完成简单功能,配置文件完成复杂功能

查询:@Select

添加:@Insert

修改:@Update

删除:@Delete

集合映射:@ResultMap
类型映射:@ResultType

MyBatis事务处理

//openSession方法无参时等同于默认为false,手动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession();
//~~~~~~~~~~~~~~操作数据库的DML语句~~~~~~~~~~~~~~~~
sqlSession.rollback();//回滚事务
//~~~~~~~~~~~~~~操作数据库的DML语句~~~~~~~~~~~~~~~~
sqlSession.commit();//提交事务

//openSession方法参数为true时自动提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true);
MyBatis 注解方式是一种简化 SQL 编写的高级特性,允许开发者使用 Java 风格的注解(如 @Select, @Insert, @Update 和 @Delete 等)来代替 XML 映射文件来指定数据库操作。这种方式可以提高代码的可读性和减少冗余性,使得映射更接近于业务逻辑。 ### 使用 MyBatis 注解的基本结构 #### 1. 导入注解包 首先,在项目中引入 MyBatis注解相关包。例如,在 Maven 中的 `pom.xml` 文件中添加如下依赖: ```xml <dependencies> <dependency> <groupId>org.apache.ibatis</groupId> <artifactId>mybatis</artifactId> <version>3.x.y</version> </dependency> <!-- 其他依赖... --> </dependencies> ``` ### 创建 Mapper 接口 创建一个包含所需注解的接口。这个接口将作为 MyBatisSQL 映射文件的替代品。例如: ```java public interface UserMapper { // 使用 @Select 注解来查询用户列表 @Select("SELECT * FROM user") List<User> selectAllUsers(); // 使用 @Insert 注解插入新的用户 @Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})") int insertUser(User user); // 使用 @Update 注解更新用户的信息 @Update("UPDATE user SET name=#{newName} WHERE id=#{id}") void updateUser(int id, String newName); // 使用 @Delete 注解删除用户 @Delete("DELETE FROM user WHERE id=#{id}") void deleteUser(int id); } ``` ### 注解详解 - **@Select**: 用于执行 SQL 查询。参数通常包含一个字符串表达式,代表 SQL 语句。可以传递参数到 SQL 语句中。 - **@Insert**: 用于执行 SQL 插入语句。同样接受 SQL 字符串并允许注入参数。 - **@Update**: 用于执行 SQL 更新语句。 - **@Delete**: 用于执行 SQL 删除语句。 ### 整合与使用 在配置文件(通常是 `mybatis-config.xml` 或 `SqlSessionFactoryBuilder` 相关类)中引用这个接口: ```xml <mapper class="com.example.MyProject.UserMapper"/> ``` ### 注意事项 - **参数化输入**:尽管注解提供了一种简洁的方式,但在实际应用中应始终考虑参数化查询,以避免 SQL 注入攻击。 - **性能影响**:相对于 XML 映射,注解方式可能在某些情况下导致性能下降,因为它们需要更多的编译时处理。 - **可维护性**:虽然注解方式易于理解和编写,但对于复杂的查询和事务管理,XML 映射仍能提供更高的灵活性和可维护性。 ### 结论 MyBatis 注解方式是一个强大的工具,适合于简单至中等复杂度的应用场景。它简化了编码过程,提高了开发效率,但也需要注意其可能带来的性能和维护性的权衡。在选择是否采用注解方式时,应基于具体的项目需求和技术栈来进行评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值