Spring整合MyBatisPlus
创建maven项目,引入依赖
<dependencies>
<!-- mp依赖 mybatisPlus 会自动的维护Mybatis 以及MyBatis-spring相关的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!-- Lombok工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- Spring-test测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.3</version>
<scope>test</scope>
</dependency>
<!-- slf4j日志包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- druid阿里的数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
数据表结构
对应数据表,创建实体类
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName(value="user")//建立User.class和数据的user表的关系
public class User implements Serializable {
private static final long serialVersionUID = 1L;
//字段名和表中的名字一样时可以不加以下注解,不同时需要加上该注解
@TableId(value="user_id") //代表它是主键
private Integer user_id;
@TableField(value="name")
private String name;
@TableField(value="borthday")
private Date borthday;
/**
* 不映射数据库表中任何字段
*/
@TableField(exist = false)
private String address;
}
创建UserMapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.bean.User;
public interface UserMapper extends BaseMapper<User> {
}
创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mapper.UserMapper" >
</mapper>
创建log4j配置文件
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
创建jdbc-config.properties配置文件
jdbc.username: root
jdbc.password: root
jdbc.url: jdbc:mysql://localhost:3306/mybatis_test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
jdbc.driver: com.mysql.cj.jdbc.Driver
创建application-dao.xml配置文件,其中主要是dao部分的配置
<?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:jdbc-config.properties" system-properties-mode="FALLBACK" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="globalConfig" ref="globalConfig"></property>
<!-- 加载xxMapper.xml -->
<property name="mapperLocations">
<array>
<value>classpath:mapper/*Mapper.xml</value>
</array>
</property>
<!-- 配置分页插件 -->
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></bean>
</array>
</property>
</bean>
<!-- 声明全局配置 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<!-- 指定主键自动增长类型 -->
<property name="dbConfig" ref="dbConfig"></property>
</bean>
<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
<property name="idType" value="AUTO"></property>
</bean>
<!-- 将MapperScannerConfigurer类注入到IOC容器,给参数赋值-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 需要生成代理类对象的mapper接口包 -->
<property name="basePackage" value="com.example.mapper"></property>
<!-- sqlSessionFactory 的name 用于为代理类中生成SqlSession -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
</beans>
创建spring全局配置文件,引入各部分配置文件
<?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">
<!-- 引入dao层的配置 -->
<import resource="classpath:application-dao.xml"/>
</beans>
编写测试代码
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.bean.User;
import com.example.mapper.UserMapper;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.Serializable;
import java.util.*;
import static jdk.nashorn.internal.objects.Global.print;
public class StringApplication {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserMapper userMapper = context.getBean(UserMapper.class);
// updateUser(userMapper);
// deleteUser(userMapper);
}
// 修改数据
private static void updateUser(UserMapper userMapper){
//根据主键修改
userMapper.updateById(new User(112,"小荥荥",new Date(),"北京"));
UpdateWrapper<User> updateWrapper=new UpdateWrapper<>();
updateWrapper.eq("name","小荥荥");
updateWrapper.between("user_id",1,5);
userMapper.update(new User(112,"小荥",new Date(),"武汉"),updateWrapper);
}
// 删除数据
private static void deleteUser(UserMapper userMapper){
//根据主键删除
userMapper.deleteById(1);
//批量删除。先放到一个集合里面,然后删除
Collection<Serializable> idList=new ArrayList<Serializable>();
idList.add(22);
idList.add(112);
userMapper.deleteBatchIds(idList);
//根据map集合进行删除
Map<String,Object> columnMap=new HashMap<String,Object>();
columnMap.put("user_id",6);
columnMap.put("name","小明");
userMapper.deleteByMap(columnMap);
//根据wrapper进行删除
QueryWrapper<User> wrapper=new QueryWrapper<>();
userMapper.delete(wrapper);
}
// 将需要的数据放到一个List集合里面进行查询
private static void query2(UserMapper userMapper){
//先放到一个集合里面,最后进行查询
Collection<Serializable> idList=new ArrayList<Serializable>();
idList.add(2);
idList.add(3);
idList.add(4);
List<User> list=userMapper.selectBatchIds(idList);
print(list);
}
// 将需要的数据放到一个Map集合里面进行查询
private static void query3(UserMapper userMapper){
Map<String,Object> columnMap=new HashMap<>();
columnMap.put("name","小荥");
columnMap.put("address","南阳");
List<User> list=userMapper.selectByMap(columnMap);
print(list);
}
// 根据Id进行查询
private static void query1(UserMapper userMapper){
User user=userMapper.selectById(3);
System.out.println(user);
}
// 根据姓名进行查询
private static void query4(UserMapper userMapper,String name){
Integer count=userMapper.selectCount(null);
QueryWrapper<User> queryWrapper=new QueryWrapper<>();
queryWrapper.like(name!=null,"name",name);
Integer selectCount=userMapper.selectCount(queryWrapper);
System.out.println(selectCount);
}
// 分页插件
private static void query5(UserMapper userMapper){
IPage<User> page=new Page<User>(1,2);
userMapper.selectPage(page,null);
long total=page.getTotal();
System.out.println("总条数:"+total);
List<User> list=page.getRecords();
print(list);
}
}
小李子整体结构如下