ibatis调用mysql进行数据库操作实例
iBatis是个像Hibernate, JDO,EJB一类的数据持久框架,它能将对象映射为SQL语句.它是个轻量级的框架并且持久性API适合持久化POJO.iBatis也与Hibernate, JDO不同,因为它使用存储过程和现有的SQL来处理数据库.
以下例子显示了如何创建ibatis例子及执行查询插入删除更新调用存储过程的过程。
1在mysql数据库中创建一个数据库ibatisdata及数据库表person及一个存储过程showData,创建代码如下
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for person -- ---------------------------- DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(16) DEFAULT NULL, `passwd` varchar(16) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ---------------------------- -- Procedure structure for showData -- ---------------------------- DROP PROCEDURE IF EXISTS `showData`; DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `showData`() BEGIN select * from Person; END;; DELIMITER ;
-- ---------------------------- -- Records -- ---------------------------- INSERT INTO `person` VALUES ('1', 'zhang', null); |
2 在myeclipse中创建一个java project,然后通过右击项目-properties-java build path-libraries –add external jars ,导入ibatis及mysql-connector jar包;
然后创建 Person.java类,即对应数据库中person表的POJO类。
为了映射配置我们需要创建SqlMapConfig.xml(类似于hibernate中的hibernate.cfg.xml文件)来指定如下信息:针对映射语句的命名空间前缀、我们数据库使用jdbc进行访问及访问驱动、链接url、链接用户名密码、对应的SQL语句描述文件等信息。
创建SqlMap映射文件Person.xml负责程序执行的SQL语句(相当于Hibernate的映射文件 *.hbm.xml,只是它的映射不靠POJO的属性到数据库字段的一一映射,靠的是Sql语句,所以谓之 SqlMap, 注意每条语句中参数的写法)等。
创建一个获取SqlMapClient的工厂类,相当于MyEclipse为Hibernate应用程序生成的HibernateSessionFactory类。
创建测试类ClientTest.java来测试数据库一系列操作。
创建完目录结构如下图所示
Person.java
package com.yan; public class Person { public Integer id; public String name; public String passwd; public Person() { super(); } public Person(Integer id) { super(); this.id = id; } public Integer getId() { return id; } public String getName() { return name; } public String getPasswd() { return passwd; } public void setId(Integer id) { this.id = id; } public void setPasswd(String passwd) { this.passwd = passwd; } public void setName(String name2) { this.name = name2; } } |
SqlMapConfig.java
package com.yan; import java.io.Reader; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; public class SqlMapConfig { private static final SqlMapClient sqlMap; static { try { String resource = "SqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("Error initializing MyAppSqlConfig class. Cause: " + e); } } public static SqlMapClient getSqlMapInstance() { return sqlMap; } } |
SqlMapConfig.xml
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig>
<!-- SqlMap的环境属性配置 --> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />
<!-- 配置SqlMap的连接池属性,默认使用SimpleDataSource实现--> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /> <property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/ibatisdata" /> <property name="JDBC.Username" value="root" /> <property name="JDBC.Password" value="123456" /> </dataSource> </transactionManager>
<!-- SqlMap的映射文件 --> <sqlMap resource="com/yan/Person.xml" /> </sqlMapConfig> |
Person.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="Person"> <!-- 传入包装类型(Integer)参数,查询到结果集组装成一个Person对象返回 --> <select id="getPerson" parameterClass="int" resultClass="com.yan.Person"> SELECT ID as id, NAME as name, PASSWD as passwd FROM PERSON WHERE ID = #value# </select>
<!-- 插入一条Person对应的记录到数据库中 --> <insert id="insertPerson" parameterClass="com.yan.Person"> INSERT INTO PERSON (ID, NAME, PASSWD) VALUES (#id#,#name#, #passwd#) </insert>
<!-- 关联ID更新一条Person记录到数据库中 --> <update id="updatePerson" parameterClass="com.yan.Person"> UPDATE PERSON SET NAME = #name#, PASSWD = #passwd# WHERE ID = #id# </update>
<!-- 根据ID从数据库中删除一条Person记录 --> <delete id="deletePerson" parameterClass="com.yan.Person"> DELETE FROM PERSON WHERE ID = #id# </delete>
<!-- 调用存储过程 --> <procedure id="storedinfo" resultClass="com.yan.Person" > {call showData()} </procedure> </sqlMap> |
ClientTest.java
package com.yan;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient; public class ClientTest { public static void main(String[] args) throws Exception { SqlMapClient sqlMap = SqlMapConfig.getSqlMapInstance(); // as coded above
Integer personPk = new Integer(1);//根据id查找Person Person person = (Person) sqlMap.queryForObject("getPerson", personPk); System.out.println(person.getName());
person.setName("yan"); sqlMap.update("updatePerson",person);//更新Person
person.setId(7); sqlMap.insert("insertPerson",person);//插入新的Person
sqlMap.delete("deletePerson", person);//根据id删除Person
List<Person> persons=sqlMap.queryForList("storedinfo",null);//调用存储过程,查询出所有的Person for(Person p:persons){ System.out.println("id:"+p.getId()+" name :"+p.getName()+" pwd:"+p.getPasswd()); } } } |
阅读更多
- visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库
- Node.js 连接 MySQL 并进行数据库操作
- 使用MYSQL对数据库,表进行一些简单的CRUD操作
- [iOS][更新]iOS开发数据库操作之SQLite及Mysql操作实例
- node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作
- PHP MySQL 连接数据库,进行增、删、改、查、操作
- PHP MYSQL对数据库进行添加、修改、删除等一系列操作
- C#连接操作 MySQL 数据库实例(使用官方驱动)
- jsp连接mysql对数据库进行操作乱码的解决
- NodeJs针对Express框架配置Mysql进行数据库操作
- Django+mysql配置与简单操作数据库实例
- visual c++ 2008进行MySQL编程(ODBC) --(二) CDatabase操作数据库
- 安装mysql并通过mybatis进行数据库操作
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
- Python对MySQL进行update之后必须要commit,数据库的数据操作才会真正生效
- Mysql 数据库 基本操作以及调用(一)
- mysql 利用二进制日志来进行恢复数据的实例操作
- jsp程序向调用mysql语句操作数据库传中文出现乱码
- mysql 数据库的操作实例