Spingt+Mybatis+MybatisPlus实现查询User

232 阅读3分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

Mybatis+MybatisPlus实现查询User

第一步,将UserMapper继承BaseMapper,将拥有了BaseMapper中的所有方法:

package com.wyh.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wyh.entity.User;

import java.util.List;

/**
*  @description:用户接口
 *  @author:  魏一鹤
*  @createDate:  2022-08-23 22:57
**/
public interface UserMapper extends BaseMapper<User> {
    List<User> findAll();
} 

进入BaseMapper 可以看到很多基本的API 这些API可以帮助我们完成基本的CRUD了

第二步,使用MP中的MybatisSqlSessionFactoryBuilder进程构建:

package com.wyh.test;

import com.baomidou.mybatisplus.core.MybatisSqlSessionFactoryBuilder;
import com.wyh.entity.User;
import com.wyh.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
*  @description:  MybatisPlus查询测试
*  @author:  魏一鹤
*  @createDate:  2022-08-23 23:00
**/

public class TestMybatisPlus {
    @Test
    public void testFindAll() throws Exception{
        String resource = "mybatis-config.xml" ;
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new MybatisSqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userMapper.selectList(null);
        for (User user : userList) {
            System.out.println(user );
        }

    }
}

运行发现报错了 报错信息是说不存在mp.user这个表

D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Tools\Java\IDEA\IDEA2022\IDEA\IntelliJ IDEA 2022.1.2\lib\idea_rt.jar=59124:D:\Tools\Java\IDEA\IDEA2022\IDEA\IntelliJ IDEA 2022.1.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\Tools\Java\IDEA\IDEA2022\IDEA\IntelliJ IDEA 2022.1.2\lib\idea_rt.jar;D:\Tools\Java\IDEA\IDEA2022\IDEA\IntelliJ IDEA 2022.1.2\plugins\junit\lib\junit5-rt.jar;D:\Tools\Java\IDEA\IDEA2022\IDEA\IntelliJ IDEA 2022.1.2\plugins\junit\lib\junit-rt.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\charsets.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\deploy.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\access-bridge-64.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\cldrdata.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\dnsns.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\jaccess.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\jfxrt.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\localedata.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\nashorn.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\sunec.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\sunjce_provider.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\sunmscapi.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\sunpkcs11.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\ext\zipfs.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\javaws.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\jce.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\jfr.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\jfxswt.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\jsse.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\management-agent.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\plugin.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\resources.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\jre\lib\rt.jar;D:\Tools\JavaWorkSpace\MybatisPlus01\MybatisPlusSimple\target\test-classes;D:\Tools\JavaWorkSpace\MybatisPlus01\MybatisPlusSimple\target\classes;D:\Tools\Java\MavenRepository\com\baomidou\mybatis-plus\3.1.1\mybatis-plus-3.1.1.jar;D:\Tools\Java\MavenRepository\com\baomidou\mybatis-plus-extension\3.1.1\mybatis-plus-extension-3.1.1.jar;D:\Tools\Java\MavenRepository\com\baomidou\mybatis-plus-core\3.1.1\mybatis-plus-core-3.1.1.jar;D:\Tools\Java\MavenRepository\com\baomidou\mybatis-plus-annotation\3.1.1\mybatis-plus-annotation-3.1.1.jar;D:\Tools\Java\MavenRepository\com\github\jsqlparser\jsqlparser\1.2\jsqlparser-1.2.jar;D:\Tools\Java\MavenRepository\org\mybatis\mybatis\3.5.1\mybatis-3.5.1.jar;D:\Tools\Java\MavenRepository\org\mybatis\mybatis-spring\2.0.1\mybatis-spring-2.0.1.jar;D:\Tools\Java\MavenRepository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar;D:\Tools\Java\MavenRepository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;D:\Tools\Java\MavenRepository\com\alibaba\druid\1.0.11\druid-1.0.11.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\lib\jconsole.jar;D:\Tools\Java\JDK\JDK1.8\jdk1.8.0_281\lib\tools.jar;D:\Tools\Java\MavenRepository\org\projectlombok\lombok\1.18.24\lombok-1.18.24.jar;D:\Tools\Java\MavenRepository\junit\junit\4.12\junit-4.12.jar;D:\Tools\Java\MavenRepository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\Tools\Java\MavenRepository\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;D:\Tools\Java\MavenRepository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.wyh.test.TestMybatisPlus,testFindAll
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Table 'mp.user' doesn't exist
### The error may exist in com/wyh/mapper/UserMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: SELECT  id,user_name,password,name,age,email  FROM user
### Cause: java.sql.SQLSyntaxErrorException: Table 'mp.user' doesn't exist

      

