導航:首頁 > 源碼編譯 > selectkey的源碼

selectkey的源碼

發布時間:2022-08-29 05:10:04

㈠ 求鍵盤的所有按鍵對應的JS函數~~~!!!!或者提供網頁鍵盤源代碼!!

$(window).keydown(function(event){
switch(event.keyCode) {
// ...
// 不同的按鍵可以做不同的事情
// 不同的瀏覽器的keycode不同
// 更多詳細信息: http://unixpapa.com/js/key.html
// ...
}
});
keycode 0 =
keycode 1 =
keycode 2 =
keycode 3 =
keycode 4 =
keycode 5 =
keycode 6 =
keycode 7 =
keycode 8 = BackSpace BackSpace
keycode 9 = Tab Tab
keycode 10 =
keycode 11 =
keycode 12 = Clear
keycode 13 = Enter
keycode 14 =
keycode 15 =
keycode 16 = Shift_L
keycode 17 = Control_L
keycode 18 = Alt_L
keycode 19 = Pause
keycode 20 = Caps_Lock
keycode 21 =
keycode 22 =
keycode 23 =
keycode 24 =
keycode 25 =
keycode 26 =
keycode 27 = Escape Escape
keycode 28 =
keycode 29 =
keycode 30 =
keycode 31 =
keycode 32 = space space
keycode 33 = Prior
keycode 34 = Next
keycode 35 = End
keycode 36 = Home
keycode 37 = Left
keycode 38 = Up
keycode 39 = Right
keycode 40 = Down
keycode 41 = Select
keycode 42 = Print
keycode 43 = Execute
keycode 44 =
keycode 45 = Insert
keycode 46 = Delete
keycode 47 = Help
keycode 48 = 0 equal braceright
keycode 49 = 1 exclam onesuperior
keycode 50 = 2 quotedbl twosuperior
keycode 51 = 3 section threesuperior
keycode 52 = 4 dollar
keycode 53 = 5 percent
keycode 54 = 6 ampersand
keycode 55 = 7 slash braceleft
keycode 56 = 8 parenleft bracketleft
keycode 57 = 9 parenright bracketright
keycode 58 =
keycode 59 =
keycode 60 =
keycode 61 =
keycode 62 =
keycode 63 =
keycode 64 =
keycode 65 = a A
keycode 66 = b B
keycode 67 = c C
keycode 68 = d D
keycode 69 = e E EuroSign
keycode 70 = f F
keycode 71 = g G
keycode 72 = h H
keycode 73 = i I
keycode 74 = j J
keycode 75 = k K
keycode 76 = l L
keycode 77 = m M mu
keycode 78 = n N
keycode 79 = o O
keycode 80 = p P
keycode 81 = q Q at
keycode 82 = r R
keycode 83 = s S
keycode 84 = t T
keycode 85 = u U
keycode 86 = v V
keycode 87 = w W
keycode 88 = x X
keycode 89 = y Y
keycode 90 = z Z
keycode 91 =
keycode 92 =
keycode 93 =
keycode 94 =
keycode 95 =
keycode 96 = KP_0 KP_0
keycode 97 = KP_1 KP_1
keycode 98 = KP_2 KP_2
keycode 99 = KP_3 KP_3
keycode 100 = KP_4 KP_4
keycode 101 = KP_5 KP_5
keycode 102 = KP_6 KP_6
keycode 103 = KP_7 KP_7
keycode 104 = KP_8 KP_8
keycode 105 = KP_9 KP_9
keycode 106 = KP_Multiply KP_Multiply
keycode 107 = KP_Add KP_Add
keycode 108 = KP_Separator KP_Separator
keycode 109 = KP_Subtract KP_Subtract
keycode 110 = KP_Decimal KP_Decimal
keycode 111 = KP_Divide KP_Divide
keycode 112 = F1
keycode 113 = F2
keycode 114 = F3
keycode 115 = F4
keycode 116 = F5
keycode 117 = F6
keycode 118 = F7
keycode 119 = F8
keycode 120 = F9
keycode 121 = F10
keycode 122 = F11
keycode 123 = F12
keycode 124 = F13
keycode 125 = F14
keycode 126 = F15
keycode 127 = F16
keycode 128 = F17
keycode 129 = F18
keycode 130 = F19
keycode 131 = F20
keycode 132 = F21
keycode 133 = F22
keycode 134 = F23
keycode 135 = F24
keycode 136 = Num_Lock
keycode 137 = Scroll_Lock
keycode 138 =
keycode 139 =
keycode 140 =
keycode 141 =
keycode 142 =
keycode 143 =
keycode 144 =
keycode 145 =
keycode 146 =
keycode 147 =
keycode 148 =
keycode 149 =
keycode 150 =
keycode 151 =
keycode 152 =
keycode 153 =
keycode 154 =
keycode 155 =
keycode 156 =
keycode 157 =
keycode 158 =
keycode 159 =
keycode 160 =
keycode 161 =
keycode 162 =
keycode 163 =
keycode 164 =
keycode 165 =
keycode 166 =
keycode 167 =
keycode 168 =
keycode 169 =
keycode 170 =
keycode 171 =
keycode 172 =
keycode 173 =
keycode 174 =
keycode 175 =
keycode 176 =
keycode 177 =
keycode 178 =
keycode 179 =
keycode 180 =
keycode 181 =
keycode 182 =
keycode 183 =
keycode 184 =
keycode 185 =
keycode 186 =
keycode 187 = acute grave
keycode 188 = comma semicolon
keycode 189 = minus underscore
keycode 190 = period colon
keycode 191 =
keycode 192 = numbersign apostrophe
keycode 193 =
keycode 194 =
keycode 195 =
keycode 196 =
keycode 197 =
keycode 198 =
keycode 199 =
keycode 200 =
keycode 201 =
keycode 202 =
keycode 203 =
keycode 204 =
keycode 205 =
keycode 206 =
keycode 207 =
keycode 208 =
keycode 209 =
keycode 210 = plusminus hyphen macron
keycode 211 =
keycode 212 = right registered
keycode 213 = guillemotleft guillemotright
keycode 214 = masculine ordfeminine
keycode 215 = ae AE
keycode 216 = cent yen
keycode 217 = questiondown exclamdown
keycode 218 = onequarter onehalf threequarters
keycode 219 =
keycode 220 = less greater bar
keycode 221 = plus asterisk asciitilde
keycode 222 =
keycode 223 =
keycode 224 =
keycode 225 =
keycode 226 =
keycode 227 = multiply division
keycode 228 = acircumflex Acircumflex
keycode 229 = ecircumflex Ecircumflex
keycode 230 = icircumflex Icircumflex
keycode 231 = ocircumflex Ocircumflex
keycode 232 = ucircumflex Ucircumflex
keycode 233 = ntilde Ntilde
keycode 234 = yacute Yacute
keycode 235 = oslash Ooblique
keycode 236 = aring Aring
keycode 237 = ccedilla Ccedilla
keycode 238 = thorn THORN
keycode 239 = eth ETH
keycode 240 = diaeresis cedilla currency
keycode 241 = agrave Agrave atilde Atilde
keycode 242 = egrave Egrave
keycode 243 = igrave Igrave
keycode 244 = ograve Ograve otilde Otilde
keycode 245 = ugrave Ugrave
keycode 246 = adiaeresis Adiaeresis
keycode 247 = ediaeresis Ediaeresis
keycode 248 = idiaeresis Idiaeresis
keycode 249 = odiaeresis Odiaeresis
keycode 250 = udiaeresis Udiaeresis
keycode 251 = ssharp question backslash
keycode 252 = asciicircum degree
keycode 253 = 3 sterling
keycode 254 = Mode_switch

