Статьи по Теме
Краткое содержание серии 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(); }
-
-
Результаты
②, увеличить (вставить)
-
Добавить аннотацию 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(); }
-
-
Результаты
③, изменить (обновить)
-
Добавить аннотацию 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(); }
-
-
Результаты
④, удалить (удалить)
-
Добавить аннотацию 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(); }
-
-
Результаты
⑤, автоматическая отправка транзакций
-
Вы обнаружили, что, кроме запросов, другие операции должны представлять транзакции!
-
На самом деле 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(); }
-
-
Результаты:
-
Почему не рекомендуется настраивать автофиксацию транзакций?
- Это редко используется. Вы можете использовать это каждый раз, когда выполняете операцию CRUD в базе данных. Если метод взаимодействует с базой данных несколько раз, если каждое соединение находится в отдельном соединении, транзакция неуправляема!
- Я не буду подробно объяснять, почему я не могу это контролировать, после того, как будет написана основная серия статей, будет опубликована серия исходных кодов MyBatis! Когда придет время, я объясню это подробно.Я только объясняю использование здесь.Я буду использовать его в первую очередь! Узнайте, почему он используется именно так! Зачем использовать это так!
Впереди долгий путь, и я обязательно буду его искать вдоль и поперёк~
Если вы думаете, что я блогеры хорошо пишу! Писать нелегко, пожалуйста, ставьте лайки, подписывайтесь и комментируйте, чтобы поощрять блоггеров ~ хахах