SpringBoot integrates generic Mapper

The role of Mapper: automatically generate SQL statements for adding, deleting, modifying and checking, which greatly reduces the operation of a single table

Project startup class:

@SpringBootApplication
@MapperScan(basePackages = {"yiche.com.mapper"})
/*

@MapperScan仅扫描业务接口包,不能扫描本地通用Mapper接口包,
  否则报java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.TypeVariableImpl
        cannot be cast to java.lang.Class异常
*/

public class MapperApplication {
    public static void main(String[] args){

        SpringApplication.run(MapperApplication.class,args);
    }
}

}

application.properties configuration

  #数据库
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=root
spring.datasource.password=xx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#mybatis&&通用Mapper
#扫描实力类的所在包
mybatis.type-aliases-package=yiche.com.entity
#如果不是纯注解 mapper接口对应的.xml文件
#mybatis.mapper-locations=classpath:mapper/*.xml
#通用mapper的所在接口名称 不只是包名
mapper.mappers=yiche.com.mappers.MyMapper
#数据库
mapper.identity=MYSQL

#分页插件
#pagehelper.helperDialect=mysql
#pagehelper.reasonable=true
#pagehelper.supportMethodsArguments=true
#pagehelper.params=count=countSql




#在格式:logging.level.Mapper类的包=debug  会在控制台打印出sql语句
logging.level.yiche.com.mapper=debug

project directory
write picture description here

mappers is the package where the general mapper is located mapper is the package where its own mapper is located mapper inherits the general mapper

Generic mapper needs to inherit these two interfaces
Generic mapper interface

/*
        Mapper接口:基本的增、删、改、查方法
        MySqlMapper:针对MySQL的额外补充接口,支持批量插入*/
public interface MyMapper<T> extends Mapper<T>,MySqlMapper<T> {

}

own mapper interface

@Mapper
@Component
public interface EmployeeMapper extends MyMapper<Employee>{

     //在使用通用Mapper的基础上 下面的都是mybatis注解的方法
     @Select("select * from employee")
     List<Employee> getAll();
}

Controller:

@Controller
public class EmployeeController {

    @Autowired
    private EmployeeMapper employeeMapper;

    @RequestMapping("/test")
    @ResponseBody
    public String test() {
        System.out.println("ok");
        return "ok";

    }

    /*添加 employee*/
    @RequestMapping("/add")
    @ResponseBody
    public String add() {
        Employee employee = new Employee("jack", 11000.0, 22);
        employeeMapper.insert(employee);
        return "ok";

    }

    /*批量插入 employee*/
    @RequestMapping("/bachAdd")
    @ResponseBody
    public String bachAdd() {

        Employee employee = new Employee("jack", 11000.0, 22);
        List<Employee> list = new ArrayList<>();
        Employee e = new Employee();
    /*插入五条*/
        for (int i = 0; i < 5; i++) {
            e.setName("cici");
            e.setSalary(13000.0);
            e.setAge(i + 20);
            list.add(e);
        }
        employeeMapper.insertList(list);
        return "ok";

    }


    /*更据唯一主键查询*/
    @RequestMapping("/getById")
    @ResponseBody
    public Employee getById() {
        //更据唯一主键 或者唯一编号的查询只返回一个结果
        Employee employee = new Employee();
        employee.setId(1);


        employee = employeeMapper.selectOne(employee);
        return employee;

    }


    /*更据name查询*/
    @RequestMapping("/getByName")
    @ResponseBody
    public List<Employee> selectByName() {
        //普通条件查询可含有多条件   查询name=cc age=100的employee
        Employee employee = new Employee();
        employee.setName("cici");
        employee.setAge(100);
        List<Employee> list = employeeMapper.select(employee);

        return list;

    }


    /*更新 employee*/
    @RequestMapping("/update")
    @ResponseBody
    public String update() {
        //Selective 如果有这个值的话就更新  否则不更新

        Employee employee = new Employee(1, "mm", 1.0, 1);

        //根据主键更新
        int i = employeeMapper.updateByPrimaryKeySelective(employee);
        return i + "";


    }


    /*QBC查询*/
    @RequestMapping("/queryByExample1")
    @ResponseBody
    public List<Employee> queryByExample1(){

        Example example=new Example(Employee.class);
        Example.Criteria criteria=example.createCriteria();
        //名字中含有c的员工  传入实体类的属性值
        criteria.andLike("name","%c%");
        //传入criteria
        return employeeMapper.selectByExample(example);

    }


     /*QBC查询   传入两个criterial*/
     @RequestMapping("/queryByExample2")
     @ResponseBody
    public List<Employee> queryByExample2(){

        Example example=new Example(Employee.class);
        Example.Criteria criteria=example.createCriteria();

        Example.Criteria criteria2=example.createCriteria();
        criteria.andLike("name","%c%");
        //名字中含有c的员工  传入实体类的属性值

         criteria2.andLike("name","%m%");
        //加入第二个criterial
         example.or(criteria2);

        //传入criteria
        return employeeMapper.selectByExample(example);

    }




    /*QBC查询  去重*/
    @RequestMapping("/queryByExample3")
    @ResponseBody
    public List<Employee> queryByExample3(){

        Example example=new Example(Employee.class);
        Example.Criteria criteria=example.createCriteria();
        //id 大于4的员工
        criteria.andGreaterThan("id","4");
        //排序
        example.orderBy("name").asc();
        //去重
        example.setDistinct(true);
        //select name,age from employee
        example.selectProperties("id","name","age");
        //传入criteria
        return employeeMapper.selectByExample(example);

    }


  /*以上是通用Mapper的方法*/
  /*......................................................................*/
  /*下面是mybatis自定义sql语句的方法*/

    @RequestMapping("/getAll")
    @ResponseBody
    public List<Employee> getAll() {
       /*select * from employee*/
        return employeeMapper.getAll();

    }

}

pom.xml

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>1.3.0</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

    <!--mapper-->
    <dependency>
      <groupId>tk.mybatis</groupId>
      <artifactId>mapper-spring-boot-starter</artifactId>
      <version>1.1.0</version>
    </dependency>
    <!--pagehelper-->


    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.25</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325904514&siteId=291194637