鍵 代碼

Backspace {BACKSPACE}、{BS} 或 {BKSP}

Break {BREAK}

Caps Lock {CAPSLOCK}

Del 或 Delete {DELETE} 或 {DEL}

向下鍵 {DOWN}

End {END}

Enter {ENTER} 或 ~

Esc {ESC}

Help
{HELP}

Home
{HOME}

Ins 或 Insert
{INSERT} 或 {INS}

向左鍵
{LEFT}

Num Lock
{NUMLOCK}

Page Down
{PGDN}

Page Up
{PGUP}

Print Screen
{PRTSC}(保留供將來使用)

向右鍵
{RIGHT}

Scroll Lock
{SCROLLLOCK}

Tab
{TAB}

向上鍵
{UP}

F1
{F1}

F2
{F2}

F3
{F3}

F4
{F4}

F5
{F5}

F6
{F6}

F7
{F7}

F8
{F8}

F9
{F9}

F10
{F10}

F11
{F11}

F12
{F12}

F13
{F13}

F14
{F14}

F15
{F15}

F16
{F16}

數字鍵盤加號
{ADD}

數字鍵盤減號
{SUBTRACT}

數字鍵盤乘號
{MULTIPLY}

數字鍵盤除號
{DIVIDE}

若要指定與 Shift、Ctrl 和 Alt 鍵的任意組合一起使用的鍵,請在這些鍵代碼之前加上以下一段或多段代碼。

取余運算符 (%)

㈡ VB 計算器源代碼!

下面文本另存為Form1.frm,然後在VB中打開:

