创建一个Dog类,在其中添加name和age属性。创建对应数据库,根据name和age属性,使用MyBatis动态SQL查询和更新Dog类。 (1)当name和age属性的值为空时,去掉相应的筛选条件。 (2)查询id为2、5、6的数据。
时间: 2024-05-16 19:18:06 浏览: 99
首先,我们需要先定义一个Dog类,并添加name和age属性:
```java
public class Dog {
private Long id;
private String name;
private Integer age;
// 省略getter和setter方法
}
```
接着,我们需要创建对应的数据库表,表结构如下:
```sql
CREATE TABLE `dog` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
然后,我们需要创建对应的Mapper接口和XML文件来实现动态SQL查询和更新Dog类。Mapper接口定义如下:
```java
public interface DogMapper {
List<Dog> selectDogs(@Param("name") String name, @Param("age") Integer age);
int updateDog(Dog dog);
}
```
XML文件内容如下:
```xml
<mapper namespace="com.example.mapper.DogMapper">
<resultMap id="BaseResultMap" type="com.example.model.Dog">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
</resultMap>
<select id="selectDogs" resultMap="BaseResultMap" parameterType="java.util.Map">
SELECT *
FROM dog
<where>
<if test="name != null and name != ''">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
<update id="updateDog" parameterType="com.example.model.Dog">
UPDATE dog
<set>
<if test="name != null">
name = #{name},
</if>
<if test="age != null">
age = #{age},
</if>
</set>
WHERE id = #{id}
</update>
</mapper>
```
接着,我们可以使用MyBatis的SqlSessionFactory来创建SqlSession,并通过SqlSession获取DogMapper实例:
```java
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
DogMapper dogMapper = sqlSession.getMapper(DogMapper.class);
```
最后,我们可以使用selectDogs方法进行动态SQL查询,如下所示:
```java
List<Dog> dogs = dogMapper.selectDogs(null, 2); // 查询age为2的所有狗
dogs = dogMapper.selectDogs("Snoopy", null); // 查询name为Snoopy的所有狗
dogs = dogMapper.selectDogs("Snoopy", 3); // 查询name为Snoopy且age为3的所有狗
```
同时,我们也可以使用updateDog方法来动态SQL更新Dog类,如下所示:
```java
Dog dog = new Dog();
dog.setId(2L);
dog.setName("Snoopy");
dogMapper.updateDog(dog); // 更新id为2的狗的name为Snoopy
dog.setId(5L);
dog.setAge(3);
dogMapper.updateDog(dog); // 更新id为5的狗的age为3
dog.setId(6L);
dog.setName("Charlie");
dog.setAge(2);
dogMapper.updateDog(dog); // 更新id为6的狗的name为Charlie,age为2
```
以上就是使用MyBatis动态SQL查询和更新Dog类的示例代码。
阅读全文