MyBatis常用注解

“雪消门外千山绿,花发江边二月晴”

介绍

在前面介绍过MyBatis基于映射关系(也就是XML文件配置)来实现操作数据库MyBatis关联映射关系
现在,我们来看下基于注解,MyBatis如何实现数据库的CRUD(增删改查)操作。

MyBatis常用Annotation注解

注解 功能
Select 映射查询的SQL语句
SelectProvider Select语句的动态SOL映射。允许指定一个类名和一个方法在执行时返回运行的查询语句。有两个属性:type和 method,type属性是类的完全限定名,method是该类中的那个方法名。
Insert 映射插入的SQL语句
InsertProvider Insert语句的动态SQL映射。允许指定一个类名和一个方法在执行时返回运行的查询语句。有两个属性:type和 method,type属性是类的完全限定名,method是该类中的那个方法名。
Update 映射更新的SQL语句
UpdateProvider Update语句的动态SQL。允许指定一个类名和一个方法在执行时返回运行的查询语句。有两个属性:type和 method,type属性是类的完全限定名,method是该类中的那个方法名。
Delete 映射删除的SQL语句
DeleteProvider Delete句的动态SQL映射。允许指定一个类名和一个方法在执行时返回运行的查询语句。有两个属性:type和 method,type属性是类的完全限定名,method是该类中的那个方法名。
Result 在列和属性之间的单独结果映射。属性包括:id、 column、 property、 javaType、jdbeType、 typeHandler、one、many。id属性是一个布尔值,表示是否被用于主键映射。one属性是单独的联系,和XML配置中的
Options 提供配置选项的附加值,它们通常在映射句上作为附加功能配置出现。
one 复杂类型的单独属性值映射。必指定 select属性,表示已映射的SQL语句的完全限定名。
Many 复杂类型的集合属性映射。必指定 select属性,表示已映射的SQL语句的完全限定名。
Param 当映射器方法需要多个参数时,这个注解可以被应用于映射器方法参数来给每个参数取一个名字。否则,多参数将会以它们的顺序位置和SQL语句中的表达式进行映射,这是默认的。

示例

基于注解的CRUD操作:
mapper.java文件(因为这里是基于注解实现的,所以没有xml文件)

import org.apache.ibatis.annotations.*;
import org.arunner.domain.User;

import java.util.List;

/**
 * @author arunner
 * @date 2018/11/10
 */
public interface UserMapper {
	//新增
    @Insert("insert into tb_user (name,sex,age) values (#{name},#{sex},#{age})")
    @Options(useGeneratedKeys = true,keyProperty = "id")
//    useGeneratedKeys = true表示使用数据库自动增长的主键,需要底层数据库的支持。keyProperty = "id"表示将插入数据生成的主键设置到user对象的id当中
    int saveUser(User user);
	
	//删除
    @Delete("delete from tb_user where id = #{id}")
    int removeUser(@Param("id") Integer id);

	//更新
    @Update("update tb_user set name=#{name},age=#{age},sex=#{sex} where id = #{id}")
    void modifyUser(User user);

	//根据ID查询
    @Select("select * from tb_user where id= #{id}")
    @Results({
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "name",property = "name"),
            @Result(column = "age",property = "age"),
            @Result(column = "sex",property = "sex"),
    })
//    @Result注解用于列和属性之间的结果映射,如果列和属性名称相同,则可以省略该注解,MyBatis会自动进行映射
    User selectUserById(Integer id);
	
	//查询所有
    @Select("select * from tb_user")
    List selectAllUser();
}

测试插入操作:

public class InsertTest {
    public static void main(String[] args) {
        //获取sqlSession对象
        SqlSession sqlSession = FKSqlSessionFactory.getSqlSession();
        //获得mapper的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //创建user对象,并设置属性
        User user = new User();
        user.setAge(16);
        user.setName("arunner");
        user.setSex("男");
        //插入数据
        mapper.saveUser(user);
        //查看插入数据生成的主键
        System.out.println(user.getId());
        //提交事务
        sqlSession.commit();
        //关闭sqlSession对象
        sqlSession.close();
    }
}

MyBatis常用注解_第1张图片
其他操作请自行测试。

你可能感兴趣的:(MyBatis)