Mybatis(拦截器实现)通用mapper及全ORM实现(一)
发布日期:2022-02-22 18:04:24 浏览次数:11 分类:技术文章

本文共 6469 字,大约阅读时间需要 21 分钟。

网上关于mybatis的拦截器文章有不少,但都大同小异,如果想做一个通用mapper和关系映射的查询都不太能够解决问题,所以自己就花了些时间写了一个mybatis的扩展(目前只实现了mysql数据库),具体项目可以在上下载。

先简单介绍一下扩展使用,后面在陆续展开说明实现

  1. 实体类定义
    假定数据三张表:公司、部门、员工,定义如下:
     
    public abstract class BaseEntity extends BaseExtEntity {    public enum CommonStatus implements BaseExtEnum {        Enable(1, "正常"),        Disable(0, "关闭");        private int value;        private String name;        private CommonStatus(int value, String name){            this.value = value;            this.name = name;        }        @Override        public Object getValue() {            return value;        }        @Override        public String getName() {            return name;        }    }}
    @Table("Company")public class CompanyEntity extends BaseEntity {    @Column(primaryKey = true)    private int id;    @Column    private String comName;    @Column    private Date registerDate;    @Column("ComAddress")    private String address;    @Column    private CommonStatus status;    @OneMany(type = DepartmentEntity.class, foreignKey = "comId", propertyKey = "id")    private List
    departments; private int countValue; public int getId() { return id; } public Date getRegisterDate() { return registerDate; } public String getAddress() { return address; } public String getComName() { return comName; } public CommonStatus getStatus() { return status; } public int getCountValue() { return countValue; } public List
    getDepartments() { return departments; } public void setId(int id) { this.id = id; } public void setAddress(String address) { this.address = address; } public void setComName(String comName) { this.comName = comName; } public void setRegisterDate(Date registerDate) { this.registerDate = registerDate; } public void setStatus(CommonStatus status) { this.status = status; } public void setCountValue(int countValue) { this.countValue = countValue; } public void setDepartments(List
    departments) { this.departments = departments; }}
    @Table("Department")public class DepartmentEntity extends BaseEntity {    @Column(primaryKey = true)    private int id;    @Column    private int comId;    @Column    private String departmentName;    @OneOne(type = CompanyEntity.class, foreignKey = "id", propertyKey = "comId")    private CompanyEntity company;    @OneMany(type = EmployeeEntity.class, foreignKey = "departmentId", propertyKey = "id")    private List
    employees;}
    @Table("Employee")public class EmployeeEntity extends BaseEntity {    @Column(primaryKey = true, generatedKey = false)    private String id;    @Column    private String name;    @Column    private Gender gender;    @Column    private int level;    @Column    private String title;    @Column    private int departmentId;    @OneOne(type = DepartmentEntity.class, foreignKey = "id", propertyKey = "departmentId")    private DepartmentEntity department;    public enum Gender implements BaseExtEnum {        Male(1, "男"),        Female(2, "女");        private int value;        private String name;        private Gender(int value, String name){            this.value = value;            this.name = name;        }        @Override        public Object getValue() {            return value;        }        @Override        public String getName() {            return name;        }    }}

     

  2. mapper
     
    public interface BaseMapper
    extends BaseExtMapper
    {}
    public interface CompanyMapper extends BaseMapper
    {}
    public interface DepartmentMapper extends BaseMapper
    {}
    public interface EmployeeMapper extends BaseMapper
    {}
     
  3. 基础增删改查操作
     
    @Autowiredprivate CompanyMapper companyMapper;companyMapper.addOne(entity);companyMapper.addMany(entities);companyMapper.removeById(id);companyMapper.removeByIds(ids);companyMapper.updateById(entity);companyMapper.getById(id);companyMapper.getByIds(ids);
     
  4. 特定条件及表连接操作
     
    //更新MySqlStatement mySqlStatement = MySqlStatement.createUpdateStatement(YourEntity.class);mySqlStatement        .set("propertyName", "propertyValue")        .where("propertyName", ConditionType.EQUAL, "propertyValue");int result = mapper.update(mySqlStatement);//删除MySqlStatement mySqlStatement = MySqlStatement.createDeleteStatement(YourEntity.class);mySqlStatement        .where("propertyName", ConditionType.EQUAL, "propertyValue");int result = mapper.remove(mySqlStatement);//单表查询MySqlStatement mySqlStatement = MySqlStatement.createSelectStatement(YourEntity.class);mySqlStatement.select("id", "name");mySqlStatement.select("id", "name");YourEntity entity = mapper.getOne(mySqlStatement);mySqlStatement.orderBy("id", OrderType.DESCENDING).limit(10);List
    entities = mapper.getMany(mySqlStatement);MySqlStatement mySqlStatement = MySqlStatement.createSelectStatement(YourEntity.class);mySqlStatement.select("max(#{id})");YourEntity entity = mapper.getOne(mySqlStatement);int maxId = entity.getId();MySqlStatement mySqlStatement = MySqlStatement.createSelectStatement(YourEntity.class);mySqlStatement.selectAs("count(#{id})", "propertyName");YourEntity entity = mapper.getOne(mySqlStatement);int countNum = entity.getPropertyName();//表连接查询MySqlStatement mySqlStatement = MySqlStatement.createSelectStatement(YourEntity1.class);MySqlStatement mySqlStatement1 = mySqlStatement.createSubQuery("relationshipProperty");MySqlStatement mySqlStatement2 = mySqlStatement.createSubQuery(YourEntity2.class);mySqlStatement.join(mySqlStatement2, JoinType.LEFT_JOIN, "fromPropertyName", "toPropertyName", false, "resultPropertyName");mySqlStatement1.select("id", "name");mySqlStatement2.select("id", "name");//子查询MySqlStatement mySqlStatement = MySqlStatement.createSelectStatement(YourEntity1.class);MySqlStatement mySqlStatement2 = mySqlStatement.createSubQuery(YourEntity2.class);mySqlStatement.join(mySqlStatement2, JoinType.LEFT_JOIN, "fromPropertyName", "toPropertyName", true, "resultPropertyName");//分页查询Pager pager = new Pager();pager.setPageSize(10);pager.setCurrentPage(1); List
    entities = getPage(mySqlStatement, pager);pager.getRowCount();pager.getCurrentPage();//获取查询sql及参数FormatSqlWrapper formatSqlWrapper = mySqlStatement.getFormatSqlWrapper();formatSqlWrapper.getSql();formatSqlWrapper.getParameters();

暂时先介绍这么多,下一篇开始阐述具体实现,源代码。

 

转载地址:https://blog.csdn.net/erct/article/details/82697585 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:扩展权限ACL的应用
下一篇:Mybatis(拦截器实现)通用mapper及全ORM实现(二)

发表评论

最新留言

很好
[***.229.124.182]2024年04月04日 00时35分34秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章