MybatisPlus的简单使用(与SpringMVC的整合)
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);