精华内容
下载资源
问答
  • 1.回顾Mybatis执行sql的流程2.mapper动态代理怎么写?3.mapper动态代理怎么做的?1.回顾Mybatis执行sql的流程在之前的代码中我们的运行过程再梳理一下,首先我们执行Test,调用dao接口方法接口的定义:调用接口的实现...
    • 1.回顾Mybatis执行sql的流程

    • 2.mapper动态代理怎么写?

    • 3.mapper动态代理怎么做的?

    1.回顾Mybatis执行sql的流程

    在之前的代码中我们的运行过程再梳理一下,首先我们执行Test,调用dao接口方法

    4c347cb69f32983784ea41e408e522a0.png

    接口的定义:0de75cc7f967bcd32fd5ea7adb63ea7a.png

    调用接口的实现类方法:8f0ccf186df9610ba575dc83c02cf7d6.png

    最后才是调用真正的sql:27c4848a6fc6e6eccc8a3ed11c0fb193.png

    上面的代码是在接口实现类里面自己去执行id,查找并执行mapper文件里面的sql,那么我们想是不是可以减少一步呢?

    如果我们不用自己实现接口,只需要将接口的名字和mapper文件的namespace对应起来,将接口里面的方法名与sql语句标签的id对应起来是不是就可以了呢?

    事实上,mybatis提供了这样的做法,这就是mapper动态代理。

    2.mapper动态代理怎么写?

    首先主配置文件(Mybatis.xml),在里面配置数据库连接信息,注册需要扫描的mapper文件:

    8d3ece676ae1cb49cf33d223714c512f.png

    定义数据库查询的接口,里面每一个接口的名字很重要,需要和mapper里面每一条sql对应起来:

    93cdbb91f058d4adc9badbbbb2e60d89.png

    定义mapper文件(namespace是接口的全限定类名):645bbf5f28305800a17a517ee8ee7110.png

    那我们在使用的时候,需要使用sqlSession.getMapper()方法,里面传入的是接口,意思是通过接口的全限定名,也就是前面在mapper.xml文件里面配置的命名空间nameSpace,这样一来,就是获取到了代理类,将daomapper.xml文件关联起来了,而每条sqlid与我们的接口方法名字对应起来)

    a21d6c47cbb88ea2fd0cff3aef1b9180.png

    我们在前面还写到过一个selectStudentMap()方法,但是里面调用的是和SelectList()一样的sql,在接口的实现类里面我们自己处理了一下,但是现在使用自动实现的话,底层只会调用SelectOne()或者SelectList()方法,所以这个方法会报错,如果接受类型是list,那么框架会自动使用selectList()方法,否则就会选择selectOne()这个方法。

    在这里我们使用的是返回的是map,所以自动选择返回selectOne()方法,那么就会报错。如果我们需要使用自动返回map的话,可以自己定一个map,或者返回list之后再处理,这个知识点后面再介绍,有兴趣可以访问:mybatis的mapper返回map结果集

    3.mapper动态代理怎么做的?

    打一个断点在sqlSession.getMapper()方法上:

    a300636cbd3cdd8069adf41fd24d194e.png

    我们可以看到执行下面的接口方法(接口SqlSession的方法)

     getMapper(Class var1);

    这是一个接口,我们可以看到实现接口的有两个类,一个是DefaultSqlSession,一个是SqlSessionManager,我们需要看的是DefaultSqlSession下面的接口:

     public  getMapper(Class type) {return this.configuration.getMapper(type, this);
      }

    我们知道,在创建sqlsession的时候,confiiguration这个配置对象已经创建完成。跟进去,这是使用mapper注册器对象的getMapper()方法,将当前的sqlSession对象传递进去:

    public  getMapper(Class type, SqlSession sqlSession) {return mapperRegistry.getMapper(type, sqlSession);
      }

    我们跟进去源码,可以发现里面使用knownMappers.get(type)来获取mapper代理工厂,这个konwnMappers是一个hashMap,这个hashMap里面已经初始化了mapperProxyFactory对象了,获取到工厂对象之后,再去使用sqlSession实例化:

    public  getMapper(Class type, SqlSession sqlSession) {final MapperProxyFactory mapperProxyFactory = (MapperProxyFactory) knownMappers.get(type);if (mapperProxyFactory == null) {throw new BindingException("Type " + type + " is not known to the MapperRegistry.");
        }try {return mapperProxyFactory.newInstance(sqlSession);
        } catch (Exception e) {throw new BindingException("Error getting mapper instance. Cause: " + e, e);
        }
      }

    实例化的时候,使用了mapper动态代理:

    public T newInstance(SqlSession sqlSession) {
        final MapperProxy mapperProxy = new MapperProxy(sqlSession, mapperInterface, methodCache);return newInstance(mapperProxy);
      }protected T newInstance(MapperProxy mapperProxy) {return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);
      }

    从下面的debug结果中我们可以看到,这是动态代理的结果,我们看到的是dao,但是动态代理对这个dao做了增强,实则是一个mapperProxy

    c4d9be32e35d0f99772b0bc78c71184e.png

    【作者简介】
    秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。

    此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

    f087f3acae055a4bacde2b1e5f83d965.png

    【作者简介】
    秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。

    此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者核实删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~

    f087f3acae055a4bacde2b1e5f83d965.png
    展开全文
  • 各位,项目需要,必须用IKVM 转 java 成 dll 给csharp调用。 我用 直接导出jar,然后IKVN 转成 dll, csharp using package就可以了。...各位,用fattar生成的jar转成dll,怎么填写 using呀。 谢谢
  • 提示错误:错误 1 “System.Windows.Forms.ListBox”不包含“SelectValue”的定义,并且找不到可接受类型为“System.Windows.Forms.ListBox”的第一个参数的扩展方法“SelectValue”(是否缺少 using 指令或程序集...
  • 怎么用notepadc?notepad++编译c:1:安装MinGW及GCC编译器2:配置环境变量(注:可能需要重启后生效)计算机-->属性-->高级系统设置-->环境变量-->系统:path 中添加C:\MinGW\bin;当然MinGW是安在C盘下...

    2bbb28b0e267079f12bff9aab2408840.png

    怎么用notepad写c?

    notepad++编译c:

    1:安装MinGW及GCC编译器

    2:配置环境变量(注:可能需要重启后生效)

    计算机-->属性-->高级系统设置-->环境变量-->系统:path 中添加C:\MinGW\bin;

    当然MinGW是安在C盘下,按不同路径修改

    3: 打开Notepad++,编写一段C++代码并保存

    例如:#include

    using namespace std;

    int main(){

    int a, b;

    cout<

    while(cin>>a>>b){

    cout<

    }

    return 0;

    }

    4:菜单栏--》运行--》运行,弹出框中输入:cmd /k g++ -o $(NAME_PART).exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT

    选择快捷键后保存为: G++编译,注意快捷键不要有重复,在点击弹出框的运行,Ok,关闭Notepad,再打开Notepad++;

    5:菜单栏--》运行--》运行,弹出框中输入:cmd /k "$(NAME_PART)" & PAUSE & EXIT

    同理保存名称换为为: G++运行,再点运行程序就会执行了

    展开全文
  • mysql ipv6 监听参照https://www.jb51.net/article/133019.htm...Navicat 也可以通过ipv6的账户进行连接C# 程序改怎么写呢这样么staticvoidMain(string[]args){using(MySqlConnectionconn=newMySqlConnection("serve...

    mysql ipv6 监听参照 https://www.jb51.net/article/133019.htm 这篇文章弄得。

    Navicat 也可以通过ipv6的账户进行连接

    C# 程序改怎么写呢

    这样么static void Main(string[] args)    {        using (MySqlConnection conn = new MySqlConnection("server=::1;uid=ipv6test;pwd=root;database=test1;CharSet=utf8"))

    {

    string sql = "select * from host";            using (MySqlCommand comm = new MySqlCommand(sql, conn))

    {

    conn.Open();                var reader = comm.ExecuteReader();                if (reader.Read())

    {                    string host = reader["host"] == System.DBNull.Value ? string.Empty : reader["host"].ToString();

    Console.WriteLine(host);

    }

    reader.Close();

    }

    }

    Console.ReadKey();

    }

    展开全文
  • 博客怎么写

    2016-03-04 12:59:13
    友情提示:这里只是个人的简单测试 HTML测试代码 This is a test This is a test C++测试代码 #include using namespace std; int main() { cout; } Java测试代码 public

    友情提示:这里只是本人的简单测试

            简单说一下,由于本人经常混迹于CSDN、博客园、ITEYE等(纯粹装逼大笑),感觉博客真的很不错,一时间手痒难耐,终于开启了了自己的博客之旅。

        以下是本人简单的测试,希望今后能够给大家带来更多优质的资源,欢迎大家和我进行交流。由于本人文笔有限希望大家包涵。

    HTML测试代码

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title>This is a test</title>
    	</head>
    	<body>
                    <h1>This is a test</h1>
    	</body>
    </html>


    C++测试代码

    #include <iostream>
    using namespace std;
    int main()
    {
    	cout<<"This is a test";
    }


    Java测试代码

    public class Test 
    {
    	public static void main(String args[])
    	{
    		System.out.println("This is a test");
    	}
    }


    插入图片测试


    超链接测试

    度娘


    展开全文
  • C++异常怎么写

    2021-03-04 15:13:57
    #include <iostream>...using namespace std; int main() { double m ,n; cin >> m >> n; try { cout << "before dividing." << endl; if( n == 0) throw -1; /
  • Painter 怎么写

    2019-12-21 17:06:30
    Note that all grays are considered equal, so in order to find the minimum number of kits for a test case you may need to make grays using different combinations of three distinct colors. Sample...
  • Verdis Quo 具体怎么写

    2019-11-16 21:50:26
    Using these seven numerals, any desired number can be formed by following the two basic additive and subtractive rules. To form a number using the additive rule the Roman numerals are simply written ...
  • 录音程序出现“using null input device, none available”无法录音,哪位大侠知道怎么回事?求教
  • using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace C_12._31.ATM机 { class Program { static void Main(string[] ...
  • goto 语句怎么写

    千次阅读 2018-05-13 11:42:30
    来自百度百科using System;using static System.Console;class Program{public static Int32 Main(String[]args) { int n = 0; WriteLine("input a string :\n"); loop: if (Read()!= '\r') { n++;...
  • LaTex——算法怎么写

    2020-06-13 10:18:05
    Code using algorithm package overleaf \documentclass[a4paper]{article} \usepackage[margin=1.5in]{geometry} % For margin alignment \usepackage[english]{babel} \usepackage[utf8]{inputenc} \...
  • C#中连接数据库的代码怎么写

    千次阅读 2013-04-29 15:01:50
    C#中连接数据库的代码怎么写? 在C#编程开发系统时,需要连接数据库,可是有时候怎么写都不对,不知道哪里出了问题。下面介绍一种方法,是一种比较好的通用方法: using System; using System.Collections....
  • Painter 是怎么写

    2020-01-07 00:47:15
    Note that all grays are considered equal, so in order to find the minimum number of kits for a test case you may need to make grays using different combinations of three distinct colors. Sample...
  • 这道题怎么写

    2019-05-06 14:02:43
    using namespace std; class Teacher { private: int tno; char tname; char major; char level; double salary[3]; //基本工资、绩效奖金、补助 public: Teacher(); //编号-1,char类型初始为NULL,工资初始为0 ...
  • jsTree ajax应该怎么写

    2016-06-29 03:54:52
    $(function() { $("#mechanismtree").jstree( { "json_data" : { "ajax" : { "url" :${pageContext.request.contextPath }+"/manage/mechanism/selsetMechanismtree", ///${pageContext.request.context...
  • Typesetting 怎么写的呢

    2019-11-20 17:53:08
    Then output the proper packing of the input glyphs, using the dot '.' character for empty pixels and for invisible pixels, and the hash mark '#' character for visible pixels. Omit leading and ...
  • MySQL中多表删除的方法如下:1、从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id2、从MySQL数据表t1里在...
  • 那使用sqlalchemy连接数据库查询数据 不想直接写sql语句 都是怎么写的? 我是这样写的: from sqlalchemy import sql session.query(User).order_by(sql.func.CONVERT(sql.literal_column('user_name USING gbk')))...
  • 游戏剧本怎么写by Matt Rothenberg 马特·罗森伯格(Matt Rothenberg) 我写了一本剧本来帮助设计师使用真实代码构建原型 (I wrote a playbook to help designers build prototypes using real code) I’ve built a ...
  • 按照微软官方文档了一个非托管的dll,https://docs.microsoft.com/zh-cn/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?view=vs-2019。 现在遇到的问题是想把类封装到dll中,但搞不定,...
  • As Peter's mother is aware that he doesn't like it very much, she has cooked a special soup using pasta pieces shaped like letters from the alphabet, numbers and other characters. She has a special ...
  • 应该怎么写 ``` section .text global _start ;must be declared for using gcc _start: ;tell linker entry point ;linux ;mov edx, len ;message length ;mov ecx, msg ;message to write ;mov ebx...
  • b) Every word in the specified set has a positive integer associated with it, indicating the score the submitter will get for using that word once. c) A word can be used in several different ways; ...
  • 我们知道模板加强了代码的复用性,那么模板参数为函数时的模板函数怎么写呢,下面介绍了普通函数为模板参数以及lambda函数为模板参数的模板的写法。 #include<iostream> #include<vector> using ...
  • using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.IO.Ports;using System.IO;using System.Xml;namespace lesson{public partial class SComA...
  • using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;...剩下的是上一张下一张的按钮,但是我不知道该怎么写,网上面的太乱了
  • c++中的指数函数怎么写

    万次阅读 2018-09-06 10:30:00
    C里面函数原型是double pow(double,double),需要包含math.h。 C++里面推荐这样用(包含ISO C++从C继承的数学函数库,但头文件不带.h扩展名且前面加c,需要用namespace std,...using namespace std; int main() { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,560
精华内容 624
关键字:

using怎么写