为什么会报这个错呢? 因为我们并没有指名User对应的是哪个表,所以需要去实体类指名它是属于哪个表的实体

@TableName( "tb_user" )  //指定数据库的表名

使用@TableName("表名")注解 再次运行已经解决错误

Spring+Mybatis+MP

引入了Spring框架,数据源、构建等工作就交给了Spring管理。

创建子模块

子模块依然是一个maven项目

引入依赖

 < ? 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 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>MybatisPlusSpring</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>MybatisPlusSpring</name>

    <properties>
        <spring.version>5.1.6.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
        </plugins>
    </build>
</project>

实现查询User

第一步,编写jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql: // 127.0.0.1 : 3306 / mp?useUnicode = true & characterEncoding = utf8 & autoReconnect = true & allowMultiQueries = true & useSSL = false
jdbc.username=root
jdbc.password=root

第二步,编写applicationContext.xml

 < ? xml version =  "1.0" encoding =  "UTF-8"  ? >  < beans xmlns =  "http://www.springframework.org/schema/beans"   xmlns:xsi =  "http://www.w3.org/2001/XMLSchema-instance"   xmlns:context =  "http://www.springframework.org/schema/context"   xsi:schemaLocation =  "http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context.xsd"  >    < context:property - placeholder location =  "classpath:*.properties"  />    <! -- 定义数据源 -->   < bean id =  "dataSource" class =  "com.alibaba.druid.pool.DruidDataSource"   destroy - method =  "close"  >   < property name =  "url"  value =  "${jdbc.url}"  />   < property name =  "username"  value =  "${jdbc.username}"  />   < property name =  "password"  value =  "${jdbc.password}"  />   < property name =  "driverClassName"  value =  "${jdbc.driver}"  />   < property name =  "maxActive"  value =  "10"  />   < property name =  "minIdle"  value =  "5"  />   </ bean >    <! --这里使用MP提供的sqlSessionFactory,完成了Spring与MP的整合-->   < bean id =  "sqlSessionFactory" class =  "com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean"  >   < property name =  "dataSource"  ref =  "dataSource"  />   < property name =  "configLocation"  value =  "classpath:mybatis-config.xml"  />   < property name =  "globalConfig"  >   < bean class =  "com.baomidou.mybatisplus.core.config.GlobalConfig"  >   < property name =  "dbConfig"  >   < bean class =  "com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig"  >   < property name =  "idType"  value =  "AUTO"  />   </ bean >   </ property >   </ bean >   </ property >   </ bean >    <! --扫描mapper接口,使用的依然是Mybatis原生的扫描器-->   < bean class =  "org.mybatis.spring.mapper.MapperScannerConfigurer"  >   < property name =  "basePackage"  value =  "com.wyh.mapper"  />   </ bean >   </ beans > 

第三步,编写User对象以及UserMapper接口:

package com.wyh.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName( "tb_user" )
public class User {

    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private String email;
}
package com.wyh.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wyh.entity.User;

public  interface UserMapper extends BaseMapper<User> {

}

第四步,编写测试用例:

package com.wyh.test;

import com.wyh.entity.User;
import com.wyh.mapper.UserMapper;
import org.apache.ibatis.annotations.Mapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import java.util.List;

/**
*  @description:  测试mp整合spring
*  @author:  魏一鹤
*  @createDate:  2022-08-25 21:33
**/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml" )
public class TestMybatisPlusSpring {
    @Resource
    private UserMapper userMapper;
    @Test
    public void queryUser(){
        List<User> userList = userMapper.selectList(null);
        for (User user : userList) {
            System.out.println(user);
        }
    }
}

启动发现报错了

报错原因是不能加载(读取)到配置文件

解决方式有两个 建议使用第二个,我们按照第二种来操作

第一:把数据库的配置参数都写死

第二:把配置文件复制到单元测试目录下一份