### 环境说明 本案例已经完成了基础环境的搭建,只需要大家导入day09-springboot-mybatis-dish模块,执行tb_dish.sql文件中的SQL创建数据库和表,打开application.properties配置文件,修改连接数据库的相关参数(==密码==)即可 ### 需求说明 #### 1、完成查询所有的功能 > 步骤一:在resources中定义和DishMapper接口对应的映射配置文件,注意映射配置文件和mapper接口的对应关系。 > > 步骤二:在映射配置文件中给selectAll方法配置SQL语句 > > 步骤三:在Day09SpringbootMybatisDishApplicationTests的testSelectAll方法中调用dishMapper的selectAll方法测试 #### 2、完成根据id查询,新增,根据id修改,根据id删除这四个需求 > 参考上面的步骤二和步骤三 #### 3、完成根据菜品名称(name)、菜品码(code)动态查询菜品信息 > 参考上面的步骤二和步骤三 > > 提示:动态SQL需要使用<where>和<if>标签,搜索需要使用模糊查询。 #### 4、完成根据id批量删除菜品 > 参考上面的步骤二和步骤三 > > 提示:动态SQL需要使用foreach标签遍历,遍历数组注意占位符的名称。
时间: 2023-06-26 09:06:44 浏览: 118
好的,对于这个需求我会逐一进行讲解和操作演示。
1. 查询所有菜品
首先,我们需要在 resources 目录下创建一个名为 `DishMapper.xml` 的文件,用于编写对应的 SQL 语句。
在 `DishMapper.xml` 文件中,我们需要定义一个 `<select>` 标签,用于查询所有的菜品信息。具体代码如下:
```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.demo.mapper.DishMapper">
<select id="selectAll" resultType="com.example.demo.entity.Dish">
select * from tb_dish
</select>
</mapper>
```
其中,`namespace` 属性应该填写对应的 `DishMapper` 接口的全限定名,`resultType` 属性应该填写对应实体类的全限定名。
接着,我们需要在 `DishMapper` 接口中添加一个方法,用于调用上面定义的 SQL 语句。具体代码如下:
```java
public interface DishMapper {
// 查询所有菜品
List<Dish> selectAll();
}
```
最后,在 `Day09SpringbootMybatisDishApplicationTests` 类中,我们需要编写一个测试方法,用于测试查询所有菜品的功能。具体代码如下:
```java
@SpringBootTest
class Day09SpringbootMybatisDishApplicationTests {
@Autowired
private DishMapper dishMapper;
@Test
void testSelectAll() {
List<Dish> dishes = dishMapper.selectAll();
for (Dish dish : dishes) {
System.out.println(dish);
}
}
}
```
2. 根据 id 查询、新增、修改和删除菜品
对于这些操作,我们只需要在 `DishMapper.xml` 文件中分别定义对应的 SQL 语句,然后在 `DishMapper` 接口中分别添加对应的方法即可,具体代码如下:
```xml
<!-- 根据 id 查询菜品 -->
<select id="selectById" parameterType="int" resultType="com.example.demo.entity.Dish">
select * from tb_dish where id = #{id}
</select>
<!-- 新增菜品 -->
<insert id="insert" parameterType="com.example.demo.entity.Dish">
insert into tb_dish(name, code, price) values(#{name}, #{code}, #{price})
</insert>
<!-- 根据 id 修改菜品 -->
<update id="updateById" parameterType="com.example.demo.entity.Dish">
update tb_dish set name = #{name}, code = #{code}, price = #{price} where id = #{id}
</update>
<!-- 根据 id 删除菜品 -->
<delete id="deleteById" parameterType="int">
delete from tb_dish where id = #{id}
</delete>
```
```java
public interface DishMapper {
// 查询所有菜品
List<Dish> selectAll();
// 根据 id 查询菜品
Dish selectById(int id);
// 新增菜品
int insert(Dish dish);
// 根据 id 修改菜品
int updateById(Dish dish);
// 根据 id 删除菜品
int deleteById(int id);
}
```
3. 根据菜品名称和菜品码动态查询菜品信息
对于这个需求,我们需要在 `DishMapper.xml` 文件中定义一个包含 `<where>` 和 `<if>` 标签的动态 SQL 语句。具体代码如下:
```xml
<select id="selectByCondition" resultType="com.example.demo.entity.Dish">
select * from tb_dish
<where>
<if test="name != null and name != ''">
and name like concat('%', #{name}, '%')
</if>
<if test="code != null and code != ''">
and code like concat('%', #{code}, '%')
</if>
</where>
</select>
```
其中,`<where>` 标签用于将所有的条件组合成一个完整的查询条件,并自动去掉其中的无效条件;`<if>` 标签用于判断当前条件是否有效,如果有效就拼接到查询条件中。
接着,我们需要在 `DishMapper` 接口中添加一个方法,用于调用上面定义的 SQL 语句。具体代码如下:
```java
public interface DishMapper {
// 查询所有菜品
List<Dish> selectAll();
// 根据 id 查询菜品
Dish selectById(int id);
// 新增菜品
int insert(Dish dish);
// 根据 id 修改菜品
int updateById(Dish dish);
// 根据 id 删除菜品
int deleteById(int id);
// 根据菜品名称和菜品码动态查询菜品信息
List<Dish> selectByCondition(String name, String code);
}
```
最后,在 `Day09SpringbootMybatisDishApplicationTests` 类中,我们需要编写一个测试方法,用于测试根据菜品名称和菜品码动态查询菜品信息的功能。具体代码如下:
```java
@Test
void testSelectByCondition() {
List<Dish> dishes = dishMapper.selectByCondition("宫保鸡丁", null);
for (Dish dish : dishes) {
System.out.println(dish);
}
}
```
4. 根据 id 批量删除菜品
对于这个需求,我们需要在 `DishMapper.xml` 文件中定义一个包含 `<foreach>` 标签的动态 SQL 语句。具体代码如下:
```xml
<delete id="batchDeleteByIds">
delete from tb_dish where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>
```
其中,`<foreach>` 标签用于遍历指定的数组,并将其转换为逗号分隔的字符串,并在 SQL 语句中使用。
接着,我们需要在 `DishMapper` 接口中添加一个方法,用于调用上面定义的 SQL 语句。具体代码如下:
```java
public interface DishMapper {
// 查询所有菜品
List<Dish> selectAll();
// 根据 id 查询菜品
Dish selectById(int id);
// 新增菜品
int insert(Dish dish);
// 根据 id 修改菜品
int updateById(Dish dish);
// 根据 id 删除菜品
int deleteById(int id);
// 根据菜品名称和菜品码动态查询菜品信息
List<Dish> selectByCondition(String name, String code);
// 根据 id 批量删除菜品
int batchDeleteByIds(int[] ids);
}
```
最后,在 `Day09SpringbootMybatisDishApplicationTests` 类中,我们需要编写一个测试方法,用于测试根据 id 批量删除菜品的功能。具体代码如下:
```java
@Test
void testBatchDeleteByIds() {
int[] ids = new int[]{1, 2, 3};
int rows = dishMapper.batchDeleteByIds(ids);
System.out.println("删除了 " + rows + " 条记录");
}
```
好了,以上就是对于这个需求的详细讲解和操作演示。希望对你有所帮助!
阅读全文