VERSION 5.00
Begin VB.Form Form1
BorderStyle = 1 'Fixed Single
Caption = "簡易計算器 V1.0"
ClientHeight = 5025
ClientLeft = 45
ClientTop = 375
ClientWidth = 4440
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 5025
ScaleWidth = 4440
StartUpPosition = 3 '窗口預設
Begin VB.Frame Frame1
Height = 4935
Left = 120
TabIndex = 0
Top = 0
Width = 4215
Begin VB.CommandButton cmdQuit
Caption = "Quit"
Height = 495
Left = 2160
TabIndex = 21
Top = 4080
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "4"
Height = 495
Index = 4
Left = 480
TabIndex = 20
Top = 1920
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "5"
Height = 495
Index = 5
Left = 1320
TabIndex = 19
Top = 1920
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "6"
Height = 495
Index = 6
Left = 2160
TabIndex = 18
Top = 1920
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "7"
Height = 495
Index = 7
Left = 480
TabIndex = 17
Top = 2640
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "8"
Height = 495
Index = 8
Left = 1320
TabIndex = 16
Top = 2640
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "9"
Height = 495
Index = 9
Left = 2160
TabIndex = 15
Top = 2640
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "0"
Height = 495
Index = 0
Left = 480
TabIndex = 14
Top = 3360
Width = 615
End
Begin VB.CommandButton cmdDecimal
Caption = "."
Height = 495
Left = 1320
TabIndex = 13
Top = 3360
Width = 615
End
Begin VB.CommandButton cmdOperator
Caption = "-"
Height = 495
Index = 2
Left = 3000
TabIndex = 12
Top = 1920
Width = 615
End
Begin VB.CommandButton cmdOperator
Caption = "*"
Height = 495
Index = 3
Left = 3000
TabIndex = 11
Top = 2640
Width = 615
End
Begin VB.CommandButton cmdOperator
Caption = "/"
Height = 495
Index = 4
Left = 3000
TabIndex = 10
Top = 3360
Width = 615
End
Begin VB.CommandButton cmdClear
Caption = "→"
Height = 495
Left = 480
TabIndex = 9
Top = 4080
Width = 615
End
Begin VB.CommandButton cmdClearEntry
Caption = "AC"
Height = 495
Left = 1320
TabIndex = 8
Top = 4080
Width = 615
End
Begin VB.CommandButton cmdEquals
Caption = "="
Height = 495
Left = 3000
TabIndex = 7
Top = 4080
Width = 615
End
Begin VB.CommandButton cmdPlusMinus
Caption = "-"
Height = 495
Left = 2160
TabIndex = 6
Top = 3360
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "1"
Height = 495
Index = 1
Left = 480
TabIndex = 5
Top = 1200
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "2"
Height = 495
Index = 2
Left = 1320
TabIndex = 4
Top = 1200
Width = 615
End
Begin VB.CommandButton cmdNumber
Caption = "3"
Height = 495
Index = 3
Left = 2160
TabIndex = 3
Top = 1200
Width = 615
End
Begin VB.CommandButton cmdOperator
Caption = "+"
Height = 495
Index = 1
Left = 3000
TabIndex = 2
Top = 1200
Width = 615
End
Begin VB.TextBox txtDisplay
Alignment = 1 'Right Justify
BeginProperty Font
Name = "Elephant"
Size = 14.25
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 495
Left = 360
TabIndex = 1
Top = 480
Width = 3375
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private StoredValue As Double

Private Const opNone = 0
Private Const opAdd = 1
Private Const opSubtract = 2
Private Const opMultiply = 3
Private Const opDivide = 4
Private Operator As Integer

Private NewEntry As Boolean

'刪除最後的字元
Private Sub DeleteCharacter()
Dim txt As String
Dim min_len As Integer

txt = txtDisplay.Text
If Left$(txt, 1) = "-" Then
min_len = 2
Else
min_len = 1
End If

If Len(txt) > min_len Then
txtDisplay.Text = Left$(txt, Len(txt) - 1)
Else
txtDisplay.Text = "0"
End If
End Sub

'清除最後一位
Private Sub cmdClear_Click()
If Len(txtDisplay.Text) > 0 Then txtDisplay.Text = Left(txtDisplay.Text, Len(txtDisplay.Text) - 1)
txtDisplay.SetFocus
End Sub

'清除顯示內容,保存運算符
Private Sub cmdClearEntry_Click()
txtDisplay.Text = ""
StoredValue = 0
Operator = opNone
txtDisplay.SetFocus
End Sub

' 顯示小數點
Private Sub cmdDecimal_Click()
If InStr(txtDisplay.Text, ".") Then
Beep
Else
If NewEntry Then
txtDisplay.Text = "."
NewEntry = False
Else
txtDisplay.Text = txtDisplay.Text & "."
End If
End If
txtDisplay.SetFocus
End Sub

'計算上一操作符的運算結果
Private Sub cmdEquals_Click()
Dim new_value As Double

