1)创建Dog类,在其中添加name和age属性。创建对应数据库,根据name和 age属性,使用MyBatis查询和更新Dog类,要求当name和age属性的值为空时,去掉相应的筛选添加(使用动态SQL实现),在此基础上,查询id为3、8和2的数据,要求使用动态SQL实现
时间: 2024-02-13 19:01:42 浏览: 115
好的,以下是基于 MyBatis 的实现示例代码:
首先,创建 `Dog` 类,添加 `name` 和 `age` 属性:
```java
public class Dog {
private Integer id;
private String name;
private Integer age;
// 省略 getter 和 setter 方法
}
```
接下来,创建 `DogMapper` 接口,定义查询和更新操作:
```java
public interface DogMapper {
List<Dog> findDogs(@Param("name") String name, @Param("age") Integer age, @Param("ids") List<Integer> ids);
int updateDog(Dog dog);
}
```
在 `findDogs` 方法中,使用 `@Param` 注解指定查询条件的参数名称,可以通过 `if` 元素实现根据属性值是否为空来动态拼接 SQL 语句:
```xml
<select id="findDogs" resultType="Dog">
SELECT * FROM dog
<where>
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
<if test="ids != null and ids.size() > 0">
AND id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</select>
```
在 `updateDog` 方法中,使用 `set` 元素动态拼接更新语句:
```xml
<update id="updateDog" parameterType="Dog">
UPDATE dog
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
WHERE id = #{id}
</update>
```
最后,使用 MyBatis 的 SQLSessionFactory 和 DogMapper 进行查询和更新操作:
```java
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sessionFactory.openSession();
DogMapper mapper = session.getMapper(DogMapper.class);
List<Integer> ids = Arrays.asList(3, 8, 2);
List<Dog> dogs = mapper.findDogs(null, null, ids);
for (Dog dog : dogs) {
System.out.println(dog.getName() + ", " + dog.getAge());
}
Dog dog = new Dog();
dog.setId(1);
dog.setName("Tom");
dog.setAge(null);
mapper.updateDog(dog);
session.commit();
session.close();
```
在查询中传入 `null` 或空字符串,会自动忽略相应的条件;在更新中传入 `null`,会自动忽略相应的字段。
阅读全文