小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
使用注解开发步骤
1、在接口上实现注解
@Select("select * from user")
//查询用户
List<User> getUser();
2、需要在核心配置文件中绑定接口
<mappers>
<mapper class="com.cheng.dao.UserMapper"></mapper>
</mappers>
3、测试
@Test
public void getUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUser();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
本质:反射机制的实现
底层:动态代理
注解完成CRUD
在工具类设置事务自动提交,加个参数
SqlSession sqlSession = sqlSessionFactory.openSession(true);
查询
//当方法存在多个参数,所有的参数前面必须加上@Param(),基本对象才需要@Param(),引用对象(如user,map)不需要
@Select("select * from user where id=#{id}")
User getUserById(@Param("id")int id);//测试的时候id以@Param()里的为主
//@Param()源码
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Param {
String value();
}
测试
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(2);
System.out.println(userById);
sqlSession.close();
}
增加
@Insert("insert into user(id,name,pwd)values(#{id},#{name},#{pwd})")
int addUser(User user);
测试
@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(5, "万里", "555555"));
sqlSession.close();
}
修改
@Update("update user set pwd=#{pwd},name=#{name} where id=#{id}")
int updateUser(User user);
测试
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(1,"神明","123456"));
sqlSession.close();
}
删除
@Delete("delete from user where id=#{id}")
int deleteUser(@Param("id")int id);
测试
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(5);
sqlSession.close();
}