If txtDisplay.Text = "" Then
new_value = 0
Else
new_value = CDbl(txtDisplay.Text)
End If
Select Case Operator
Case opNone
StoredValue = new_value
Case opAdd
StoredValue = StoredValue + new_value
Case opSubtract
StoredValue = StoredValue - new_value
Case opMultiply
StoredValue = StoredValue * new_value
Case opDivide
StoredValue = StoredValue / new_value
End Select
Operator = opNone
NewEntry = True
txtDisplay.Text = Format$(StoredValue)
txtDisplay.SetFocus
End Sub

' 顯示數字
Private Sub cmdNumber_Click(Index As Integer)
If NewEntry Then
txtDisplay.Text = Format$(Index)
NewEntry = False
Else
txtDisplay.Text = txtDisplay.Text & Format$(Index)
End If
txtDisplay.SetFocus
End Sub

Private Sub cmdOperator_Click(Index As Integer)
cmdEquals_Click
Operator = Index
NewEntry = True
txtDisplay.SetFocus
End Sub
'改變符號
Private Sub cmdPlusMinus_Click()
If NewEntry Then
txtDisplay.Text = "-"
ElseIf Left$(txtDisplay.Text, 1) = "-" Then
txtDisplay.Text = Right$(txtDisplay.Text, 2)
Else
txtDisplay.Text = "-" & txtDisplay.Text
End If
txtDisplay.SetFocus
End Sub

'處理鍵盤按鍵
Private Sub Form_KeyPress(KeyAscii As Integer)
txtDisplay_KeyPress KeyAscii
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
txtDisplay_KeyUp KeyCode, Shift
End Sub

Private Sub txtDisplay_Change()
txtDisplay.SelStart = Len(txtDisplay.Text)
End Sub

Private Sub txtDisplay_GotFocus()
txtDisplay_Change
End Sub

Private Sub txtDisplay_KeyPress(KeyAscii As Integer)
Dim ch As String

ch = Chr$(KeyAscii)
Select Case ch
Case "0"
cmdNumber_Click 0
Case "1"
cmdNumber_Click 1
Case "2"
cmdNumber_Click 2
Case "3"
cmdNumber_Click 3
Case "4"
cmdNumber_Click 4
Case "5"
cmdNumber_Click 5
Case "6"
cmdNumber_Click 6
Case "7"
cmdNumber_Click 7
Case "8"
cmdNumber_Click 8
Case "9"
cmdNumber_Click 9
Case "*", "x", "X"
cmdOperator_Click opMultiply
Case "+"
cmdOperator_Click opAdd
Case vbCrLf, vbCr, "="
cmdEquals_Click
Case "-"
cmdOperator_Click opSubtract
Case "."
cmdDecimal_Click
Case "/"
cmdOperator_Click opDivide
Case "C", "c"
cmdClearEntry_Click
End Select

KeyAscii = 0
End Sub

