Mybatis学习笔记-注解开发

面向接口编程

  • 根本原因:【解耦】,【可拓展】,【更高规范性】
  • 接口类型:
    • abstract class
    • interface

使用注解开发

  • 简单语句可用注解开发(直接查询,列名与属性名相同)
本质:反射机制实现
底层:动态代理
    • 注解直接在接口上实现
@Select("SELECT * FROM user")
List<User> getUsers();
    • 也与要配置核心配置文件
<!--绑定接口-->
<mappers>
    <mapper class="cn.iris.dao.UserMapper"/>
</mappers>
    • 测试
    @Test
    public void getUsersTest() {
        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();
    }
  • 复杂情况均用xml文件配置

注解实现CRUD

在工具类创建时实现自动提交事务

// 有了 SqlSessionFactory,我们可以从中获得 SqlSession 的实例
public static SqlSession getSqlSession() {
    return sqlSessionFactory.openSession(true);
}
// 涉及源码
public SqlSession openSession(boolean autoCommit) {
    return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}

查询

@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(@Param("id") int id);

添加

@Insert("INSERT INTO user(id,name,pwd) VALUES (#{id},#{name},#{password})")
int addUser(User user);

修改

@Update("UPDATE user SET name = #{name} WHERE id = #{id}")
int updateUser(@Param("id") int id, @Param("name") String name);

删除

@Delete("DELETE FROM user WHERE id = #{id}")
int deleteUserById(@Param("id") int id);
方法存在多参数时,每个参数前都需要加@Param("列名")

@param()注解

  • 基本类型参数&String类型,需要加
  • 引用类型(如:User)不用加
  • 只有单参,可忽略但不建议
  • SQL中引用的则是该@param设定的属性名

#{} 与 ${}区别

--#{}:预编译符--没有sql注入风险
--${}:常规编译(字符串拼接)--存在sql注入风险

posted @ 2021-08-06 17:28  菜鸢爱敲bug  阅读(77)  评论(0编辑  收藏  举报