Mybatis--使用注解开发

使用注解开发

1.注解就直接在接口上实现

@Select("select * from user")
List<User> getUsers();

2.需要在核心配置文件中绑定接口!

<mappers>
     <mapper class="cn.cgz.dao.UserMapper"/>
</mappers>

3.测试

SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
@Test
public void getUsersTest(){
    
    
    //底层主要应用反射
    List<User> userList = mapper.getUsers();
       for(User user: userList){
    
    
          System.out.println(user);
       }
    sqlSession.close();
}

本质:反射机制实现

底层:动态代理

在这里插入图片描述

CRUD

  • 我们可以在工具类创建的时候实现自动提交事务,参数true自动提交事务
public static SqlSession getSqlSession(){
    
    
    return sqlSessionFactory.openSession(true);
}
  • 编写接口,增加注解
//方法存在多个参数,所有参数前面必须假设@Param("id")注解
@Select("select * from user where id=#{id}")
User getUserByID(@Param("id") int id);

@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);

@Update("update user set name=#{name},pwd=#{pwd} where id=#{id}")
int updateUser(User user);

@Delete("delete from user where id=#{uid}")
int deleteUser(@Param("uid") int id);
  • 测试类

【注意】我们必须要将接口注册绑定到我们的核心配置文件中!

关于@Param()注解

  • 基本类型的或者String类型,都需要加上
  • 引用类型不需要加
  • 如果只有一个基本类型的话,可以忽略,但是建议大家都加上
  • 我们在SQL中引用的就是我们这里的@Param()中设定的属性名!

#{}${}的区别

  1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.

  2. 将传入的数据直接显示生成在sql中。如:orderby将传入的数据直接显示生成在sql中。如:orderbyuser_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

  3. #方式能够很大程度防止sql注入。

  4. $方式无法防止Sql注入。

  5. 方式一般用于传入数据库对象,例如传入表名.

  6. 一般能用#的就别用​.

MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

猜你喜欢

转载自blog.csdn.net/weixin_45277249/article/details/112598613