欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mybatis:基于注解的环境搭建与基本使用

程序员文章站 2024-03-24 12:50:34
...

1、导入依赖(同xml,略)

2、主配置文件

同xml,此处略作修改

……
<!--指定dao接口的全类名,用于“扫描识别”注解-->
<mappers>
    <!--注意,此处的路径在书写时不会有任何提示-->
    <mapper class="dao接口全类名"/>
</mappers>

以后dao中每增加一个接口,就需要在mappers标签内增加对应的映射 

或者直接映射包:(只要接口在该包下,就不用再写映射了)

<mappers>
    //com.shop.mapper包
    <package name="com.shop.mapper"/>
</mappers>

3、使用注解

在要配置的dao接口中的方法上使用对应注解

@Insert("sql语句")
@Delete("sql语句")
@Update("sql语句")
@Select("sql语句")	

补充说明

实体类属性名和表字段名不一致

建立实体类属性和表字段的对应关系可以解决两者名称不一致导致的无法封装的问题,也是多表查询的前提。可以使用@Results注解实现这种对应

//查找所有
@Select("select * from user")
@Results(value={
        //主键,要加id=true来表示,其他的不用,id默认为false
        @Result(id=true,property = "id",column = "id"),
        @Result(property = "username",column = "username"),
        @Result(property = "birthday",column = "birthday"),
        @Result(property = "sex",column = "sex"),
        @Result(property = "address",column = "address")
})
public List<User> findAll();

如果其他方法也要用这个注解,难道要重写一遍吗?不用,该注解还有一个id值,用来指定唯一标识。

//查找所有
@Select("select * from user")
@Results(id="userMap" value={
        @Result(id=true,property = "id",column = "id"),
        @Result(property = "username",column = "username"),
        @Result(property = "birthday",column = "birthday"),
        @Result(property = "sex",column = "sex"),
        @Result(property = "address",column = "address")
})
public List<User> findAll();

然后在其他方法上用ResultMap注解来引用(可以引用多个),标准格式为:

//根据id查找
@Select("select * from user where id = #{id}")
@ResultMap(value = {"userMap"})
User findById(Integer id);

用注解配置二级缓存

先在主配置文件中配置支持二级缓存,不配置也可以,默认是开启的,然后直接在接口上定义注解

@CacheNamespace(blocking = true)

虽然mybatis支持使用注解的形式来使用,但是在sql语句稍微复杂一些的时候就显得很繁杂。所以在用mybatis框架时推荐使用xml配置的形式,可以节省不少的代码,也显得更加直观,更好维护…… 

相关标签: FRAME