千家信息网

mybatis怎么进行使用

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,mybatis怎么进行使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.数据源DataSource
千家信息网最后更新 2025年02月03日mybatis怎么进行使用

mybatis怎么进行使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1.数据源DataSource

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

2.mapper.xml文件

                            

3.Dao类的实例化

方法一:原生方法的实例化

自定义一个BaseDao抽象类实现SqlSessionDaoSupport并注入sqlSessionFactory,通过namespace+id找到mapper.xml文件

方法二:spring-mytabis动态代理生成实例化

                                

4.分页插件

4.1自定义分页插件

                                                                                        package com.unilife.commons.utils;import com.unilife.commons.dto.Page;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.executor.ExecutorException;import org.apache.ibatis.executor.statement.BaseStatementHandler;import org.apache.ibatis.executor.statement.RoutingStatementHandler;import org.apache.ibatis.executor.statement.StatementHandler;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.apache.ibatis.mapping.ParameterMapping;import org.apache.ibatis.mapping.ParameterMode;import org.apache.ibatis.plugin.*;import org.apache.ibatis.reflection.MetaObject;import org.apache.ibatis.reflection.property.PropertyTokenizer;import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;import org.apache.ibatis.session.Configuration;import org.apache.ibatis.type.TypeHandler;import org.apache.ibatis.type.TypeHandlerRegistry;import org.springframework.util.StringUtils;import java.lang.reflect.Field;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import java.util.Properties;@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = { Connection.class }) })public class PagePlugin implements Interceptor {        private String dialect = ""; // 数据库方言        private String pageSqlId = ""; // mapper.xml中需要拦截的ID(正则匹配)        @Override        public Object intercept(Invocation ivk) throws Throwable {                if (ivk.getTarget() instanceof RoutingStatementHandler) {                        RoutingStatementHandler statementHandler = (RoutingStatementHandler) ivk                                        .getTarget();                        BaseStatementHandler delegate = (BaseStatementHandler) ReflectHelper                                        .getValueByFieldName(statementHandler, "delegate");                        MappedStatement mappedStatement = (MappedStatement) ReflectHelper                                        .getValueByFieldName(delegate, "mappedStatement");                        if (mappedStatement.getId().matches(pageSqlId)) { // 拦截需要分页的SQL                                BoundSql boundSql = delegate.getBoundSql();                                Object parameterObject = boundSql.getParameterObject();// 分页SQL