Private Sub txtDisplay_KeyUp(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyNumpad0
cmdNumber_Click 0
Case vbKeyNumpad1
cmdNumber_Click 1
Case vbKeyNumpad2
cmdNumber_Click 2
Case vbKeyNumpad3
cmdNumber_Click 3
Case vbKeyNumpad4
cmdNumber_Click 4
Case vbKeyNumpad5
cmdNumber_Click 5
Case vbKeyNumpad6
cmdNumber_Click 6
Case vbKeyNumpad7
cmdNumber_Click 7
Case vbKeyNumpad8
cmdNumber_Click 8
Case vbKeyNumpad9
cmdNumber_Click 9
Case vbKeyMultiply
cmdOperator_Click opMultiply
Case vbKeyAdd
cmdOperator_Click opAdd
Case vbKeySeparator
cmdEquals_Click
Case vbKeySubtract
cmdOperator_Click opSubtract
Case vbKeyDecimal
cmdDecimal_Click
Case vbKeyDivide
cmdOperator_Click opDivide
Case vbKeyBack, vbKeyDelete
DeleteCharacter
End Select
KeyCode = 0
End Sub

㈢ 初看Mybatis 源碼 SQL是怎麼執行的

一條sql語句到底是怎麼執行的?我們知道Mybatis其實是對JDBC的一個封裝。假如我執行
session.update("com.mybatis..AuthUserDao.updateAuthUserEmailByName", [email protected]);

語句,追蹤下來,Executor、 BaseStatementHandler等等。在 SimpleExecutor 中有如下代碼:
public int doUpdate(MappedStatement ms, Object parameter) throws SQLException {
Statement stmt = null;
try {
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(this, ms, parameter, RowBounds.DEFAULT, null, null);
stmt = prepareStatement(handler, ms.getStatementLog());
return handler.update(stmt);
} finally {
closeStatement(stmt);
}
}

1. 首先獲取相關配置信息,這個在初始化時,從配置文件中解析而來
2. 新建了一個handler
3. 做了執行statement之前的准備工作。看看準備了些什麼,跟蹤代碼,最後進入了DataSource類的doGetConnection方法,該方法做如下操作:
private Connection doGetConnection(Properties properties) throws SQLException {
initializeDriver();
Connection connection = DriverManager.getConnection(url, properties);
configureConnection(connection);
return connection;
}

private synchronized void initializeDriver() throws SQLException {
if (!registeredDrivers.containsKey(driver)) {
Class<?> driverType;
try {
if (driverClassLoader != null) {
driverType = Class.forName(driver, true, driverClassLoader);
} else {
driverType = Resources.classForName(driver);
}
// DriverManager requires the driver to be loaded via the system ClassLoader.
// http://www.kfu.com/~nsayer/java/dyn-jdbc.html
Driver driverInstance = (Driver)driverType.newInstance();
DriverManager.registerDriver(new DriverProxy(driverInstance));
registeredDrivers.put(driver, driverInstance);
} catch (Exception e) {
throw new SQLException("Error setting driver on UnpooledDataSource. Cause: " + e);
}
}
}

原來是通過prepareStatement 來執行了 我們初始化jdbc的操作。Class.forName DriverManager.getConnection. 這兩步是在這裡面完成的。
4. 將執行sql的部分交給handler

繼續跟蹤handler 可以看到SimpleStatementHandler 中。如下執行這個update語句
public int update(Statement statement)
throws SQLException {
String sql = boundSql.getSql();
Object parameterObject = boundSql.getParameterObject();
KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();
int rows;
if (keyGenerator instanceof Jdbc3KeyGenerator) {
statement.execute(sql, Statement.RETURN_GENERATED_KEYS);
rows = statement.getUpdateCount();
keyGenerator.processAfter(executor, mappedStatement, statement, parameterObject);
} else if (keyGenerator instanceof SelectKeyGenerator) {
statement.execute(sql);
rows = statement.getUpdateCount();
keyGenerator.processAfter(executor, mappedStatement, statement, parameterObject);
} else {
statement.execute(sql);
rows = statement.getUpdateCount();
}
return rows;
}

這邊就完成了statement的操作,整個過程就是我們Jdbc的過程。原來真的就是對JDBC的簡單封裝。

其實Mybatis的整個執行過程,理解起來分為如下幾個過程:
1. 載入配置文件
2. 解析配置文件,從配置文件中解析出來 datasource、mapper文件、事務配置等等。將配置信息保存在對象內
3. 調用相關語句,執行sql。在執行的方法中分別完成JDBC的一系列操作。

㈣ 關於mybatis selectKey的問題

看你的xml,貌似是order的問題。
order的屬性
1:BEFORE,會先選擇主鍵,然後設置keyProperty,再執行insert語句;2:AFTER,就先運行insert 語句再運行selectKey 語句。

㈤ mybatis 自動生成的mapper能修改嗎

最近使用到了generator生成代碼。主要用來生成DO,DAO,*Mapper.xml。由於僅需要其生成一些基本的公用的sql操作行為(增刪改查更一個方法),而且命名也需要自己的規范,所以修改了一些源碼記錄下來,用於備忘。
使用的版本為1.3.2。主要記錄:
1.org/mybatis/generator/api/IntrospectedTable.java類:
calculateJavaClientAttributes方法修改DAO類名;
calculateModelAttributes方法修改DO類名;
calculateXmlAttributes方法修改DAO中方法名和Mapper.xml中的sql標簽id。
2.org/mybatis/generator/codegen/mybatis3/javamapper/JavaMapperGenerator.java類:
getCompilationUnits方法修改DAO類中的方法,主要是刪除了一個insert方法和一個update方法
3.org/mybatis/generator/codegen/mybatis3/xmlmapper/XMLMapperGenerator.java類:
getSqlMapElement方法修改Mapper.xml中sql,主要是刪除了和DAO對應的一個insert和一個update
4.org/mybatis/generator/codegen/mybatis3/xmlmapper/elements/.java類:
addElements方法,修改insert sql的生成格式。mysql中如果表主鍵是自增加的,則每次插入返回自增ID。

[java] view plain
//get the auto_increment primary key value
sb.append("<selectKey resultType=\"java.lang.Integer\" order=\"AFTER\" keyProperty=\"id\">");
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
sb.append(" SELECT LAST_INSERT_ID() AS id ");
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
sb.append("</selectKey>");
answer.addElement(new TextElement(sb.toString()));
sb.setLength(0);
sb.append("insert into "); //$NON-NLS-1$

4.的補充。經過驗證,4是錯誤的。其實mybatis的generator提供了該方法的可配置性。

[html] view plain
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
就會自動生成selectKey標簽;

其次4的方式返回值只是成功與否的狀態,不是自增主鍵。只不過採用了這種方式之後自增主鍵會被mybatis賦給DO,這樣可以直接使用DO.getId()得到插入後的主鍵。
與selectKey標簽具有相同效果的還有另外一種方式,這個方式的配置:

[html] view plain
<generatedKey column="id" sqlStatement="JDBC" identity="true"/>

5.因為generator生成的mapper.xml文件和DAO的java類放在了同級目錄。我會一次性生成多個表的,這樣粘貼起來很不舒服。所以改了源碼,將所有生成的mapper文件放到新建的mapper目錄中。
在org.mybatis.generator.api.MyBatisGenerator類中的generate方法中修改:

[java] view plain
for (GeneratedXmlFile gxf : generatedXmlFiles) {
projects.add(gxf.getTargetProject());

File targetFile;
String source;
try {
File directory = shellCallback.getDirectory(gxf
.getTargetProject(), gxf.getTargetPackage());
//make the xml file location changed
File mapDirec = new File(directory.getAbsolutePath()+"/mapper");
if(!mapDirec.exists()){
mapDirec.mkdir();
}
targetFile = new File(mapDirec, gxf.getFileName());
if (targetFile.exists()) {
if (gxf.isMergeable()) {
source = XmlFileMergerJaxp.getMergedSource(gxf,
targetFile);
} else if (shellCallback.isOverwriteEnabled()) {
source = gxf.getFormattedContent();
warnings.add(getString("Warning.11", //$NON-NLS-1$
targetFile.getAbsolutePath()));
} else {
source = gxf.getFormattedContent();
targetFile = getUniqueFileName(directory, gxf
.getFileName());
warnings.add(getString(
"Warning.2", targetFile.getAbsolutePath())); //$NON-NLS-1$
}
} else {
source = gxf.getFormattedContent();
}
} catch (ShellException e) {
warnings.add(e.getMessage());
continue;
}

callback.checkCancel();
callback.startTask(getString(
"Progress.15", targetFile.getName())); //$NON-NLS-1$
writeFile(targetFile, source, "UTF-8"); //$NON-NLS-1$
}

更改的地方是:

[java] view plain
//make the xml file location changed
File mapDirec = new File(directory.getAbsolutePath()+"/mapper");
if(!mapDirec.exists()){
mapDirec.mkdir();
}
targetFile = new File(mapDirec, gxf.getFileName());

這樣即可實現。

㈥ 鏈接到第幾頁的跳轉按鈕,跳轉不到指定頁面,虛心請求指教!

<input type='submit' class='contents' value='跳轉' name='cndok'>這是一個提交功能的按鈕,提交的什麼。

給你一個源碼,自己臨時寫的,希望對你有用。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>

<body>
<label>跳轉第
<select name="List" id="List">
<option value="http://www.163.com">1</option>
<option value="http://www.126.com">2</option>
</select>

<input type="button" name="button" onclick="javascript:window.location.href=document.getElementById('List').options[document.getElementById('List').selectedIndex].value" id="button" value="跳" />
</label>
</body>
</html>

㈦ mybatis mysql 資料庫 insert 插入數據返回主鍵

parameterType String?
那你selectKey獲得的id放在哪個對象里呢?
parameterType應該是一個model對象,有id和content兩個屬性才對

㈧ 怎麼沒有mybatis源碼解析相關的文檔

我們還記得是這樣配置sqlSessionFactory的:
[java] view plain
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:configuration.xml"></property>
<property name="mapperLocations" value="classpath:com/xxx/mybatis/mapper/*.xml"/>
<property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />
</bean>
這里配置了一個mapperLocations屬性,它是一個表達式,sqlSessionFactory會根據這個表達式讀取包com.xxx.myts.mapper下面的所有xml格式文件,那麼具體是怎麼根據這個屬性來讀取配置文件的呢?
答案就在SqlSessionFactoryBean類中的buildSqlSessionFactory方法中:

[java] view plain
if (!isEmpty(this.mapperLocations)) {
for (Resource mapperLocation : this.mapperLocations) {
if (mapperLocation == null) {
continue;
}

try {
XMLMapperBuilder xmlMapperBuilder = new XMLMapperBuilder(mapperLocation.getInputStream(),
configuration, mapperLocation.toString(), configuration.getSqlFragments());
xmlMapperBuilder.parse();
} catch (Exception e) {
throw new NestedIOException("Failed to parse mapping resource: '" + mapperLocation + "'", e);
} finally {
ErrorContext.instance().reset();
}

if (logger.isDebugEnabled()) {
logger.debug("Parsed mapper file: '" + mapperLocation + "'");
}
}
}

mybatis使用XMLMapperBuilder類的實例來解析mapper配置文件。
[java] view plain
public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
this(new XPathParser(reader, true, configuration.getVariables(), new XMLMapperEntityResolver()),
configuration, resource, sqlFragments);
}

