---
# System prepended metadata

title: 註解增刪改查
tags: [Mybatis-註解]

---

# 註解增刪改查
###### tags: `Mybatis-註解`

我們可以在工具類創建的時候，實現自動提交事物！
```java=
    public static SqlSession getSqlSession(){
         //讓事務自動提交
        return sqlSessionFactory.openSession(true);
    }
```

1.使用註解在接口實現增刪改查
**【注意：必須要將接口註冊綁定到核心配置文件中】**
```xml=
<!--綁定接口-->
    <mappers>
        <mapper class="com.kuang.dao.UserMapper"/>
    </mappers>
```

```java=
public interface UserMapper {
    @Select("select * from user")
    List<User> getUsers();

    //方法存在多個參數，所有的參數前面必須加上@Param()
    //@Param註解的作用是給引數命名,引數命名後就能根據名字得到引數值,正確的將引數傳入sql語句中
    //例如下方的@Param("id")，是指他會將後方int id獲得的參數，上傳到上方的sql語句使用
    @Select("select * from user where id = #{id}")
    User getUserByID(@Param("id") int id);

    @Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})")
    int addUser(User user);

    @Update("update user set name=#{name},pwd=#{password} where id=#{id}")
    int updateUser(User user);

    @Delete("delete from user where id=#{uid}")
    int deleteUser(@Param("uid") int id);
}
```

2.測試類
```java=
public class UserMapperTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        //底層主要應用反射
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.deleteUser(5);

        //先前要變更資料庫，需要使用提交
        //但MybatisUtils中，將openSession設置為true，因此會自動提交，不必再寫commit
        //sqlSession.commit();
        sqlSession.close();
    }

    //        mapper.updateUser(new User(5,"to","5555"));

//    mapper.addUser(new User(10,"hello","123456"));

    //        List<User> users = mapper.getUsers();
//        for(User user:users){
//            System.out.println(user);
//        }

//        User userByID = mapper.getUserByID(1);
//        System.out.println(userByID);
}

```

### 關於@Param()註解
* 基本類型的參數或者String類型需要加上
* 引用類型不需要加
* 如果只有一個基本類型的話，可以忽略，但是建議大家都加上
* 我們在SQL中引用的，就是我們這裡的@Param()中設定的屬性