如何使用ibatis对数据库增删改查?
一个使用ibatis对数据库增删改查的例子:
这里用的开发环境是:Eclipse3.2+mysql5.0.20,ibatis包是ibatis-common-2.jar, ibatis-dao-2.jar,ibatis-sqlmap-2.jar,mysql包是mysql-connector-java-5.0.3-bin.jar. 步骤: 1.创建数据库: create database itcast; use itcast; 创建表: create table student ( id int primary key auto_increment, firstname varchar(20) not null, lastname varchar(20) not null )2.创建POJO类,Student.java,此程序中用到的所有类都放在cn.itcast包下面,
其他的配置文件都放在txd.configfile包下面。 package cn.itcast; public class Student { private Integer id; private String firstname; private String lastname; public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastname() { return lastname; } public void setLastname(String lastname) { this.lastname = lastname; } }3.跟Student类对应的xml配置文件Student.xml,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="student"> <!--insert元素,id属性值作为标识此元素,parameterClass属性是参数的类型,此 属性的值是Java类的全限定名(即包括类的包名)。它是可选的,但强烈建议使用。 它的目的是限制输入参数的类型为指定的Java类,并优化框架的性能。##符号中 间的名字来自此类的属性.--> <insert id="insert_student" parameterClass="cn.itcast.Student"> insert into student(firstname,lastname) values (#firstname#,#lastname#) </insert> <select id="getStudent" resultClass="cn.itcast.Student"> select id, firstname, lastname from student </select> <delete id="delStudent" parameterClass="int"> delete from student where id=#value# </delete> <update id="updateStudent" parameterClass="cn.itcast.Student"> update student set firstname=#firstname#,lastname=#lastname# where id=#id# </update> </sqlMap>4.jdbc.properties文件,存储数据库连接的driver,url,username,password等信息,
driver=com.mysql.jdbc.Driver url=jdbc:mysql:///itcast username=root password=5. SqlMap的配置文件SqlMapConfigExample.xml,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!--<properties>元素,用于在配置文件中使用标准的Java属性文件(name=value)--> <properties resource="txd/configfile/jdbc.properties" /> <!-- cacheModelsEnabled:全局性地启用或禁用SqlMapClient的所有缓存model。 enhancementEnabled:全局性地启用或禁用运行时字节码增强,以优化访问 Java Bean属性的性能,同时优化延迟加载的性能。 lazyLoadingEnabled:全局性地启用或禁用SqlMapClient的所有延迟加载。 maxRequests:同时执行SQL语句的最大线程数。 maxSessions:同一时间内活动的最大session数。 maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。 useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。 Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。 --> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <!-- <transationManager>元素让您为SQL Map配置事务管理服务。属性type指定所 使用的事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。 包含在框架的三个事务管理器分别是:JDBC,JTA和EXTERNAL。 --> <transactionManager type="JDBC"> <!--dataSource元素为SQL Map数据源设置了一系列参数。--> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="${driver}" /> <property name="JDBC.ConnectionURL" value="${url}" /> <property name="JDBC.Username" value="${username}" /> <property name="JDBC.Password" value="${password}" /> </dataSource> </transactionManager> <!--<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。--> <sqlMap resource="txd/configfile/Student.xml" /> </sqlMapConfig>6.MySqlMapClient.java类,用于产生一个SqlMapClient
package cn.itcast; import java.io.IOException; import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class MySqlMapClient { private static SqlMapClient sqlMapClient; static { String resource = "txd/configfile/SqlMapConfigExample.xml"; Reader reader = null; try { reader = Resources.getResourceAsReader(resource); sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (IOException e) { e.printStackTrace(); } } public static SqlMapClient getSqlMapInstance() { return sqlMapClient; } }7.StudentManager 类测试一下上面的代码,
package cn.itcast; import java.sql.SQLException; import java.util.List; import com.ibatis.sqlmap.client.SqlMapClient; public class StudentManager { public static void main(String[] args) { SqlMapClient sqlMap = MySqlMapClient.getSqlMapInstance(); // insert一条记录 // Student student = new Student(); // student.setFirstname("zhang"); // student.setLastname("san"); // try { // sqlMap.insert("insert_student", student); // System.out.println("插入成功!"); // } catch (SQLException e) { // e.printStackTrace(); // } // delete一条记录 // try { // int result = sqlMap.delete("delStudent", 5); // System.out.println(result); // } catch (SQLException e) { // e.printStackTrace(); // } // update一条已存在的记录 Student student = new Student(); student.setId(1); student.setFirstname("jiang"); student.setLastname("zemin"); try { int result = sqlMap.update("updateStudent", student); System.out.println(result); } catch (SQLException e) { e.printStackTrace(); } // query获得多条记录 // try { // List<Student> list = sqlMap.queryForList("getStudent", null); // for (Student student : list) { // System.out // .println(student.getId() + "/t" // + student.getFirstname() + "/t" // + student.getLastname()); // } // } catch (SQLException e) { // e.printStackTrace(); // } // query单条记录 // try { // Student student = (Student) sqlMap.queryForObject("getStudent", 1); // System.out.println(student.getId()); // System.out.println(student.getFirstname()); // System.out.println(student.getLastname()); // } catch (SQLException e) { // e.printStackTrace(); // } } }