MyBatis——Annotation注解

Annotation注解
    Select。映射查询的SQL语句。
    SelectProvider。Select语句的动态SQL映射。允许指定一个类名和一个方法在执行时返回运行的查询语句。有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、jdbcType、type、Handler、one、many。id属性是一个布尔值表示是否被用于注解映射。one属性是单独的联系,和XMl配置中<association>相似,而many属性是对集合而言,和XML配置的<collection>相似。
    Results。多个结果映射列表。
    Options。提供配置选项的附加值,通常在映射语句上作为附加功能配置出现。
    One。复杂类型的单独属性值映射。必须指定select属性,表示已映射的SQL语句的完全限定名。
    Many。复杂类型的集合属性映射。必须指定select属性,表示已映射的SQL语句的完全限定名。
    Param。应用于映射器方法参数来给每个参数取一个名字。例如使用@Param("id"),SQL中参数应该被命名为#{id}。

示例:配置文件和FKSqlSessionFactory类不再说明

/MyBatisAnnotation/src/com/web/mybatis/mapper/UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.web.mybatis.mapper.UserMapper">
    <!-- 开启当前mapper的namespace下的二级缓存 -->
    <!-- 创建一个LRU缓存,每隔60秒刷新,最大存储512个对象,返回对象只读 -->
    <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true" />
</mapper>

/MyBatisAnnotation/src/com/web/mybatis/mapper/UserMapper.java

使用Annotation注解的方式替换在mapper文件中写sql的方式。

package com.web.mybatis.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.web.mybatis.domain.User;

public interface UserMapper {
    @Insert("INSERT INTO tb_user(id,name,sex,age) VALUES(#{id},#{name},#{sex},#{age})")
//    @Options(useGeneratedKeys=true,keyProperty="id")  //useGeneratedKeys为true表示使用主键自动增长,并把值给id
    int saveUser(User user);
    
    @Delete("DELETE FROM tb_user WHERE id=#{id}")
    int removeUser(Integer id);
    
    @Update("UPDATE tb_user SET name=#{name},sex=#{sex},age=#{age} WHERE id=#{id}")
    void modifyUser(User user);
    
    @Select("SELECT * FROM tb_user WHERE id=#{id}")
    @Results({//若属性和列名称相同可以省略
        @Result(id=true,column="id",property="id"),
        @Result(column="name",property="name"),
        @Result(column="sex",property="sex"),
        @Result(column="age",property="age")
    })
    User selectUserById(Integer id);
    
    @Select("SELECT * FROM tb_user")
    List<User> selectAllUser();
}

/MyBatisAnnotation/src/com/web/mybatis/test/Test.java

package com.web.mybatis.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.web.mybatis.domain.User;
import com.web.mybatis.factory.FKSqlSessionFactory;
import com.web.mybatis.mapper.UserMapper;

public class Test {
    //测试Annotation注解插入数据
    public static void insertTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        User user = new User();
        user.setId(4);
        user.setName("wang");
        user.setSex("女");
        user.setAge(22);
        um.saveUser(user);
        session.commit();
        session.close();
    }
    //测试Annotation注解查询
    public static void selectTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        User user = um.selectUserById(1);
        System.out.println(user.toString());
        session.commit();
        session.close();
    }
    //测试Annotation注解修改数据
    public static void updateTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        User user = um.selectUserById(4);
        user.setName("update");
        user.setSex("男");
        user.setAge(19);
        um.modifyUser(user);
        session.commit();
        session.close();
    }
    //测试Annotation注解删除数据
    public static void deleteTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        um.removeUser(4);
        session.commit();
        session.close();
    }
    //测试Annotation注解查询所有数据
    public static void selectAllTest() {
        SqlSession session = FKSqlSessionFactory.getSqlSession();
        UserMapper um = session.getMapper(UserMapper.class);
        List<User> list = um.selectAllUser();
        list.forEach(user->System.out.println(user));
        session.commit();
        session.close();
    }
    public static void main(String[] args) {
//        insertTest();
//        selectTest();
//        updateTest();
//        deleteTest();
        selectAllTest();
    }
}

 

posted @ 2019-04-11 15:34  !O0O!  阅读(1699)  评论(0)    收藏  举报