Ibatis的增删改查操作

来源:互联网 发布:淘宝云客服报名关闭 编辑:程序博客网 时间:2024/05/21 16:54

ibatis的移植性虽然没有hibernate那么强,但是很多方面hibernate是做不到的,ibatis的特点在于动态sql查询以及灵活性上面。升级版的mybatis同样在动态sql查询上下了不少功夫,如果对hibernate之类的东西厌倦了学习ibatis应该是个不错的选择。

1.ibatis程序需要的东西

数据库驱动必不可少,选择什么数据库无所谓,最重要的就是ibatis的jar包了

2.ibatis最主要的配置文件

<?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><settings cacheModelsEnabled="true" enhancementEnabled="true"lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"maxTransactions="5" useStatementNamespaces="false" /><transactionManager type="JDBC"><dataSource type="SIMPLE"><property name="JDBC.Driver" value="com.mysql.jdbc.Driver" /><property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/humansource" /><property name="JDBC.Username" value="root" /><property name="JDBC.Password" value="123456" /></dataSource></transactionManager><!-- 映射文件的相关配置 --><sqlMap resource="org/lxh/mapping/Role_sqlmap.xml" /></sqlMapConfig>

这个配置文件数据源的配置居多,最下面的sqlmap配置的是映射文件,数据源配置出错或者映射文件不对,程序就运行不起来


3.映射文件

我的建议是属性名称和数据库的列名相对应,另外ibatis的映射文件大部分都是sql语句,如果害怕写sql,那建议就不要学ibatis了

<?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="Role">    <resultMap id="resultMap" class="org.lxh.info.Role">  <result property="id" column="id"/>  <result property="name" column="name"/>  <result property="remark" column="remark"/>    </resultMap>    <!-- 添加角色 --><insert id="createRole" parameterClass="org.lxh.info.Role"> insert into m_role(name, remark)values(#name#,#remark#)  </insert><!-- 删除角色 --><delete id="deleteRole" parameterClass="int">  delete from m_role where id=#id#</delete><!-- 修改角色信息 --><delete id="updateRole" parameterClass="org.lxh.info.Role"> update m_role set remark=#remark# where id=#id#</delete><!-- 查询所有的角色信息 --><select id="findAll" resultMap="resultMap"> select * from m_role</select></sqlMap>

这个文件最前面的resultMap是返会的结果集的配置,这个地方主要在查询上面使用,ibatis会把结果集进行封装

4.领域模型文件

package org.lxh.info;public class Role {private Integer id;private String name;private String remark;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getRemark() {return remark;}public void setRemark(String remark) {this.remark = remark;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}}

ibatis的映射文件应该是比较好理解的,没有像hibernate那样另类有什么一对一对多配置一大把的,ibatis对增删改查都要很好额区别 如果是查询那标签就应该是select其他的以此类推


4.增删改查操作

package org.lxh.junit;import static org.junit.Assert.*;import java.io.Reader;import java.util.*;import org.junit.Test;import org.lxh.info.Role;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;public class TestIbatis {    //添加角色@Testpublic void testInsert() {try {Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);Role r = new Role();r.setName("系统维护人员");r.setRemark("--");sqlMap.insert("createRole", r);} catch (Exception e) {e.printStackTrace();}}    //删除角色@Testpublic void testDelete() {try {Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);sqlMap.delete("deleteRole", 3);} catch (Exception e) {e.printStackTrace();}}//修改角色@Testpublic void testUpdate() {try {Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);Role r=new Role();r.setId(2);r.setRemark("***");sqlMap.update("updateRole", r);} catch (Exception e) {e.printStackTrace();}}//查询角色信息@Testpublic void testSelect() {try {Reader reader = com.ibatis.common.resources.Resources.getResourceAsReader("DataSource.xml");SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);List<Role>all=sqlMap.queryForList("findAll");Iterator<Role> it=all.iterator();while(it.hasNext()){Role info=it.next();System.out.println(info.getName()+","+info.getId());}} catch (Exception e) {e.printStackTrace();}}}

有人会问ibatis可以写连接查询码,那是肯定的,可以参考下这个文章:

http://blog.csdn.net/walkcode/article/details/6929898

当然了如果要使用ibatis执行存储过程可以参考下面这篇文章

http://blog.csdn.net/walkcode/article/details/9318039

要了解ibatis动态sql可以看下面这个

http://blog.csdn.net/walkcode/article/details/8925435

0 0