[java] view plain
private XMLMapperBuilder(XPathParser parser, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
super(configuration);
this.builderAssistant = new MapperBuilderAssistant(configuration, resource);
this.parser = parser;
this.sqlFragments = sqlFragments;
this.resource = resource;
}
接著系統調用xmlMapperBuilder的parse方法解析mapper。

[java] view plain
public void parse() {
//如果configuration對象還沒載入xml配置文件(避免重復載入,實際上是確認是否解析了mapper節點的屬性及內容,
//為解析它的子節點如cache、sql、select、resultMap、parameterMap等做准備),
//則從輸入流中解析mapper節點,然後再將resource的狀態置為已載入
if (!configuration.isResourceLoaded(resource)) {
configurationElement(parser.evalNode("/mapper"));
configuration.addLoadedResource(resource);
bindMapperForNamespace();
}
//解析在configurationElement函數中處理resultMap時其extends屬性指向的父對象還沒被處理的<resultMap>節點
parsePendingResultMaps();
//解析在configurationElement函數中處理cache-ref時其指向的對象不存在的<cache>節點(如果cache-ref先於其指向的cache節點載入就會出現這種情況)
parsePendingChacheRefs();
//同上,如果cache沒載入的話處理statement時也會拋出異常
parsePendingStatements();
}

