目录
mybatis的问题(为什么要用通用mapper和mybatisplus)
通用mapper
导入依赖
配置实体类
编写Dao
开启包扫描
编写配置文件
编写service并验证
自定义条件查询
mybatisplus
导入依赖
配置数据库信息
编写实体类
编写Dao
进行测试
自定义查询/使用
在之前使用mybatis的时候,有一个比较麻烦的地方, 就是我们所有的SQL都需要自己写,包括基础的增删改查,这个我们也得自己写,这个不是很方便,因为基础的这些语句,我们不管哪个表,都可能遇见,这样就很浪费时间和精力
别犟,我知道mybatis有逆向工程,我也在之前分享了mybatis逆向工程的使用,但是不可否认的是,mybatis有这个缺陷,逆向工程也是为了解决这个问题
本次要分享的通用mapper和mybatisplus就是解决了这个问题,当然还有其他的一些dao框架也能避免这些问题,比如JPA啦,这个是后话,我们之后再聊,先说这两个,通用mapper和mybatisplus
tk.mybatis
mapper-spring-boot-starter
2.1.5
mysql
mysql-connector-java
8.0.16
package own.study.vo;
import lombok.Data;
import javax.persistence.Id;
import javax.persistence.Table;
@Data
@Table(name = "usermessage")
public class User {
private String username;
private String password;
@Id
private int id;
public String getUsername() {
return username;
}
public void setUsrname(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", id=" + id +
'}';
}
}
注意,这里实体类和数据库的关系,默认用驼峰命名,如果说明明不规则,请用注解指定
@Column(name = "user_name")
package own.study.dao;
import own.study.vo.User;
import tk.mybatis.mapper.common.Mapper;
public interface UserDao extends Mapper {
}
@SpringBootApplication
@EnableAspectJAutoProxy
@MapperScan("own.study.dao")
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
注意,因为我本地的mysql用的8.0版本,所以存在时区问题,我在url后面指定了读取的时区地址
package own.study.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import own.study.dao.UserDao;
import own.study.vo.User;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void testMapaper () {
List users = userDao.selectAll();
for (User use : users) {
System.out.println(use);
}
}
}
完事,齐活~ 看,是不是没有写什么基础SQL
还有其他的基础方法,也都有
当然,通用mapper也可以自定义SQL查询,可以在Dao上编写SQL
例如
public interface UserDao extends Mapper {
@Select(value="select * from tb_user where user_name=#{username}")
User findByUsername(String username);
}
这是一种方法,还可以创建条件构造器,进行使用
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("username", "root");
List users = userDao.selectByExample(example);
for (User user : users) {
System.out.println(user);
}
com.baomidou
mybatis-plus-boot-starter
3.1.2
mysql
mysql-connector-java
8.0.16
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
package own.study.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName(value = "usermessage")
public class User {
private String username;
private String password;
@TableId
private int id;
public String getUsername() {
return username;
}
public void setUsrname(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", id=" + id +
'}';
}
}
package own.study.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import own.study.vo.User;
public interface UserDao extends BaseMapper {
}
package own.study.web;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import own.study.aop.ExceptionEnu;
import own.study.aop.MyException;
import own.study.aop.MyRsp;
import own.study.dao.UserDao;
import own.study.vo.User;
@RestController
public class OneController {
@Autowired
private UserDao userDao;
@GetMapping("/doCheck")
public void doCheck (int age) {
User user = userDao.selectById(1);
System.out.println(user);
}
}
当然,我们也可以自定义查询或者使用,构造条件构造器,也支持在Dao用注解去写自定义SQL
如下:
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("username", "root");
User user = userDao.selectOne(wrapper);
System.out.println(user);
当然,这个只是查询的条件构造器,还有修改等的条件构造器
另外就是,还有一些批量方法,mybatisplus的mapper是没有的,需要我们写一个service去继承ServiceImpl<继承了父类mapper的dao, 实体类>
这样就可以使用批量方法了
但是我先提醒一句,批量插入,这个批量插入,底层是循环,一条一条插入的,速度可能不快!!!