Mybatis-07-使用注解开发
更好地面向接口开发
使用注解开发
直接在接口上写sql语句
public interface UserMapper {
@Select("select * from user")
List<User> getUsers();
}
需要在配置文件中绑定接口
注意用类绑定
<mappers>
<mapper class="com.cmy.dao.UserMapper"/>
</mappers>
测试
@Test
public void getUsers(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//底层主要使用反射
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUsers();
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
本质:反射机制实现
底层:动态代理
但
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
使用注解CRUD
在mybatis工具类创建的时候设置自动提交事务
//这里可以通过重载,自动提交事务
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
带参数的查询,如果参数多,则每个参数
[基本数据类型,String]都要+@Param以指定该参数,#{}----->@Param() 是对应的
(其他引用对象比如实体类不用)加
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
增加,这里的参数为引用对象,不用加@Param
@Insert("insert into user(id,name,pwd) values(id,name,pwd)")
int insertUser(User user);
修改
@Update("update user set name=#{name} where id = #{id}")
int modUsername(@Param("id") int id,@Param("name") String name);
删除
@Delete("delete from user where id = #{id}")
int delUser(@Param("id") int id);
注意核心配置文件中接口的绑定(!!!)
<mappers>
<mapper class="com.cmy.dao.UserMapper"/>
</mappers>