mybatis解析mapper的xml文件的過程已經很明顯了,接下來我們看看它是怎麼解析mapper的:
[java] view plain
private void configurationElement(XNode context) {
try {
//獲取mapper節點的namespace屬性
String namespace = context.getStringAttribute("namespace");
if (namespace.equals("")) {
throw new BuilderException("Mapper's namespace cannot be empty");
}
//設置當前namespace
builderAssistant.setCurrentNamespace(namespace);
//解析mapper的<cache-ref>節點
cacheRefElement(context.evalNode("cache-ref"));
//解析mapper的<cache>節點
cacheElement(context.evalNode("cache"));
//解析mapper的<parameterMap>節點
parameterMapElement(context.evalNodes("/mapper/parameterMap"));
//解析mapper的<resultMap>節點
resultMapElements(context.evalNodes("/mapper/resultMap"));
//解析mapper的<sql>節點
sqlElement(context.evalNodes("/mapper/sql"));
//使用XMLStatementBuilder的對象解析mapper的<select>、<insert>、<update>、<delete>節點,
//myts會使用MappedStatement.Builder類build一個MappedStatement對象,
//所以myts中一個sql對應一個MappedStatement
buildStatementFromContext(context.evalNodes("select|insert|update|delete"));
} catch (Exception e) {
throw new BuilderException("Error parsing Mapper XML. Cause: " + e, e);
}
}
configurationElement函數幾乎解析了mapper節點下所有子節點,至此myts解析了mapper中的所有節點,並將其加入到了Configuration對象中提供給sqlSessionFactory對象隨時使用。這里我們需要補充講一下myts是怎麼使用XMLStatementBuilder類的對象的parseStatementNode函數借用MapperBuilderAssistant類對象builderAssistant的addMappedStatement解析MappedStatement並將其關聯到Configuration類對象的:

