首页 > 其他分享 >mybatis plus 项目模板

mybatis plus 项目模板

时间:2022-10-01 13:03:32浏览次数:70  
标签:String class id plus user mybatis import public 模板

前言

项目搭建

  • 新建1个spring boot项目,导入所需依赖

点击查看详情

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
  • 编写yml

点击查看详情

# 端口号
server:
port: 8080

spring:
application:
name: mybatisdemo
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.0.102:3306/mybatisdemo?characterEncoding=utf-8&serverTimezone=UTC
username: root
password: 123456
mvc:
view:
suffix: ".html"

# 开启驼峰命名自动映射
mybatis:
configuration:
map-underscore-to-camel-case: true
mapperLocations: classpath:mapper/*.xml # 映射xml文件

logging:
level:
com:
chnq:
mybatisdomo: debug
  • 启动类添加注解​​@MapperScan​

点击查看详情


import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.chnq.mybatisdemo.mapper")
public class MybatisDemoApplication {

public static void main(String[] args) {
SpringApplication.run(MybatisDemoApplication.class, args);
}

}
  • 创建数据库
  • mybatis plus 项目模板_spring


  • mybatis plus 项目模板_maven_02

  • 编写配置类​​MybatisPlusConfig​

点击查看详情


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
@MapperScan("com.chnq.mybatisdemo.mapper")
public class MybatisPlusConfig {

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}

}
  • 编写实体类User

点击查看详情


import com.baomidou.mybatisplus.annotation.IdType;
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 lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@TableName("t_user")
public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private Date birthday;

}
  • 编写实体类Book

点击查看详情


import com.baomidou.mybatisplus.annotation.IdType;
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 lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@TableName("t_book")
public class Book implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String bookname;
private BigDecimal price; // 保留小数点后两位
private String author;

}

mybatis plus 环境搭建

  • mapper

点击查看详情


@Mapper
public interface UserMapper extends BaseMapper<User> {

}
  • service

点击查看详情


public interface UserService extends IService<User> {

}

// 实现类
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

@Resource
private UserMapper userMapper;

}
  • 控制器

点击查看详情


@Controller
public class UserController {
@Resource
UserService userService;

@Resource
UserMapper userMapper;

// 调用service层接口查询所有
@GetMapping("/getUsers")
@ResponseBody
public String getUserList(){
List<User> user = userService.list();
System.out.println(user);
return RespResult.success("获取成功!", user);
}

// 调用mapper层接口查询所有
@GetMapping("/getUsers2")
@ResponseBody
public String getUserTest(){
List<User> users = userMapper.selectList(null);
users.forEach(user-> System.out.println("user = " + user));
return RespResult.success("获取成功!", users);
}

// 调用mapper层接口查询单个
@GetMapping("/getUser")
@ResponseBody
public String testFindOne(@PathParam("id") int id){
User user = userMapper.selectById(id);
return RespResult.success("获取成功!", user);
}

// 调用mapper层接口添加数据
@GetMapping("/save")
@ResponseBody
public String testSave(){
User user = new User();
user.setUsername("小兰");
user.setPassword("123456");
userMapper.insert(user);
return RespResult.success("添加成功!", user);
}

}
  • 测试一下

点击查看详情

mybatis plus 项目模板_spring_03


mybatis plus 项目模板_maven_04


mybatis plus 项目模板_MyBatis Plus_05


mybatis plus 项目模板_maven_06

  • 在控制器中注入了service对象和mapper对象,就可以直接调用mybatis plus为我们提供的方法,​​ctrl + f12​​可查看方法
  • mybatis plus 项目模板_java_07


  • mybatis plus 项目模板_java_08

  • 更过crud方法参考​​mybatis puls官网​
  • ​使用注解自定义sql​​​ ​​参考​

点击查看详情


// mapper层
@Mapper
public interface UserMapper extends BaseMapper<User> {

// 使用注解自定义sql
@Select("select * from t_user")
List<User> getAll();

}

// 控制层
@Controller
public class UserController {

@Resource
UserMapper userMapper;

// 使用注解自定义sql
@GetMapping("/getAll")
@ResponseBody
public String getAll(){
List<User> users = userMapper.getAll();
System.out.println(users);
return RespResult.success("添加成功!", users);
}

}

mybatis plus 项目模板_java_09

点击查看详情


// mapper
@Mapper
public interface BookMapper extends BaseMapper<Book> {

List<Book> getAll();

}

// xml,在resource路径下新建mapper文件夹,在该文件夹下编写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.chnq.mybatisdemo.mapper.BookMapper">

<select id="getAll" resultType="com.chnq.mybatisdemo.model.Book">
select id, bookname, price, author from t_book
</select>

</mapper>

// service
public interface BookService extends IService<Book> {

List<Book> getAll();

}

// 实现类
@Service
@Transactional
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {

@Resource
private BookMapper bookMapper;

@Override
public List<Book> getAll() {
return bookMapper.getAll();
}

}

// controller
@RestController
@RequestMapping(value = {"/book"})
public class BookController {
@Resource
BookService bookService;

@RequestMapping(value = {"/getBooks"})
@ResponseBody
public String decrease() {
List<Book> books = new LinkedList<>();
books = bookService.getAll();
System.out.println(books);
return RespResult.success(books);
}

}

mybatis plus 项目模板_spring_10

  • ​使用匿名内部类风格构造器自定义sql​​​​参考​

点击查看详情


// mapper层
@Mapper
public interface UserMapper extends BaseMapper<User> {

@UpdateProvider(type = UserProvider.class, method = "updateUser")
int updateUser(@Param("user") User user, @Param("id") int id);

class UserProvider {
public String updateUser(@Param("user") User user, @Param("id") int id) {
SQL sql = new SQL();
sql.UPDATE("t_user");
if(user.getUsername() != null) {
sql.SET("username=#{user.username}");
}
if(user.getPassword() != null) {
sql.SET("password = #{user.password}");
}
if(user.getBirthday() != null) {
sql.SET("birthday = #{user.birthday}");
}
sql.WHERE("id = #{id}");
return sql.toString();
}
}

}

// controller层
@Controller
public class UserController {

@Resource
UserMapper userMapper;

@GetMapping("/testUpdate")
@ResponseBody
public String testUpdate(@PathParam("id") int id){
User user = new User();
user.setUsername("cyq");
user.setPassword("123456");
userMapper.updateUser(user, id);
return RespResult.success("添加成功!", user);
}

}

mybatis plus 项目模板_MyBatis Plus_11

  • ​使用Fluent风格自定义sql​​​​参考​

点击查看详情


// mapper层
@Mapper
public interface UserMapper extends BaseMapper<User> {

@SelectProvider(type = addUserProvider.class, method = "addUser")
Integer addUser(@Param("username") String username, @Param("password") String password, @Param("birthday") Date birthday);

class addUserProvider {
public String addUser(@Param("username") String username, @Param("password") String password, @Param("birthday") Date birthday) {
String sql = new SQL()
.INSERT_INTO("t_user")
.VALUES("username, password", "#{username}, #{password}")
.VALUES("birthday", "#{birthday}")
.toString();
return sql;
}
}

}

// controller层
@Controller
public class UserController {

@Resource
UserMapper userMapper;

@GetMapping("/testAdd")
@ResponseBody
public String testAdd(){
Date bir = new Date();
userMapper.addUser("chenx", "123456", bir);
return RespResult.success("添加成功!");
}

}

mybatis plus 项目模板_maven_12

报错

  • 错误描述:拉取依赖时报错​​Cannot find file​
  • 错误原因:maven3.8.2的问题,切换为idea自带maven或安装maven3.6.1及其以下版本
  • ​参考​
  • 错误2:在控制层中调用mapper层的insert方法插入数据时报错:​​java.lang.IllegalArgumentException: argument type mismatch​
  • 错误原因:实体类中属性的类型与数据库中字段类型不一致、实体类没有构造方法、MybatisPlus主键生成策略不匹配
  • ​参考​
  • 应该将实体类修改为如下
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Accessors(chain = true)
@TableName("t_user")
public class User implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String username;
private String password;
private Date birthday;

}
  • 使用Fluent风格自定义sql时报错:​​attempted to return null from a method with a primitive return type (int)​
  • 解决方案:将mapper层的返回类型int改为Integer
  • ​参考​



标签:String,class,id,plus,user,mybatis,import,public,模板
From: https://blog.51cto.com/chniny/5728244

相关文章

  • MyBatisPlus查询对象转QueryWrapper工具类
    技术背景在使用MyBatisPlus技术实际项目中,尤其是后台管理系统之类的项目中,经常会出现大量的需要将查询对象转换成QueryWrapper的应用场景,这时候就需要编写出现大量的转换代......
  • mybatis核心配置文件
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-conf......
  • MyBatis接口代理对象的2种方式
    方式1使用MyBatis自带的API生成代理对象 SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession缺点:接口代理对象需要手动 getMapper() <dependen......
  • element-plus使用h和render函数,实现Service弹出Dialog
    在element-plus中,Messagebox和Message都实现了全局方法。但是Dialog就没有实现。本着自己动手丰衣足食的原则。自己动手写一个。定义一个ModalService.ts文件import{h......
  • 源码学习之MyBatis的底层查询原理
    导读本文通过MyBatis一个低版本的bug(3.4.5之前的版本)入手,分析MyBatis的一次完整的查询流程,从配置文件的解析到一个查询的完整执行过程详细解读MyBatis的一次查询流程,通过本......
  • 模板变量替换(正则表达式)
    publicclassTemplateReplaceTest{publicstaticvoidmain(String[]args){Stringsql="INSERTINTO${tableName}"+"(${COLUMNS})......
  • 代码模板存档
    代码模板存档)2022.9.30增加并查集、埃氏筛、线性筛、快速幂、扩展欧几里得、求逆元一般C++比赛文件模板#include<bits/stdc++.h>usingi64=longlong;intm......
  • mybatis 使用if 判断字符串
    mybatis动态sql中if判断使用的ognl表达式,现在分3中情况说明并验证。一、情况说明:传入的itemCode为参数传入mybatis<iftest='itemCode!=nullanditemCode!=""and......
  • 4 MyBatis注解
    八、使用注解开发1.面向接口编程根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好。关于接口的理解......
  • MyBatis-Plus【通用Mapper篇】
    MP-通用Mapper​​一、通用Mapper​​​​二、使用方式​​​​1、源码分析​​​​:one:Insert插入方法​​​​:two:Delete删除方法​​​​:three:Update修改方法​......