Skip to content

15. Spring Boot整合Mybatis-注解形式

参照07-spring创建项目

img

img

15.1. 添加依赖跟章节16相同

15.2. 创建Mapper接口

使用注解替换Mapper.xml中的代码

注解的用法:

  • @Select 用于查询的,配合@Results解析映射结果中实体属性和字段
  • @Results用于映射字段和实体属性之间的关系
    • id:定义resultMap
    • value,映射的字段集合
    • @Result
      • id
      • column
      • property
      • javaType
      • JdbcType
  • @One() //association
  • @Many //collection
  • @ResultMap(value="resultMap") 引用已经写好的Results
  • @Update
  • @Insert
  • @Delete
  • @Param:用于声明在接口方法的 形参上,相当于在OGNL上下文中定义了一个参数的名字
java
package com.neuedu.boot.mapper;


import com.neuedu.boot.entity.Menu;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface MenuMapper {


    @Select(value = "select * from menu ")
    List<Map> list();

    @Select(value = "select * from menu ")
    @Results(
            value = {
                    @Result(column = "menu_id", property = "menuId", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
                    @Result(column = "url", property = "url", javaType = String.class, jdbcType = JdbcType.VARCHAR),
                    @Result(column = "active", property = "active", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
                    @Result(column = "parent_id", property = "parentId", javaType = Integer.class, jdbcType = JdbcType.INTEGER),
                    @Result(column = "menu_type", property = "menuType", javaType = String.class, jdbcType = JdbcType.VARCHAR),
                    @Result(column = "createtime", property = "createtime", javaType = Date.class, jdbcType = JdbcType.TIMESTAMP),
            }
    )
    List<Menu> listEntity();


    @Insert(
            value = "insert into menu(menu_name, url, parent_id,  menu_type) values(#{menuName} ,#{url} ,#{parentId},#{menuType})"
    )
    int save(Menu menu);

    

    @Insert(
            value = "insert into menu(menu_name, url, parent_id,  menu_type) values(#{menu.menuName} ,#{menu.url} ,#{menu.parentId},#{menu.menuType})"
    )
    int save2(@Param("menu") Menu menu);
}

在运行类上声明MapperScan注解

@MapperScan("com.neuedu.mapper")

15.3. 单元测试类

java
package com.neuedu.boot.mapper;

import com.neuedu.boot.Application10;
import com.neuedu.boot.entity.Menu;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;


import java.util.Iterator;
import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;

@SpringBootTest(classes = Application10.class)
class MenuMapperTest {

    @Autowired
    MenuMapper menuMapper;


    @Test
    void list() {

        List list = menuMapper.list();
        Iterator<Map> it = list.iterator();
        while (it.hasNext()) {
            Map obj = it.next();
            System.out.println(obj);
        }
    }

    @Test
    void listEntity() {

        List<Menu> list = menuMapper.listEntity();
        for (Menu menu : list) {
            System.out.println(menu);
        }
    }

    @Test
    void save() {

        Menu menu = new Menu();
        menu.setMenuName("测试菜单");
        menu.setUrl("/grant/role");
        menu.setParentId(20);
        menu.setMenuType("1");

        int count = menuMapper.save(menu);
        System.out.println("count:"+count);
    }
}

Released under the MIT License.