mybatis使用示例

来源:互联网 发布:wish产品优化 编辑:程序博客网 时间:2024/06/03 21:26

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

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 ROWCOUNTFROM 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_USERWHERE 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 rowCountFROM SYSTEM_USER tWHERE 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);    }}

0 0
原创粉丝点击