Mybatis - 基础学习6

一.CRUD

我们可以在工具类中设置自动提交事务!

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }

 

1.编写接口:使用注解完成简单的sql语句

@Param    它的属性和sql语句中的字段对应,只有属性才需要加,对象就不需要

public interface UserMapper {
    @Select("select * from user where id = 2")
    List<User> getUser();
    @Insert("insert into user(`id`,`name`,`pwd`) values(6,'nihao','99877')")
    int addUser(User user);
    @Update("update user set `name`=#{maa} where id=#{uid}")
    int updateUser(@Param("uid")int id,@Param("maa")String name);
    @Delete("delete from user where name=#{maa}")
    int deteleUser(@Param("maa")String name);
}

 

2.测试

注意:使用注解操作数据库,必须在项目的核心文件下绑定接口

    @Test
    public void testCRUD(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int key1 = mapper.addUser(new User(6, "hhhh", "963852"));
        int key2 = mapper.updateUser(6, "lll");
        int key3 = mapper.deteleUser("lll");
        if(key1>0){
            System.out.println("插入成功!");
        }
        sqlSession.close();
    }

 

关于  #{  }   ${  }的区别

  • #{  }     能够很大程度上的防止sql注入的问题
  • ${  }     使用的是字符拼接来完成sql语句实现,就不能防止sql注入问题
  • 总的来说:#{  }   比   ${  }  更加安全,高效

二.Lombok

  • Lombok项目是一个java库
  • 它可以自动插入到编辑器和构建工具中(插件plugs)
  • 不需要再写getter、setter或equals方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量

使用步骤:

1.在idea中下载插件’

 

 

2.导入jar包(我依然坚定的选择maven)

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>

 

3.使用

 

通常是简化我们的实体类相关的get,set方法,还有有参无参构造

使用前的实体类,可以看到方法体特别多

 

 

 使用后:我们可以很清晰的看到,只用了几个简单的注解,接写完了实体类所需的方法,构造器,且类中结构干净

 

 

 

总结:Lombok的优缺点

优点:

  1. 能通过注解自动生成构造器,getter/setter,equals,hashcode,toString等方法,提高了一定的开发效率、
  2. 让代码变得更加简洁,不用过多的关注对应的方法
  3. 属性做修改时,也简化了这些属性所生成的getter/sette方法

缺点:

  1. 不支持多种参数构造器的重载,方法重载(其实可以把其它所需的方法写在类里也可以完成重载)
  2. 虽然不用手动的去写getter/sette方法,但是大大降低了代码的可读性和完整性,降低了阅读源代码的舒适度

三.构建新项目出现的错误:总的来说就是mybatis对于xml文件扫描过于严格,导致最初我创建包的时候只想测试没有注意到这些细节

问题报错

 

 一直报错,文件提前结束,我一直以为是核心xml配置写错了,连接不到mysql,但是反复检查,并没有错,然后看了过了一会儿,我看到了我们项目结构

 

 除了核心配置xml文件外,还有两个mapper.xml,因为我在核心配置文件中配置的直接是class路径,就是接口路径,没有这个mapper.xml就没注意这个,但是当我点进去的时候发现,果然报错了

 

然后我赶紧把相关配置写了上去,结果又报了一个新的错误,但是比刚才的错误少,我又有信心了

 

 勉强可以看的出 “Mapper‘s  namespace  cannot  be  empty”,应该是mapper没有实例化,没有绑定接口的意思,我赶紧去看我的mapper.xml文件

 

 一眼看上去很正常,但仔细检查会发现,namespqce这个关键字没有

 

 当我写上去了以后才发现就可以正常运行了

 

 总的来说:是一个很好的教训,同时可以发现mybatis的规范和约束真的很严格,这样的错不仔真的检查不出来,毕竟我在核心配置文件绑定接口的时候,没有用到mapper.xml用的是class接口,理论上没有用就不配,结果导致了这么一个错误,是一个很大的提升。

 

posted @ 2022-11-18 17:59  回忆也交给时间  阅读(20)  评论(0编辑  收藏  举报