springboot+mybatis_plus的使用

项目码云地址:https://gitee.com/XiangWenTian001/mybatis_plus

新建user表

CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `phone` varchar(19) NOT NULL,
  `age` int(3) NOT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8;
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>

整个pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mybatisplus</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

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

        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

 

 

application.yml中配置mybatis_plus

server:
  port: 8080
spring:
  datasource:
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://125.25.3.39:3306/testdb?characterEncoding=utf-8


mybatis-plus:
  mapper-locations: classpath:/mapper/*Mapper.xml
  typeAliasesPackage: com.mybatisplus.demo.entity
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
      id-type: NONE

实体类  @Data是loombook插件,需要导入相应jar包,可自行学习

@Data
public class User {
    private Integer id;
    private String userName;
    private String password;
    private String address;
    private String phone;
    private Integer age;
}

userMapper中

@Mapper
public interface UserMapper extends BaseMapper<User> {
    
}

userMapper继承了BaseMapper,一些通用的增删该查根本不用我们写了,有些类似于jpa。

多表操作时,个人觉得还是和原始方式一样建立xml文件操作方便点,注解方式不是很明晰。

测试:

package com.mybatisplus.demo;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mybatisplus.demo.dao.UserMapper;
import com.mybatisplus.demo.entity.User;
import com.mybatisplus.demo.vo.UserArticleVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * CREATE TABLE `user` (
 * `id` int(10) NOT NULL AUTO_INCREMENT,
 * `user_name` varchar(255) NOT NULL,
 * `password` varchar(255) NOT NULL,
 * `phone` varchar(19) NOT NULL,
 * `age` int(3) NOT NULL,
 * `address` varchar(255) DEFAULT NULL,
 * PRIMARY KEY (`id`)
 * ) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;
 */


@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
    @Autowired
    private UserMapper userDao;


    /****************************************insert***************************************************************************/

    @Test
    public void testAdd() {
        for (int i = 0; i < 50; i++) {
            User user = new User();
            user.setAddress("杭州市下城区小区路33号==" + i);
            user.setAge(i);
            user.setPassword("admin" + i);
            user.setUserName("admin" + i);
            user.setPhone("18900994378=" + i);
            userDao.insert(user);
        }

    }

    /****************************************update***************************************************************************/
    /**
     * 传值为null不会更新
     */
    @Test
    public void testUpdate1() {
        User user = new User();
        user.setId(17);
        user.setAddress(null);
        user.setAge(129);
        user.setPassword("admin11111");
        user.setUserName("admin1111");
        user.setPhone("18900994378");
        //UPDATE user SET user_name=?, password=?, phone=?, age=? WHERE id=?
        userDao.updateById(user);
    }

    /**
     * 传值为空字符串会更新。
     * pojo一定要设置成包装类,否则更新时会把默认值跟新掉,
     * 如字段age设置成int类型,不传值时会将age更新为0,int默认值为0
     */
    @Test
    public void testUpdate2() {
        User user = new User();
        user.setId(17);
        user.setAddress("");
        user.setAge(129);
        user.setPassword("admin11111");
        user.setUserName("admin1111");
        user.setPhone("18900994378");
        //UPDATE user SET user_name=?, password=?, address=?, phone=?, age=? WHERE id=?
        userDao.updateById(user);
    }


    /**
     * 根据条件更新
     */
    @Test
    public void testUpdateWrapper() {
        User user = new User();
        user.setAddress("update999");
        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.eq("user_name", "admin");
        //UPDATE user SET address=? WHERE user_name = ?
        userDao.update(user, wrapper);
    }

    /****************************************delete***************************************************************************/

    @Test
    public void testDelete() {
        userDao.deleteById(2);
    }


    @Test
    public void testBatchDelete() {
        List list = new ArrayList<>();
        list.add(1);
        list.add(3);
        userDao.deleteBatchIds(list);
    }


    @Test
    public void testMapDelete() {
        Map map = new HashMap<>();
        map.put("age", "1");
        map.put("password", "admin1");
        map.put("user_name", "admin1");
        //DELETE FROM user WHERE password = ? AND user_name = ? AND age = ?
        userDao.deleteByMap(map);
    }

    @Test
    public void testWrapperDelete() {
        //DELETE FROM user WHERE id = ?
        userDao.delete(new UpdateWrapper<User>().eq("id", "64"));
    }
/****************************************select***************************************************************************/
    /**
     * 查询全部
     */
    @Test
    public void testGetAll() {
        //SELECT id,user_name,password,address,phone,age FROM user
        List<User> list = userDao.selectList(null);
        list.stream().forEach(user -> System.out.println(user));
    }


    /**
     * 根据id批量查询
     */
    @Test
    public void testSelectBatchIds() {
        List idList = new ArrayList<>();
        idList.add(11);
        idList.add(32);
        //SELECT id,user_name,password,address,phone,age FROM user WHERE id IN ( ? , ? )   Parameters: 11(Integer), 32(Integer)
        List<User> list = userDao.selectBatchIds(idList);
        list.stream().forEach(user -> System.out.println(user));
    }

    /**
     * map构造条件查询
     */
    @Test
    public void testdSele1ctByMap() {
        Map map = new HashMap<>();
        map.put("id", "44");
        map.put("password", "admin29");
        SELECT id,user_name,password,address,phone,age FROM user WHERE password = ? AND id = ?
        List<User> list = userDao.selectByMap(map);
        list.stream().forEach(user -> System.out.println(user));
    }


    /**
     * 实体类构造条件查询
     */
    @Test
    public void testdSelectList1() {
        User user = new User();
        user.setId(44);
        user.setPhone("18900994378=29");
        //SELECT id,user_name,password,address,phone,age FROM user WHERE id=? AND phone=?
        List<User> list = userDao.selectList(new QueryWrapper<>(user));
        list.stream().forEach(u -> System.out.println(u));
    }

    /**
     * QueryWrapper构造条件查询
     */
    @Test
    public void testSeleectList2() {
        List<User> userList = userDao.selectList(
                new QueryWrapper<User>().gt("age", "22")
        );
        //SELECT id,user_name,password,address,phone,age FROM user WHERE age > ?
        userList.stream().forEach(u -> System.out.println(u));
    }


    /**
     * 分页查询,逻辑分页,如果要物理分页需要注入PaginationInterceptor
     */
    @Test
    public void testdSeleectList3() {
        List<User> userList = userDao.selectPage(
                new Page<User>(1L, 8L),
                null
        ).getRecords();
        userList.stream().forEach(u -> System.out.println(u));
    }


    /**
     * 部分字段查询
     */
    @Test
    public void testSelectList() {
        //SELECT id,user_name,password FROM user
        List<User> userList = userDao.selectList(new QueryWrapper<User>().select("id,user_name,password"));
        userList.stream().forEach(user -> System.out.println(user));
    }

    /****************************************多表操作***************************************************************************/
    @Test
    public void testManyTable() {
        Page<UserArticleVo> page = new Page<>(1,7);
        //SELECT u .id AS userId, u .user_name, u .address, u .phone, u .age, a.content, a.title FROM `user` u, article a WHERE u.id = a.user_id LIMIT ?,?
        List<UserArticleVo> list=userDao.getUserArticle(page);
        list.stream().forEach(userArticleVo -> System.out.println(userArticleVo));
    }


}

项目码云地址:https://gitee.com/XiangWenTian001/mybatis_plus

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值