相关文章
MyBatis系列汇总:MyBatis系列
前言
-
注解在我们的工作当中使用的频率越来越高了,不管是学习Spring还是SpringBoot,注解开发都是必不可少的。
-
我们需要学习一下在Mybatis中如何使用注解开发。
-
以下是官方文档的原话:
- 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
- 选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。
-
也就是简单的语句我们可以使用注解,复杂的还是使用XML语句映射。当然,两种方式肯定可以同时存在的!
注解实现CRUD
-
前置条件,需要配置映射器
-
<mappers> <package name="dy.mapper"/> </mappers>
-
①、查(select)
-
mapper中增加注解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(); }
-
-
执行结果
②、增(insert)
-
mapper中增加注解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(); }
-
-
执行结果
③、改(update)
-
mapper中增加注解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(); }
-
-
执行结果
④、删(delete)
-
mapper中增加注解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的源码系列文章!到时候再详细讲解,这里只讲解使用,先会用!再去深究为什么要这样用!为什么能这样用!
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah