本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
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);
}
}
}
启动发现报错了
报错原因是不能加载(读取)到配置文件
解决方式有两个 建议使用第二个,我们按照第二种来操作
第一:把数据库的配置参数都写死
第二:把配置文件复制到单元测试目录下一份