iBatis最棒的特点就是它的简洁,这也是唯一令它在任何数据库程序中更容易使用的原因.iBatis使得通过Java或者任何其它的Microsoft的程序来使用数据库变得非常简单.本章我们将会通过一个例子向你介绍如何向数据库插入一行数据.我们使用MySQL作为本例的数据库,和我们上一章中使用的是一样的.这是"Contact"表和我们上一章使用过的两个文件:"Contact.java"和"SqlMapConfig.xml"
Contact.java
public class Contact {
? private String firstName;
??private String lastName;??
??private String email;?
??private int id;
?
? public Contact() {}
?
??public Contact(
??? String firstName,
??? String lastName,
??? String email) {
??? this.firstName = firstName;
??? this.lastName = lastName;
??? this.email = email;
??? }
?
??public String getEmail() {
??? return email;
? }
? public void setEmail(String email) {
??? this.email = email;
? }
? public String getFirstName() {
??? return firstName;
? }
? public void setFirstName(String firstName) {
??? this.firstName = firstName;
? }
? public int getId() {
??? return id;
? }
? public void setId(int id) {
??? this.id = id;
? }
? public String getLastName() {
??? return lastName;
? }
? public void setLastName(String lastName) {
??? this.lastName = lastName;
? }
}
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
?
<sqlMapConfig>
?? <settings useStatementNamespaces="true"/>
???? <transactionManager type="JDBC">
??????? <dataSource type="SIMPLE">
????????? <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
????????? <property name="JDBC.ConnectionURL"
?????????????? value="jdbc:mysql://192.168.10.112:3306/vin"/>
????????? <property name="JDBC.Username" value="root"/>
????????? <property name="JDBC.Password" value="root"/>
??????? </dataSource>
????? </transactionManager>
???? <sqlMap resource="Contact.xml"/>
</sqlMapConfig>
我们使用<insert>标签来映射SQL语句,在该标签中我们定义了一个"id",它将在IbatisInsertion.java文件中用来执行数据库插入,查询操作.
<selectKey resultClass="int" keyProperty="id">
?? select last_insert_id() as id
</selectKey>
上面的代码指出了表中被插入数据的下一行.
Contact.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
?
<sqlMap namespace="Contact">
<!--- Inserting data in table -->
?
<insert id="insert" parameterClass="Contact">
?????????? insert into contact (firstName,lastName,email)
?????????? values (#firstName#, #lastName#, #email#)
?????????? <selectKey resultClass="int" keyProperty="id">
??????????????? select last_insert_id() as id
?????????? </selectKey>
</insert>
<!--- Showing all data of table -->
<select id="getAll" resultClass="Contact">
?????? select * from contact
</select>
</sqlMap>
IbatisInsertion.java的代码如下 :
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import java.io.*;
import java.sql.SQLException;
import java.util.*;
?
public class IbatisInsertion{
? public static void main(String[] args) throws IOException,SQLException{
???? Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
????? SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
????? //Inserting one record in contacts
????? System.out.println(
???? "*-------------- Inserting information in Contact Table -----------*");
????? Contact contact=new Contact("Amit","Kumar","amit@roseindia.net");
????? sqlMap.insert("Contact.insert",contact);
????? System.out.println("|Record Inserted Successfully ");
????? System.out.println("All Contacts");
????? List<Contact> contacts = (List<Contact>)
??????? sqlMap.queryForList("Contact.getAll",null);
??????? Contact contactall = new Contact();
????? for (Contact c : contacts) {
????? System.out.print("? " + c.getId());
????? System.out.print("? " + c.getFirstName());
????? System.out.print("? " + c.getLastName());
????? System.out.print("? " + c.getEmail());
??????? contact = c;
??????System.out.println("");
??? }
????? System.out.println("===============================================");
????? }???
}
如何执行本例 :
1.创建Contact.java并将其编译
2.创建Contact.xml和SqlMapConfig.xml
3.创建IbatisInsertion.java
4.执行IbatisInsertion类文件,结果将在你的命令提示符上输出如下 :
"Record Inserted Successfully"