springboot集成MyBatisPlus、自定义xml、打印SQL

之前一直用MyBatis,现在刚入职的公司在用MyBatisPlus,所以自己记录一下。
使用感想就是:简单的单表增删改查用MyBatisPlus,复杂的多表操作使用自定义SQL。工具始终是工具,要自己权衡利弊,没有任何工具是绝对的!MyBatisPlus = JPA简单的单表增删改查操作 + MyBatis复杂的多表操作xml里写SQL

  1. 创建一个普通的springboot项目,pom.xml引入相关依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.5.2version>
        dependency>
        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
    dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <excludes>
                        <exclude>
                        	
                            <groupId>org.projectlombokgroupId>
                            <artifactId>lombokartifactId>
                        exclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>
  1. application.yml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&userSSL=false
    username: root
    password: 123456

mybatis-plus:
  #读取xml
  mapper-locations: classpath:mapper/*.xml
  configuration:
    #打印sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. MybatisPlusDemoApplication启动类扫描Mapper
@MapperScan("com.fu.mybatisplusdemo.dao")
@SpringBootApplication
public class MybatisPlusDemoApplication {

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

}
  1. Easy Code生成Controller、Service、ServiceImpl、Dao、Mapper、Entity(Pojo)
    springboot集成MyBatisPlus、自定义xml、打印SQL_第1张图片
    springboot集成MyBatisPlus、自定义xml、打印SQL_第2张图片
    默认的模板生成的代码有些问题,这些可以自己去改模板生成代码,这里不再赘述,可以自己去看看。
    springboot集成MyBatisPlus、自定义xml、打印SQL_第3张图片
    这些都是生成的一步到位后端代码,要是你还懂前端,去弄弄前端的模板,直接前后端一步到位!
  2. User实体类
@Data   //lombok生成Set、Get、equals、hashCode、toString
@TableName("user")  //解决数据库表名和实体类名不一致的问题,如表名叫t_user,则@TableName("t_user")
@EqualsAndHashCode(callSuper=false) //lombok重写Equals和HashCode方法,因为继承了Model类callSuper表示是否考虑父类的方法
public class User extends Model<User> {     //Model<实体类>,这个Model的作用非常奇怪,居然可以用来直接调用数据库的数据,如:User user = new User();user.setName("姓名");Assert.assertTrue(user.insert());居然可以直接这样调用!!!
    //主键
    @TableId(type = IdType.AUTO)    //使用数据库自增主键,解决数据库没有设置自增主键的问题
    private Long id;
    //姓名
    @TableField(value = "name") //解决数据库字段名和变量名不一致的问题如数据库叫p_name,则value = "p_name"
    private String name;
    //年龄
    private Integer age;
    //邮箱
    private String email;
    //密码
    @TableField(select = false)     //查询时不返回该字段
    private String pwd;
    //修改时间
    @TableField(fill = FieldFill.INSERT_UPDATE)     //修改数据时刷新时间
    private Date updateTime;
    //创建时间
    @TableField(fill = FieldFill.INSERT)    //新增数据时创建时间
    @JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")    //JSON格式转换,把日期转成指定字符串格式
    private Date createTime;
}
  1. UserDao.java
public interface UserDao extends BaseMapper<User> {
    /**
     * 自定义接口使用xml的sql语句进行查询
     * @param id
     * @return
     */
    User selectOneByIdUser(@Param("id") Long id);

}
  1. UserDao.xml

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fu.mybatisplusdemo.dao.UserDao">

    <resultMap type="com.fu.mybatisplusdemo.entity.User" id="UserMap">
        <result property="id" column="id" jdbcType="BIGINT"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="age" column="age" jdbcType="INTEGER"/>
        <result property="email" column="email" jdbcType="VARCHAR"/>
    resultMap>
    
    <sql id="userSql">
        id,`name`,age,email
    sql>

    
    <select id="selectOneByIdUser" resultMap="UserMap">
        select <include refid="userSql"/> from user where id = #{id}
    select>
mapper>
  1. UserService
public interface UserService extends IService<User> {
    User selectOneByIdUser(Long id);
}
  1. UserServiceImpl
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {

    @Resource
    private UserDao userDao;

    @Override
    public User selectOneByIdUser(Long id) {
        return userDao.selectOneByIdUser(id);
    }
}
  1. UserController
@RestController
@RequestMapping("user")
public class UserController {
    @Resource
    private UserService userService;

	/**
     * 自定义接口
     * @param id
     * @return
     */
    @GetMapping("/one")
    public User selectOneByIdUser(@RequestParam Long id) {
        return userService.selectOneByIdUser(id);
    }

    /**
     * 分页查询所有数据
     *
     * @param page 分页对象
     * @param user 查询实体
     * @return 所有数据
     */
    @GetMapping
    public Page<User> selectAll(Page<User> page, User user) {
        return this.userService.page(page, new QueryWrapper<>(user));
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("{id}")
    public User selectOne(@PathVariable Serializable id) {
        return this.userService.getById(id);
    }

    /**
     * 新增数据
     *
     * @param user 实体对象
     * @return 新增结果
     */
    @PostMapping
    public boolean insert(@RequestBody User user) {
        return this.userService.save(user);
    }

    /**
     * 修改数据
     *
     * @param user 实体对象
     * @return 修改结果
     */
    @PutMapping
    public boolean update(@RequestBody User user) {
        return this.userService.updateById(user);
    }

    /**
     * 删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    @DeleteMapping
    public boolean delete(@RequestParam("idList") List<Long> idList) {
        return this.userService.removeByIds(idList);
    }
}

postman测试MyBatisPlus生成的接口

  1. localhost:88/user就是调用分页查询的方法
  2. localhost:88/user/1就是调用根据id查询一条数据的方法

测试自定义的方法

  1. localhost:88/user/one?id=1就是调用自定义的方法使用xml里面的sql去获取数据库的数据

你可能感兴趣的:(Spring,Boot,ORM框架:MyBatis,JPA,spring,boot,java,xml)