Mybatis学习笔记9、使用注解开发

9、使用注解开发

9.1、面向接口编程

解耦合

定义和实现分离

针对复用技术,体现整体架构

9.2、使用注解写sql

在接口上加注解就不需要 mapper.xml 了

public interface UserMapper {
    @Select("select * from mybatis.user")
    List<User> getUsers();
}

测试类不变

@Test
public void testSelectAll() {
	try (SqlSession session = MybatisUtils.getSqlSession()) {
		UserMapper mapper = session.getMapper(UserMapper.class);
		List<User> userList = mapper.getUsers();
		for (User u : userList) {
			System.out.println(u);
		}
	}
}

结果:

User{id=1, name='dzy', passwd='null'}
User{id=2, name='张三', passwd='null'}
User{id=3, name='李四', passwd='null'}
User{id=4, name='王五', passwd='null'}
User{id=5, name='Hello', passwd='null'}
User{id=6, name='李五', passwd='null'}

为什么pwd是null?

  • 因为 java 属性是 passwd 字段名是 pwd,并且没有使用 resultMap。

官方文档说:

  • 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
  • 选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。

9.3、使用注解传参数

编写接口(每一个参数都需要@Param注解):

List<User> getUserByNameAndPasswd(@Param("n") String name, @Param("p") String passwd);

在 mapper.xml 的 sql 中直接使用注解里的参数 n 和 p 。

<select id="getUserByNameAndPasswd" resultMap="userMap">
	select * from mybatis.user where `name` = #{n} and `pwd` = #{p}
</select>

编写测试代码:

扫描二维码关注公众号,回复: 10247354 查看本文章
@Test
public void TestSelectByNameAndPwd() {
	try (SqlSession session = MybatisUtils.getSqlSession()) {
		UserMapper mapper = session.getMapper(UserMapper.class);
		List<User> userList = mapper.getUserByNameAndPasswd("dzy","123456");
		for (User u: userList) logger.info(u);
	}
}

结果:

[com.dzy.dao.UserDaoTest]-User{id=1, name='dzy', pwd='123456'}

为什么这个 pwd 不是 null?

  • 因为设置了 resultMap

注意:

  • 使用注解传参可以传多个参数
  • 要在每个基本类型参数前面加注解,String 什么的也要加
  • 引用类型不要加
  • sql 中引用的是注解中的参数

9.4、使用注解增删改

如果使用9.2注解中写 sql 的方法,mybatis 会把 autoCommit 设置为 true。这样就不需要写sqlSession.commit()提交事务了。系统会自动提交这个事务。

发布了41 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dzydzy7/article/details/105042917