学习框架原理springboot

SpringBoot整合Mybatis-Plus

2019-02-12  本文已影响230人  Radom7

Mybatis-Plus简介:

Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官方文档:Mybatis-Plus入口

特性

备注:这里只是简单的demo学习,官方也有具体的demo,看个人喜好,这里自己写通俗点。

Spring-boot整合Mybatis-Plus

加入Mybatis-Plus坐标:

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>2.2.0</version>
            </dependency>

官方用的是DB2数据源,这里使用的mysql数据源,在application.yml配置文件配置数据源,同时加入Mybatis-Plus配置,关于Mybatis-Plus配置。可以查看具体的官方文档

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test
    data-username: root
    data-password: root
    driver-class-name: com.mysql.jdbc.Driver


#mybatis
mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  global-config:
     #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 2
     #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
    field-strategy: 2
     #刷新mapper 调试神器
    refresh-mapper: true
     #逻辑删除配置(下面3个配置)
    logic-delete-value: 0
    logic-not-delete-value: 1
    sql-parser-cache: true
  configuration:
   #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId) 
    map-underscore-to-camel-case: true
    cache-enabled: false

当然还可以Java Configuration配置:

@Configuration
@MapperScan("com.lin.mapper*")
public class MybatisPlusConfig {
    /**
     * mybatis-plus SQL执行效率插件【生产环境可以关闭】
     */
    @Bean
    public PerformanceInterceptor performanceInterceptor() {
        return new PerformanceInterceptor();
    }


    @Bean
    public MetaObjectHandler metaObjectHandler(){
        return new MyMetaObjectHandler();
    }

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 注入sql注入器
     */
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }

}

entity层就不说了,直接dao层,继承官方的BaseMapper接口,里面已经帮我们写好了很多CRUD方法,同时可以自定义方法:


这里写图片描述
public interface UserMapper extends BaseMapper<User> {
    int deleteAll();

    @SqlParser(filter = true)
    @Select("select id , name, age from user")
    List<User> selectListBySQL();

    List<User> selectUserList(Pagination page);

}

相对应的mapper.xml:

<mapper namespace="com.lin.mapper.UserMapper">

    <!-- 通用查询结果列 -->
    <sql id="Base_Column_List">
        id , name, age
    </sql>

    <delete id="deleteAll">
        DELETE FROM USER
    </delete>
    <select id="selectUserList" resultType="com.lin.entity.User">
         SELECT * FROM user
    </select>

</mapper>

Service层:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {


    @Override
    public boolean deleteAll() {
        return retBool(baseMapper.deleteAll());
    }

    @Override
    public List<User> selectListBySQL() {
        return baseMapper.selectListBySQL();
    }

    public Page<User> selectUserPage(Page<User> page) {
        // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题
        // page.setOptimizeCountSql(false);
        // 不查询总记录数
        // page.setSearchCount(false);

        return page.setRecords(baseMapper.selectUserList(page));
    }
}

Controller层:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 分页 PAGE
     */
    @GetMapping("/test")
    public Page<User> test() {
        return userService.selectPage(new Page<User>(0, 3));
    }

    @GetMapping("/test1")
    public Boolean test1() {
        return userService.deleteAll();
    }


    /**
     * 增删改查 CRUD
     */
    @GetMapping("/test2")
    public User test2() {

        User user = new User();
        user.setId(1);
        user.setName("jack");
        user.setAge(16);
        boolean result = userService.insert(user);
        int id = user.getId();
        System.err.println("插入一条数据:" + result + ", 插入信息:" + user.toString());
        System.err.println("查询:" + userService.selectById(id).toString());
        System.err.println("更新一条数据:" + userService.updateById(new User(1, "alice", 18)));
        for (int i = 0; i < 5; ++i) {
            userService.insert(new User( "jack" + i, 1));
        }
        Page<User> userListPage = userService.selectPage(new Page<User>(1, 3));
        System.err.println("total=" + userListPage.getTotal() + ", current list size=" + userListPage.getRecords().size());
        return userService.selectById(1);
    }


    @GetMapping("/test3")
    public User test3() {
        User user = new User(1, "jason",  16);
        System.out.println("插入前:" + user.toString());
        userService.insertOrUpdate(user);
        user = userService.selectById(1);
        System.out.println("更新后:" + user.toString());
        return user;
    }


    /**
     * 测试实体注解注入条件 LIKE 查询
     */
    @GetMapping("/like")
    public Object like() {
        JSONObject result = new JSONObject();
        User user = new User();
        user.setName("j");
        result.put("result", userService.selectList(new EntityWrapper<User>(user)));
        return result;
    }

    @GetMapping("/add")
    public Object addUser() {
        User user = new User("xiaomi",  1);
        JSONObject result = new JSONObject();
        result.put("result", userService.insert(user));
        return result;
    }

    @GetMapping("/selectsql")
    public Object getUserBySql() {
        JSONObject result = new JSONObject();
        result.put("records", userService.selectListBySQL());
        return result;
    }

    /**
     * 7、分页 size 一页显示数量  current 当前页码
     * 方式一:http://localhost:8080/user/page?size=1&current=1<br>
     * 方式二:http://localhost:8080/user/pagehelper?size=1&current=1<br>
     */

    // 参数模式分页
    @GetMapping("/page")
    public Object page(Page page) {
        return userService.selectPage(page);
    }


    @GetMapping("/pages")
    public Object selectUserPage(Page<User> page){
        return userService.selectUserPage(page);
    }


    // ThreadLocal 模式分页
    @GetMapping("/pagehelper")
    public Object pagehelper(Page page) {
        PageHelper.setPagination(page);
        page.setRecords(userService.selectList(null));
        page.setTotal(PageHelper.freeTotal());//获取总数并释放资源 也可以 PageHelper.getTotal()
        return page;
    }



}

上一篇下一篇

猜你喜欢

热点阅读