zoukankan      html  css  js  c++  java
  • MybatisPlus的简单使用(与SpringMVC的整合)

    官网https://mp.baomidou.com/

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

    1、加载依赖

    <!--mybatisPlus  -->
     <dependency>
               <groupId>com.baomidou</groupId>
               <artifactId>mybatis-plus</artifactId>
               <version>3.3.2</version>
    </dependency>

    需要将 mybatis的jar 、mybatis与spring整合的jar 删除

    2、在applicationContext.xml中 改造sqlsessionFactoryBean, class修改为:

      com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean

    <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    </bean>

    3、 修改Mapper接口,   让项目的mapper接口继承 MybatisPlus提供的父接口: BaseMapper

    public interface UserMapper  extends BaseMapper<User>{ }

    4、在实体类, 进行表与类的映射

    @Data
    public class House {
        private Integer id;
        private String name;
    }

    插入数据时,要是使用序列,需要进行映射

      在applicationContext.xml中 对 Oracle序列配置:

    <!-- 序列生成策略 -->
        <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
            <property name="dbConfig" ref="dbConfig" />
        </bean>
    
        <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
            <property name="keyGenerator" ref="keyGenerator" />
        </bean>
    
        <bean id="keyGenerator" class="com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator" />

    4、特别注意:     需要在selSessionFactoryBean加上globalConfig属性

    <bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
    <!-- 添加oracle序列的全局配置 -->
      <property name="globalConfig" ref="globalConfig" />
    </bean>

    在实体类中指定序列属性

    @Data
    @KeySequence("seq_id") //序列名
    public class House {
        @TableId(value = "id",type = IdType.INPUT)   //指定属性
        private Integer id;

    MybatisPlus中在applicationContext.xml中所有需要的配置,包括分页插件 ***

    <!-- ***修改SqlSessionFactory -->
    <bean id="sqlSessionFactoryBean"
          class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
     <property name="dataSource" ref="dataSource" />
     <!-- 加载mybatis的全局配置文件 -->
     <property name="configLocation"  value="classpath:mybatis-config.xml" />
     <!-- TODO 加载sql映射文件 -->
     <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml" />
     <!--别名设置 -->
    <property name="typeAliasesPackage" value="com.zl.house.entity" /> <!-- 添加oracle序列的全局配置 --> <property name="globalConfig" ref="globalConfig" />
    <!-- 配置分页插件 --> <property name="plugins"> <array> <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"> <!-- <property name="sqlParser" ref="自定义解析类、可以没有" /> <property name="dialectClazz" value="自定义方言类、可以没有" /> COUNT SQL 解析.可以没有--> <property name="countSqlParser" ref="countSqlParser" /> </bean> </array> </property>
    </bean> <bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">   <!-- 设置为 true 可以优化部分 left join 的sql -->   <property name="optimizeJoin" value="true"/> </bean> <!-- 序列生成策略 --> <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig"> <property name="dbConfig" ref="dbConfig" /> </bean> <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig"> <property name="keyGenerator" ref="keyGenerator" /> </bean> <bean id="keyGenerator" class="com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator" />

    获取BaseMapper对象的两种方式  ***

    1、直接获取:

      getBaseMapper();

    2、通过注入的方式

      @Autowired
      private IUserMapper userMapper;

      private IUserMapper userMapper;

     插入数据

    实体类映射数据了表

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    //对应数据库表中的自增系列名
    @KeySequence(value = "seqhouse" )
    public class Users implements Serializable{
        private static final long serialVersionUID = -809025169738892344L;
        //给指定类加上序列,input通过自己注册自动填充插件进行填充
        @TableId(value = "id",type = IdType.INPUT)
        private Integer id; //id编号
        private String name; //用户名
        private String password; //密码
        private String telephone; //电话
        private String username; //姓名
        // 如果属性名是驼峰命名法, 对应列, is_admin
        //@TableField("isAdmin")
        private String isadmin; //是否为管理员
        

    mapper、service不用写代码

    @TableId(value = "id",type = IdType.INPUT) -->绑定id列序列

    如果不写会使用雪花算法默认生成一个id(id列上加:@TableId(type = IdType.AUTO))

    雪花算法: snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为 毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味 着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。可以保证几乎全球唯 一!

    //测试注册
    @Test
    public void testReg() throws Exception {
        Users user  = new Users();
        user.setName("qq");
        user.setPassword("666666");
        user.setTelephone("");
        user.setUsername("小武");

    查询

    // 测试查询
    @Test
    public void testSelectById(){
    User user = userMapper.selectById(1L);
    System.out.println(user);
    }
    // 测试批量查询!
    @Test
    public void testSelectByBatchId(){
    List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
    users.forEach(System.out::println);
    }
    // 按条件查询之一使用map操作
    @Test
    public void testSelectByBatchIds(){
    HashMap<String, Object> map = new HashMap<>();
    // 自定义要查询
    map.put("name","狂神说Java");
    map.put("age",3);
    List<User> users = userMapper.selectByMap(map);
    users.forEach(System.out::println);
    }

    分页查询

    // 测试分页查询
    @Test
    public void testPage(){
    // 参数一:当前页
    // 参数二:页面大小
    // 使用了分页插件之后,所有的分页操作也变得简单的!
    Page<User> page = new Page<>(2,5);
    userMapper.selectPage(page,null);
    page.getRecords().forEach(System.out::println);
    System.out.println(page.getTotal());
    }

    删除

    // 测试删除
    @Test
    public void testDeleteById(){
    userMapper.deleteById(1240620674645544965L);
    }
    // 通过id批量删除
    @Test
    public void testDeleteBatchId(){
    userMapper.deleteBatchIds(Arrays.asList(1240620674645544961L,124062067464554496
    2L));
    }
    // 通过map删除
    @Test
    public void testDeleteMap(){
    HashMap<String, Object> map = new HashMap<>();
    map.put("name","狂神说Java");
    userMapper.deleteByMap(map);
  • 相关阅读:
    第二章:Java内存区域
    第六章:内核数据结构
    第十章:内核同步方法
    第九章:内核同步介绍
    第九章:zookeeper内部原理
    第三章:开始使用zookeeper的API
    第二章:了解zookeeper
    【观点】健康的心智是中国未来最大的生产力
    【流程管理分享】人事不分,问题不断
    为什么中国人勤劳而不富裕?为什么宋朝富裕而不强大?
  • 原文地址:https://www.cnblogs.com/64Byte/p/13169262.html
Copyright © 2011-2022 走看看