[java] view plain
public void parseStatementNode() {
//ID屬性
String id = context.getStringAttribute("id");
//databaseId屬性
String databaseId = context.getStringAttribute("databaseId");

if (!databaseIdMatchesCurrent(id, databaseId, this.requiredDatabaseId)) {
return;
}
//fetchSize屬性
Integer fetchSize = context.getIntAttribute("fetchSize");
//timeout屬性
Integer timeout = context.getIntAttribute("timeout");
//parameterMap屬性
String parameterMap = context.getStringAttribute("parameterMap");
//parameterType屬性
String parameterType = context.getStringAttribute("parameterType");
Class<?> parameterTypeClass = resolveClass(parameterType);
//resultMap屬性
String resultMap = context.getStringAttribute("resultMap");
//resultType屬性
String resultType = context.getStringAttribute("resultType");
//lang屬性
String lang = context.getStringAttribute("lang");
LanguageDriver langDriver = getLanguageDriver(lang);

Class<?> resultTypeClass = resolveClass(resultType);
//resultSetType屬性
String resultSetType = context.getStringAttribute("resultSetType");
StatementType statementType = StatementType.valueOf(context.getStringAttribute("statementType", StatementType.PREPARED.toString()));
ResultSetType resultSetTypeEnum = resolveResultSetType(resultSetType);

String nodeName = context.getNode().getNodeName();
SqlCommandType sqlCommandType = SqlCommandType.valueOf(nodeName.toUpperCase(Locale.ENGLISH));
//是否是<select>節點
boolean isSelect = sqlCommandType == SqlCommandType.SELECT;
//flushCache屬性
boolean flushCache = context.getBooleanAttribute("flushCache", !isSelect);
//useCache屬性
boolean useCache = context.getBooleanAttribute("useCache", isSelect);
//resultOrdered屬性
boolean resultOrdered = context.getBooleanAttribute("resultOrdered", false);

// Include Fragments before parsing
XMLIncludeTransformer includeParser = new XMLIncludeTransformer(configuration, builderAssistant);
includeParser.applyIncludes(context.getNode());

// Parse selectKey after includes and remove them.
processSelectKeyNodes(id, parameterTypeClass, langDriver);

// Parse the SQL (pre: <selectKey> and <include> were parsed and removed)
SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass);
//resultSets屬性
String resultSets = context.getStringAttribute("resultSets");
//keyProperty屬性
String keyProperty = context.getStringAttribute("keyProperty");
//keyColumn屬性
String keyColumn = context.getStringAttribute("keyColumn");
KeyGenerator keyGenerator;
String keyStatementId = id + SelectKeyGenerator.SELECT_KEY_SUFFIX;
keyStatementId = builderAssistant.applyCurrentNamespace(keyStatementId, true);
if (configuration.hasKeyGenerator(keyStatementId)) {
keyGenerator = configuration.getKeyGenerator(keyStatementId);
} else {
//useGeneratedKeys屬性
keyGenerator = context.getBooleanAttribute("useGeneratedKeys",
configuration.isUseGeneratedKeys() && SqlCommandType.INSERT.equals(sqlCommandType))
? new Jdbc3KeyGenerator() : new NoKeyGenerator();
}

builderAssistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass,
resultSetTypeEnum, flushCache, useCache, resultOrdered,
keyGenerator, keyProperty, keyColumn, databaseId, langDriver, resultSets);
}
由以上代碼可以看出myts使用XPath解析mapper的配置文件後將其中的resultMap、parameterMap、cache、statement等節點使用關聯的builder創建並將得到的對象關聯到configuration對象中,而這個configuration對象可以從sqlSession中獲取的,這就解釋了我們在使用sqlSession對資料庫進行操作時myts怎麼獲取到mapper並執行其中的sql語句的問題。

㈨ asp+sql怎麼用復選框批量刪除

給你個例子:
<%dim selectm,selectkey,selectbookid
selectkey=trim(request(trim("selectkey")))
selectm=trim(request("selectm"))
if selectkey="" then
selectkey=request.QueryString("selectkey")
end if
if selectkey="請輸入關鍵字" then
selectkey=""
end if
'//刪除商品
if selectm="" then
selectm=request.QueryString("selectm")
end if
selectbookid=request("selectbookid")
if selectbookid<>"" then
conn.execute "delete from wq_books where bookid in ("&selectbookid&")"
response.Redirect "managebook.asp"
response.End
end if
%>

<form name="form1" method="post" action="">
............
<input name="selectbookid" type="checkbox" id="selectbookid" value="<%=rs("bookid")%>">

全選
<input type="checkbox" name="checkbox" value="Check All" onClick="mm()">
<input type="submit" class=button name="Submit" value=" 刪 除 " onClick="return test();">

<script>
function test()
{
if(!confirm('確認刪除嗎?')) return false;
}
</script>
<script language=javascript>
function mm()
{
var a = document.getElementsByTagName("input");
if(a[0].checked==true){
for (var i=0; i<a.length; i++)
if (a[i].type == "checkbox") a[i].checked = false;
}
else
{
for (var i=0; i<a.length; i++)
if (a[i].type == "checkbox") a[i].checked = true;
}
}
</script>

關鍵是在sql中使用 in

閱讀全文

與selectkey的源碼相關的資料

熱點內容
手機號碼如何加密 瀏覽:424
沈陽程序員培訓學校 瀏覽:538
一般伺服器如何配置 瀏覽:895
圖片怎樣加密發郵件 瀏覽:619
萬虹電腦文件夾密碼忘記了怎麼辦 瀏覽:631
rc108單片機 瀏覽:867
戰雷如何改變伺服器 瀏覽:674
mactelnet命令 瀏覽:51
壓縮袋壓縮了拿出來 瀏覽:401
安卓手機相機怎麼設置許可權 瀏覽:121
美女程序員轉行做主播 瀏覽:671
辦理解壓房產 瀏覽:575
道路工程概論pdf 瀏覽:389
超棒數學速演算法大全 瀏覽:937
小米易語言登錄源碼 瀏覽:31
磚牆內加密鋼筋 瀏覽:993
鄉關何處pdf 瀏覽:84
小豬領贊小程序源碼 瀏覽:336
python曲線如何原路返回 瀏覽:432
pdf快速看圖破解版 瀏覽:295