mybatis xml if写法
时间: 2023-07-06 20:23:45 浏览: 73
MyBatis中使用XML文件来定义SQL语句,其中if标签可以用于动态生成SQL语句的where条件。示例代码如下:
```
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
```
上面的代码中,使用了where标签来包含动态生成的SQL语句的where条件部分,if标签用于判断是否需要添加where条件,test属性用于指定判断条件,当test条件成立时,if标签内的SQL语句会被添加到where条件中。如果test条件不成立,则if标签内的SQL语句不会被添加到where条件中。
注意,这里的#{id}、#{name}、#{age}是MyBatis中的占位符,用于替换SQL语句中的参数,具体用法可以参考MyBatis官方文档。
相关问题
mybatis xml 条件写法
MyBatis XML 中常见的条件写法有以下几种:
1. if 标签:根据条件判断是否需要拼接 SQL,可以嵌套在 where 标签中。
```
<select id="selectUser" resultType="User">
SELECT * FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
</where>
</select>
```
2. choose、when、otherwise 标签:类似于 Java 中的 switch 语句,根据条件选择不同的 SQL 语句。
```
<select id="selectUser" resultType="User">
SELECT * FROM users
<where>
<choose>
<when test="id != null">
AND id = #{id}
</when>
<when test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</when>
<otherwise>
AND state = '1'
</otherwise>
</choose>
</where>
</select>
```
3. where 标签:用于动态拼接 SQL 中的 WHERE 子句,会自动去除 WHERE 关键字前面的多余条件。
```
<select id="selectUser" resultType="User">
SELECT * FROM users
<where>
<if test="id != null">
AND id = #{id}
</if>
<if test="name != null and name != ''">
AND name like concat('%', #{name}, '%')
</if>
<if test="state != null">
AND state = #{state}
</if>
</where>
</select>
```
4. foreach 标签:用于遍历对象集合或数组,生成对应的 SQL 语句。
```
<select id="selectUserByIds" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
```
mybatisxml写法
### MyBatis XML配置及映射文件的最佳实践与示例
#### 一、MyBatis 配置文件结构
MyBatis 的核心配置文件通常命名为 `mybatis-config.xml`,此文件用于定义全局设置项以及数据源连接池等信息。一个典型的配置如下所示:
```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>
<!-- 环境变量 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
```
上述代码展示了如何指定数据库驱动程序、URL和其他必要的参数[^2]。
#### 二、映射文件编写指南
对于每一个持久化实体类(如 User),都需要创建对应的 Mapper 接口及其关联的 XML 文件来进行 CRUD 操作声明。下面是一个简单的例子展示怎样在一个名为 `UserMapper.xml` 的映射文件里定义查询语句并指明结果集应映射至哪个 Java 类型的对象上:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<!-- 使用 resultMap 定义复杂的结果映射关系 -->
<resultMap id="BaseResultMap" type="com.example.model.User">
<id column="user_id" property="userId"/>
<result column="name" property="name"/>
<result column="email" property="email"/>
</resultMap>
<!-- 基本查询操作 -->
<select id="getUserById" parameterType="int" resultMap="BaseResultMap">
SELECT user_id, name, email FROM users WHERE user_id = #{id}
</select>
<!-- 插入新记录 -->
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
<!-- 更新现有记录 -->
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users SET name=#{name}, email=#{email} WHERE user_id=#{userId}
</update>
<!-- 删除记录 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE user_id=#{id}
</delete>
<!-- 动态SQL示例 -->
<select id="findUsersByConditions" resultType="com.example.model.User">
SELECT * FROM users
<where>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="email != null and email != ''">
AND email = #{email}
</if>
</where>
</select>
</mapper>
```
这段代码不仅包含了基本的数据访问接口方法,还利用了 `<if>` 和其他动态 SQL 标签来构建灵活多变的查询逻辑[^1]。
阅读全文
相关推荐














