ibatis使用示例

下面的代码只是个人在练习ibatis的使用,如果发现有什么错误,请指出,不胜感激。

1、数据库,我这里使用的是MySQL数据库,首先在数据库中新建一个表,并插入适当的数据。

 

#新建表
DROP TABLE IF EXISTS SYSTEM_USER;

CREATE TABLE SYSTEM_USER (
    #创建一个带自增长的ID列
    SYSUSER_ID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    CONSTRAINT SYSTEM_USER_PK PRIMARY KEY(SYSUSER_ID),
    SYSUSER_NAME VARCHAR(50),
    CONSTRAINT SYSTEM_USER_UK UNIQUE(SYSUSER_NAME),
    SYSUSER_PASSWORD VARCHAR(50) NOT NULL, 
    EFFECTIVE_DATE TIMESTAMP NOT NULL  DEFAULT CURRENT_TIMESTAMP,
    EXPIRE_DATE TIMESTAMP DEFAULT '2037-01-01 00:00:00'
    );

#设置自增长的开始值
ALTER TABLE SYSTEM_USER AUTO_INCREMENT = 10001;
    
#插入数据
INSERT INTO SYSTEM_USER(SYSUSER_NAME, SYSUSER_PASSWORD) VALUES(
    'USER1',
    'USER11');
    
INSERT INTO SYSTEM_USER(SYSUSER_NAME, SYSUSER_PASSWORD) VALUES(
    'USER2',
    'USER22');
    
INSERT INTO SYSTEM_USER(SYSUSER_NAME, SYSUSER_PASSWORD) VALUES(
    'USER3',
    'USER33');

COMMIT;


2、新建一个java工程,将需要的jar包导入工程,我这里使用的两个jar包是:ibatis-2.3.0.677.jar,mysql-connector-java-5.1.6-bin.jar。

3、在工程src目录下(后面的配置文件我都放在这个目录下面),新建一个jdbc.properties文件,填写数据库的配置。

 

jdbc.driverClassName=com.mysql.jdbc.Driver
#数据库的IP地址,端口号,数据库的名称
jdbc.url=jdbc:mysql://localhost:3306/laosan
#用户名
jdbc.username=root
#密码
jdbc.password=520


4、新建一个SqlMapConfig.xml文件,填写ibatis的主要配置,我上一篇文章中专门介绍了ibatis配置文件的写法,这里不再重复,有需要的朋友可以在我博客中找找。

 

<?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>
	<properties resource="jdbc.properties" />

	<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="20" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="false" />

	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="${jdbc.driverClassName}" />
			<property name="JDBC.ConnectionURL" value="${jdbc.url}" />
			<property name="JDBC.Username" value="${jdbc.username}" />
			<property name="JDBC.Password" value="${jdbc.password}" />
		</dataSource>
	</transactionManager>

	<sqlMap resource="testSql.xml" />

</sqlMapConfig>


5、新建一个testSql.xml文件,填写在映射关系和SQL等等,关于这种文件的写法,在上一篇文章中同样有介绍。

 

