mapper, service
首先有定义接口UserService
, 接口中的方法名为getUserById(id)
, getUserByName(String name)
, registerUser(UserInfo user)
这种.
然后,有如下目录:1
2
3
4
5com.springbootbasic.user
mapper
UserMapper
service
UserServiceImpl
mapper
在mapper
中的 接口UserMapper
中就是 mybatis 对应的方法,这个接口需要@Mapper
注解,接口中的方法一般都用@Select
, @Insert
, etc.注解;这些注解中写的就是要执行的sql; 至于这些方法本身,其中的参数用@Param
注解; e.g.
example1:
1 | @Select("select id, real_name as realName from table_user where id = #{id}") |
看出来:
- 本身参数是
int id
, 前面用@Param("id")
对应的是UserInfo
类中定义的字段id
; - mybatis注解中的参数,也就是对应注解的方法中的参数,要用
#{ }
修饰 - 因为
real_name
是表中的字段,realName
是UserInfo
类中定义的字段,所以是real_name as realName
example2:
1 | @Insert("insert into table_user (username, password)" + "values" (#{u.username}, #{u.password})) |
从上面的方法看出来,mybatis注解中#{}
修饰的参数,就是被注解的方法中的@Param
的参数
service
1 | public class UserServiceImpl implements UserService.Iface { |
这样分层的思路就表现的很好:
- mybatis作为半ORM框架,写sql,对数据库进行操作,一切都在
mapper
的interface中; - 而真正的业务逻辑, i.e. 这里的查询过程,都是在
service
层中;具体表现为@Autowired
mapper,调用mybatis接口中调用的方法查询。这里直接简单地传递参数就行了,因为定义内容都在mapper
中
irrelevant
虽然和 springboot中整合使用mybatis不相关,但是也不能忽视: 属于那种并没有什么技术含量,但是如果不知道就可能花很多时间但是都徒劳无功的问题:
Q: pom.xml
中导入各种dependency,但是import
之后idea仍然全红,怎么办?
A: File > Invalidate Caches/Restart
. Done.