本文共 7773 字,大约阅读时间需要 25 分钟。
@PostConstruct:
Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。MyBatis分页提供的是逻辑分页,每次将所有数据查询出来,存储到内存中,然后根据请求的页码,进行逐页返回。
官方介绍:
集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用mapper的xml文件的。com.baomidou mybatis-plus-boot-starter 3.1.1
UserMapper.java
package com.example.mapper.auto;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.model.auto.User;import java.util.List;/** ** Mapper 接口 *
* * @author astupidcoder * @since 2020-05-13 */public interface UserMapper extends BaseMapper{ public List findAllUser();}
测试:
@RunWith(SpringRunner.class)@SpringBootTestpublic class SampleTest { @Autowired private UserMapper userMapper; @Test public void testSelect() { System.out.println(("----- selectAll method test ------")); // UserMapper 中的 selectList() 方法的参数为 MP 内置的条件封装器 Wrapper,所以不填写就是无任何条件 ListuserList = userMapper.selectList(null); Assert.assertEquals(5, userList.size()); userList.forEach(System.out::println); }}
package com.example.service;import com.baomidou.mybatisplus.extension.service.IService;import com.example.model.auto.User;import java.util.List;/** ** 服务类 *
* * @author astupidcoder * @since 2020-05-13 */public interface IUserService extends IService{ public List findAllUser();}
package com.example.service.impl;import com.example.model.auto.User;import com.example.mapper.auto.UserMapper;import com.example.service.IUserService;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;/** ** 服务实现类 *
* * @author astupidcoder * @since 2020-05-13 */@Servicepublic class UserServiceImpl extends ServiceImplimplements IUserService { @Autowired private UserMapper userMapper; @Override public List findAllUser() { return userMapper.findAllUser(); }}
实体类用到的注解:
// 当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名@TableName(value = "sys_user")public class sysUser { // 用来解决数据库中的字段和实体类的字段不匹配问题 @TableField(value = "create_time") private Integet createTime; // 用来解决实体类中有的属性但是数据表中没有的字段 @TableField(exist = false) // 默认为true private Integet createTimeCn;}
MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,自定义的sql当然是写在XML文件中的啦,那么首先来定义xml文件的位置,在yml配置文件如下:
mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/*/*/mapper/*Mapper.xml # 如果是放在resource目录 classpath:/mapper/**.xml mapper-locations: classpath:/mapper/**.xml
/** * @Auther: IT贱男 * @Date: 2019/6/10 14:40 * @Description: User对象持久层 */public interface UserMapper extends BaseMapper{ /** * * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法 * * @param userWrapper * @return */ @Select("SELECT * FROM user ${ew.customSqlSegment}") List selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper userWrapper); /** * 和Mybatis使用方法一致 * @param name * @return */ @Select("SELECT * FROM user where name = #{name}") List selectByName(@Param("name") String name); }
/** * @Auther: IT贱男 * @Date: 2019/6/10 14:40 * @Description: User对象持久层 */public interface UserMapper extends BaseMapper{ /** * 和Mybatis使用方法一致 * @param name * @return */ List selectByName(@Param("name") String name); }
在xml文件中,namespace对应的是user模块的dao,id对应dao下面UserMapper接口的函数名,resultType定义返回的类型。
官方介绍:
示例 start=10,end=20 查第11-20的数据public String searchByPage(String sql, int start, int end, List
例如创建时间、更新时间等字段。
package cn.com.infosec.netseal.webserver.config.mybatisPlus;import cn.com.infosec.netseal.common.entity.po.BasePo;import cn.com.infosec.netseal.common.util.DateUtil;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;/** * @Description mybatisPlus 公共字段自动写入 * @Date 2020/11/17 11:21 */@Componentpublic class CommonFieldAutoSetHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { if (metaObject.getOriginalObject() instanceof BasePo) { long currentTime = DateUtil.getCurrentTime(); this.setFieldValByName("createTime", currentTime, metaObject); this.setFieldValByName("updateTime", currentTime, metaObject); } } @Override public void updateFill(MetaObject metaObject) { if (metaObject.getOriginalObject() instanceof BasePo) { long currentTime = DateUtil.getCurrentTime(); this.setFieldValByName("updateTime", currentTime, metaObject); } }}
package cn.com.infosec.netseal.webserver.config.mybatisPlus;import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;import com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableTransactionManagement(proxyTargetClass = true)@Configurationpublic class MybatisPlusConfig { /** * 乐观锁插件 */ @Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); } /** * 如果是对全表的删除或更新操作,就会终止该操作 */ @Bean public SqlExplainInterceptor sqlExplainInterceptor() { return new SqlExplainInterceptor(); }}
转载地址:http://kzqgn.baihongyu.com/