<?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="TestSQL">

	<typeAlias alias="test" type="com.zlc.model.TestModel" />

	<resultMap id="testResult" class="test">
		<result property="id" column="SYSUSER_ID" />
		<result property="name" column="SYSUSER_NAME" />
		<result property="password" column="SYSUSER_PASSWORD" />
		<result property="effDate" column="EFFECTIVE_DATE" />
		<result property="expDate" column="EXPIRE_DATE" />
		<result property="rowCount" column="ROWCOUNT" />
	</resultMap>

	<select id="testSelectAll" resultMap="testResult"
		parameterClass="test">
	<![CDATA[
		SELECT t.*,
	]]>
		(
		SELECT COUNT(*) FROM SYSTEM_USER
		) AS ROWCOUNT
		FROM SYSTEM_USER t
	</select>

	<update id="testUpdate" parameterClass="test">
		UPDATE SYSTEM_USER t
		<dynamic prepend="set">
			<isNotEmpty prepend="and" property="name"> t.SYSUSER_NAME
				= #name#
			</isNotEmpty>
			<isNotEmpty prepend="," property="password">
				t.SYSUSER_PASSWORD=#password#
			</isNotEmpty>
			<isNotEmpty prepend="," property="effDate">
				t.effective_date=#effDate#
			</isNotEmpty>
			<isNotEmpty prepend="," property="expDate">
				t.EXPIRE_DATE=#expDate#
			</isNotEmpty>
		</dynamic>
		<dynamic prepend="where">
			<isNotEmpty prepend="and" property="id"> t.SYSUSER_ID = #id#
			</isNotEmpty>
		</dynamic>
	</update>

	<insert id="testInsert" parameterClass="test">
		INSERT INTO SYSTEM_USER
		(SYSUSER_NAME, SYSUSER_PASSWORD, EFFECTIVE_DATE, EXPIRE_DATE)
		VALUES
		(#name#, #password#, #effDate#, #expDate#);
	</insert>

	<delete id="testDelete" parameterClass="int">
		DELETE FROM SYSTEM_USER
		WHERE SYSUSER_ID = #id#
	</delete>

	<sql id="test_condition_sql">
		<isNotEmpty prepend="and" property="effDate">
			t.EFFECTIVE_DATE =
			#effDate#
		</isNotEmpty>
		<isNotEmpty prepend="and" property="expDate">
			t.EXPIRE_DATE =
			#expDate#
		</isNotEmpty>
	</sql>

	<sql id="test_count_sql">
		SELECT COUNT(1) FROM SYSTEM_USER t WHERE 1 = 1
		<include refid="test_condition_sql" />
	</sql>

	<select id="testSelectForPage" parameterClass="test" resultMap="testResult">
  	<![CDATA[ 
    		SELECT t.*, 
		]]>
		(
		<include refid="test_count_sql" />
		) as rowCount
		FROM SYSTEM_USER t
		WHERE 1 = 1
		<include refid="test_condition_sql" />
	</select>
</sqlMap>


6、写一个模型类。

 

/**=================================================
 * 版权:laosan版权所有
 * 包名:com.zlc.model
 * 文件:TestModel.java
 * 日期:2014-12-22 下午2:16:08
 * 作者:laosan
 * 说明:ibatis模型类
 *==================================================*/
package com.zlc.model;

import java.sql.Timestamp;

/**
 * @ClassName TestModel
 * @Description ibatis模型类
 * 
 * @author laosan
 * @date 2014-12-22 下午2:16:08
 */
public class TestModel
{
    private Integer id;
    private String name;
    private String password;
    private Timestamp effDate;
    private Timestamp expDate;
    private Integer rowCount;

    public Integer getId()
    {
        return id;
    }

    public void setId(Integer id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    public Timestamp getEffDate()
    {
        return effDate;
    }

    public void setEffDate(Timestamp effDate)
    {
        this.effDate = effDate;
    }

    public Timestamp getExpDate()
    {
        return expDate;
    }

    public void setExpDate(Timestamp expDate)
    {
        this.expDate = expDate;
    }

    public Integer getRowCount()
    {
        return rowCount;
    }

    public void setRowCount(Integer rowCount)
    {
        this.rowCount = rowCount;
    }

    @Override
    public String toString()
    {
        return "TestModel [id=" + id + ", name=" + name + ", password=" + password + ", effDate="
                + effDate + ", expDate=" + expDate + ", rowCount=" + rowCount + "]";
    }
    
}


7、写一个接口,这里主要是为了接近项目中的一般写法为进行这些步骤,因为只是练习,所以没有将异常的处理考虑进来。

 

/**=================================================
 * 版权:laosan版权所有
 * 包名:com.zlc.dao
 * 文件:TestDao.java
 * 日期:2014-12-22 下午2:14:34
 * 作者:laosan
 * 说明:练习ibatis
 *==================================================*/
package com.zlc.dao;

import java.util.List;

import com.zlc.model.TestModel;

/**
 * @ClassName TestDao
 * @Description DAO层接口
 * 
 * @author laosan
 * @date 2014-12-22 下午2:14:34
 */
public interface TestDao
{
    /**
     * @MethodName addData
     * @Description 增加数据
     * 
     * @author laosan
     * @date 2014-12-22 下午2:20:38
     * @param model
     */
    void addData(TestModel model);
    
    /**
     * @MethodName deleteById
     * @Description 删除数据
     * 
     * @author laosan
     * @date 2014-12-22 下午2:21:10
     * @param id
     */
    void deleteById(Integer id);
    
    /**
     * @MethodName updateDate
     * @Description 修改数据
     * 
     * @author laosan
     * @date 2014-12-22 下午2:22:03
     * @param model
     */
    void updateDate(TestModel model);
    
    /**
     * @MethodName queryAll
     * @Description 查询所有数据
     * 
     * @author laosan
     * @date 2014-12-22 下午2:24:00
     * @return
     */
    List<TestModel> queryAll();
    
    /**
     * @MethodName queryByConditionAndPages
     * @Description 根据条件分页查询
     * 
     * @author laosan
     * @date 2014-12-22 下午2:25:25
     * @param model
     * @param pages
     * @param pageSize
     * @return
     */
    List<TestModel> queryByConditionAndPages(TestModel model, int pages, int pageSize);
}


8、实现第7步的接口。

 

/**=================================================
 * 版权:laosan版权所有
 * 包名:com.zlc.dao.ibatis
 * 文件:TestDaoIbatis.java
 * 日期:2014-12-22 下午2:28:31
 * 作者:laosan
 * 说明:DAO实现层
 *==================================================*/
package com.zlc.dao.ibatis;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.zlc.dao.TestDao;
import com.zlc.model.TestModel;

/**
 * @ClassName TestDaoIbatis
 * @Description DAO实现层
 * 
 * @author laosan
 * @date 2014-12-22 下午2:28:31
 */
public class TestDaoIbatis implements TestDao
{
    private static SqlMapClient sqlMapClient = null;

    // 读取ibatis配置文件
    // 其实使用ibatis,只要掌握了下面的这部分静态代码块,使用起来就非常简单。
    static
    {
        try
        {
            Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    @Override
    public void addData(TestModel model)
    {
        try
        {
            sqlMapClient.insert("testInsert", model);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

    }

    @Override
    public void deleteById(Integer id)
    {
        try
        {
            sqlMapClient.delete("testDelete", id);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

    }

    @Override
    public void updateDate(TestModel model)
    {
        try
        {
            sqlMapClient.update("testUpdate", model);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }

    }

    @SuppressWarnings("unchecked")
    @Override
    public List<TestModel> queryAll()
    {
        List<TestModel> results = null;
        try
        {
            results = sqlMapClient.queryForList("testSelectAll");
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return results;
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<TestModel> queryByConditionAndPages(TestModel model, int pages, int pageSize)
    {
        List<TestModel> results = null;
        try
        {
            int skip = (pages - 1) * pageSize;
            results = sqlMapClient.queryForList("testSelectForPage", model, skip, pageSize);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        return results;
    }

}


9、代码已经完成了,最后写一个测试类进行测试。

 

/**=================================================
 * 版权:laosan版权所有
 * 包名:com.zlc.test
 * 文件:Test.java
 * 日期:2014-12-22 下午3:22:31
 * 作者:laosan
 * 说明:测试类
 *==================================================*/
package com.zlc.test;

import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

import com.zlc.dao.TestDao;
import com.zlc.dao.ibatis.TestDaoIbatis;
import com.zlc.model.TestModel;

/**
 * @ClassName Test
 * @Description 测试类
 * 
 * @author laosan
 * @date 2014-12-22 下午3:22:31
 */
public class Test
{

    public static void main(String[] args)
    {
        TestDao dao = new TestDaoIbatis();

        // 插入数据
        // TestModel model = new TestModel();
        // model.setName("testName01");
        // model.setPassword("TestName01");
        // model.setEffDate(new Timestamp(new Date().getTime()));
        // dao.addData(model);

        // 删除数据
        // dao.deleteById(Integer.valueOf(10001));

        // 修改数据
        // TestModel model = new TestModel();
        // model.setId(Integer.valueOf(10002));
        // model.setName("updateName");
        // model.setExpDate(new Timestamp(new Date().getTime()));
        // dao.updateDate(model);

        // 查询全部数据
        // List<TestModel> results = dao.queryAll();
        // System.out.println(results);

        // 分页查询数据
        TestModel model = new TestModel();
        List<TestModel> resultsList = dao.queryByConditionAndPages(model, 2, 2);
        System.out.println(resultsList);
    }

}

 

你可能感兴趣的:(ibatis)