Серия MyBatis (семь) — MyBatis использует разработку аннотаций | Задача обновления за август

задняя часть MyBatis
Серия MyBatis (семь) — MyBatis использует разработку аннотаций | Задача обновления за август

Статьи по Теме

Краткое содержание серии MyBatis:Серия MyBatis


предисловие

  • Аннотации используются в нашей работе все чаще и чаще, независимо от того, изучаете ли вы Spring или SpringBoot, разработка аннотаций необходима.

  • Нам нужно научиться использовать разработку аннотаций в Mybatis.

  • Ниже приведены оригинальные слова официального документа:

    • Использование аннотаций для сопоставления простых операторов делает код более лаконичным, но для немного более сложных операторов аннотации Java не только неэффективны, но и делают ваши и без того сложные операторы SQL более запутанными. Поэтому, если вам нужно выполнить какие-то очень сложные операции, лучше всего использовать XML для сопоставления инструкции.
    • То, как вы решите настроить сопоставления и считаете ли вы, что вам следует унифицировать форму определений операторов сопоставления, полностью зависит от вас и вашей команды. Другими словами, никогда не придерживайтесь одного метода, вы можете легко портировать и переключаться между методами сопоставления операторов на основе аннотаций и XML.
  • То есть мы можем использовать аннотации для простых операторов и использовать сопоставление операторов XML для сложных. Конечно, оба пути определенно могут существовать одновременно!

Аннотации реализуют CRUD

  • Предварительные условия, необходимо настроить маппер

    • <mappers>
          <package name="dy.mapper"/>
      </mappers>
      

①, проверить (выбрать)

  • Добавить аннотацию sql в картограф

    • public interface UserMapper {
          @Select("select * from user where id = #{id}")
          List<User> getUserInfo(@Param("id") Integer id);
      }
      
  • Test

    • @Test
      public void selectUser() {
          SqlSession session = MybatisUtils.getSession();
          UserMapper mapper = session.getMapper(UserMapper.class);
          List<User> users = mapper.getUserInfo(30);
          for (User map: users){
              System.out.println(map);
         }
          session.close();
      }
      
  • Результаты

    • image-20210716142437392.png

②, увеличить (вставить)

  • Добавить аннотацию sql в картограф

    • public interface UserMapper {
          @Insert("insert into user(name,age,`like`)values(#{name},#{age},#{like} )")
          Integer addUserInfo(User user);
      }
      
  • Test

    • @Test
          public void addUserInfo() {
              SqlSession session = MybatisUtils.getSession();
              UserMapper mapper = session.getMapper(UserMapper.class);
      ​
              //造数据
              User user = new User();
              user.setName("大鱼");
              user.setAge(25);
              user.setLike("吃鱼");
              Integer statusNum = mapper.addUserInfo(user);
              System.out.println(statusNum);
      ​
              session.commit();//提交事务
              session.close();
      }
      
  • Результаты

    • image-20210716143558150.png
    • image-20210716143707416.png

③, изменить (обновить)

  • Добавить аннотацию sql в картограф

    • public interface UserMapper {
          @Update("update user set name = #{name},age = #{age},`like` = #{like} where id = #{id}")
          Integer updateUserInfo(User user);
      }
      
  • Test

    •     @Test
          public void updateUserInfo() {
              SqlSession session = MybatisUtils.getSession();
              UserMapper mapper = session.getMapper(UserMapper.class);
      ​
              //造数据
              User user = new User();
              user.setId(43);
              user.setName("新大鱼");
              user.setAge(23);
              user.setLike("大吉大利,今晚吃鸡!");
              Integer statusNum = mapper.updateUserInfo(user);
              System.out.println(statusNum);
      ​
              session.commit();//提交事务
              session.close();
          }
      ​
      
  • Результаты

    • image-20210716143818088.png
    • image-20210716143837920.png

④, удалить (удалить)

  • Добавить аннотацию sql в картограф

    • public interface UserMapper {
          @Delete("delete from user where id = #{id}")
          Integer deleteUserInfo(int id);
      }
      
  • Test

    •     @Test
          public void deleteUserInfo() {
              SqlSession session = MybatisUtils.getSession();
              UserMapper mapper = session.getMapper(UserMapper.class);
              Integer statusNum = mapper.deleteUserInfo(43);
              System.out.println(statusNum);
      
              session.commit();//提交事务
              session.close();
          }
      
  • Результаты

    • image-20210716143909489.png
    • image-20210716143922248.png

⑤, автоматическая отправка транзакций

  • Вы обнаружили, что, кроме запросов, другие операции должны представлять транзакции!

  • На самом деле MyBatis поддерживает автоматическую отправку транзакций~

  • Помните наш класс MybatisUtils? Не забудьте вернуться и прочитать мою предыдущую статью!

  • public class MybatisUtils {
    
       private static SqlSessionFactory sqlSessionFactory;
    
       static {
           try {
               String resource = "ContextAplication.xml";
               InputStream inputStream = Resources.getResourceAsStream(resource);
               sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
    
       //获取SqlSession连接
       public static SqlSession getSession(){
           //这里传入 true  即可自动提交事务!无需手动提交
           //但是不建议使用,建议手动提交commit
           return sqlSessionFactory.openSession(true);
      }
    }
    
  • Удалите код, который фиксирует транзакцию, давайте проверим, работает ли он!

    •     @Test
          public void addUserInfo() {
              SqlSession session = MybatisUtils.getSession();
              UserMapper mapper = session.getMapper(UserMapper.class);
              //造数据
              User user = new User();
              user.setName("我是测试提交事务的");
              user.setAge(25);
              user.setLike("事务已经取消了");
              Integer statusNum = mapper.addUserInfo(user);
              System.out.println(statusNum);
              //这里本来是提交事务的代码
      	    //session.commit();//提交事务
              session.close();
          }
      
  • Результаты:

    • image-20210716144433708.png
    • image-20210716144443535.png
  • Почему не рекомендуется настраивать автофиксацию транзакций?

    • Это редко используется. Вы можете использовать это каждый раз, когда выполняете операцию CRUD в базе данных. Если метод взаимодействует с базой данных несколько раз, если каждое соединение находится в отдельном соединении, транзакция неуправляема!
    • Я не буду подробно объяснять, почему я не могу это контролировать, после того, как будет написана основная серия статей, будет опубликована серия исходных кодов MyBatis! Когда придет время, я объясню это подробно.Я только объясняю использование здесь.Я буду использовать его в первую очередь! Узнайте, почему он используется именно так! Зачем использовать это так!

Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~

Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах