-
测试笔记查看全部
-
解析configuration.xml文件,使用DOM方式。查看全部
-
解决重复加载问题查看全部
-
确保该对象的解析方法只被调用一次,设置标记值查看全部
-
源码跟踪 configuration中 SqlSessionFactoryBuilder中build方法开始查看全部
-
mybatis遇到spring 1.数据源托管给spring来管理,DB层将消失 2.sqlsession将会托管给spring,组织对象的代码移交给service层,接口式编程将统一由spring来实现,整个dao层将会由之前的接口来替换(小三上位)查看全部
-
使用原始的方法开发dao时,在具体的实现类中,调用sqlSession.selectList()时需要传递两个参数,根据第一个参数在配置文件中找具体的sql语句,这里需要注意两个风险,①编码中的namespace 与配置文件中的namespace 一致,②编码中引用的id与配置文件中的id也要一致,手写就会有很大的风险,㈢就是第二个参数的问题,selectList方法中传入的参数是object,而配置文件中是一个pojo对象,那么在编写代码的时候,传递的参数是其他的类型,编译器也不会提示错误,只有程序运行起来的时候,才会出错,④还有返回值,编码中是通过泛型来约束list的,至于list中是什么泛型,编译器都是可以通过的,在配置文件中的返回类型使用resultMap来约束的。 规避以上四个风险的手段,mybatis称之为接口是编程,需要遵循以下规范: 1、 类的映射:使用接口类的全限定名作为配置文件的namespace,完成类与配置文件的对应关系。 2、 方法名:接口方法名与配置文件中将要执行的sql语句的id一样,这样就完成了方法调用的映射。 3、 参数类型:接口方法的输入参数类型和配置文件中sql的parameterType的类型相同 4、 返回值类型:接口方法的返回值类型和配置文件的resultMap的类型相同 具体实现方法:①将调用的接口类传给sqlSession.getMapper(IMessage.class)方法,返回类型就是这个传入参数的类型IMessage,但是这个时候就不在是接口,而是一个具体的实现,调用接口的方法,就可以得到与映射文件一一对应的参数类型。查看全部
-
1.看源码的能力 2.提高编码的能力 3.学会框架上解决问题的思维与常用手段 4.框架的设计思想 5.知识好传递,思想难传播 6.利用配置文件解耦{反射;动态代理;泛型;设计模式}查看全部
-
Mybatis特点: ---------------1.SQL语句与代码分离 -------------------------优点:便于管理和维护 -------------------------缺点:不便于调试,需要借助日志工具获得信息 ----------------2.用标签控制动态SQL的拼接 -------------------------优点:用标签代替编写逻辑代码 -------------------------缺点: 拼接复杂SQL语句时,没有代码灵活,比较复杂 ---------------3. 结果集与Java对象的自动映射 -------------------------优点:保证名称相同即可自动映射 -------------------------缺点:对开发人员所写的SQL依赖性很强 --------------4. 编写原生SQL ------------------------优点:接近JDBC,很灵活 ------------------------劣势:对SQL语句依赖程序很高查看全部
-
jdbc批量新增语句查看全部
-
代购问题--- 注册拦截器 <plugins> <plugin interceptor="com.imooc.interceptor.PageInterceptor"> <property name="test" value="abc"></property> </plugin> </plugins> public void setProperties(Properties properties) { //该方法中的test是property 的name值 this.test = properties.getProperty("test"); }查看全部
-
通过boundSql.getParameterObject()得到的对象需要强转为Map<?,?>类型 Map<?,?> parameter = (Map<?,?>)boundSql.getParameterObject(); Page page = (Page)parameter.get("page"); if(rs.next()) { page.setTotalNumber(rs.getInt(1)); } // 改造后带分页查询的SQL语句 String pageSql = sql + " limit " + page.getDbIndex() + "," + page.getDbNumber(); metaObject.setValue("delegate.boundSql.sql", pageSql);查看全部
-
mybatis的拦截器实现分页(动态代理) 拦截sql语句来实现分页 1.拦截什么样的对象(1.RoutingStatementHandler;2.以page作为参数传入;page对象) 2.拦截对象什么行为 3.什么时候拦截 (在prepareStatement的时候拦截) (源码) 1.RoutingStatementHandler 2.通过RoutingStatementHandler对象的属性delegate找到statement实现类BaseStatementHandler 3.通过BaseStatementHandler类的反射得到里面的属性对象(proptect)的MappedStatement对象 4.通过MappedStatement的属性getID得到配置文件sql语句的ID 5.通过BaseStatementHandler属性的到原始sql语句 6.拼接分页sql( 1.需要查询总数的sql 2.通过拦截Connection对象得到PrepareStatement对象 3.得到对应的参数 4.把参数设到prepareStatement对象里的?(该?号在配置文件以#{}形式存在,mybatis会把它转为?号) 5.执行该sql语句 6.得到总数 ) 7.把属性值为新的sql查看全部
-
mybatis的拦截器实现分页(动态代理) 拦截sql语句来实现分页 1.拦截什么样的对象(以page作为参数传入;page对象) 2.拦截对象什么行为 3.什么时候拦截 (在prepareStatement的时候拦截) (源码) 1.RoutingStatementHandler 2.通过RoutingStatementHandler对象的属性delegate找到statement实现类BaseStatementHandler 3.通过BaseStatementHandler类的反射得到对象的MappedStatement对象 4.通过MappedStatement的属性getID得到配置文件sql语句的ID 5.通过BaseStatementHandler属性的到原始sql语句 6.拼接分页sql( 1.需要查询总数的sql 2.通过拦截Connection对象得到PrepareStatement对象 3.得到对应的参数 4.把参数设到prepareStatement对象里的?(该?号在配置文件以#{}形式存在,mybatis会把它转为?号) 5.执行噶sql语句 6.得到总数 ) 7.把属性值为新的sql查看全部
-
1.先定义一个接口代替案例中的IMessage接口,定义一个接口方法,参数类型返回值类型随意,注意实现invoke()方法的时候遵循定义的返回值类型,然后创建相应类型的对象返回即可。 2.然后再创建一个类实现了InvocationHandler接口的,然后再实现invoke()方法,通过反射打印出被代理的接口名以及方法名即可 3.创建一个sqlSession类代替mybatis 中的SqlSession接口。在这里也写一个getMapper()方法,这个方法主要做两件事,①根据接口与代理类创建一个代理实例;②根据泛型,将代理实例强制转换 4.然后在main方法中创建一个sqlsession对象,去调用getMapper方法,传递一个自定义接口的class做参数,再用自定义接口类型承接这个值,然后在用这个对象去调用接口的方法。查看全部
举报
0/150
提交
取消