spring系列之3--iBATIS的使用

我们已经对接了数据库,目前缺少ORM,我们采用iBATIS来实现ORM。

一、目录结构

talk is cheap,先看看我们项目的目录结构:


二、ORM类

我们先建立三个文件:

1.Person类:存放与数据库中表字段的对应关系,以及set、get方法

2.PersonDAO接口:对数据库表的操作功能

3.PersonDAOImpl类:实现PersonDAO接口

public class Person implements Serializable {
    private static final long serialVersionUID = -517413165963030507L;

    private int id;
    private String name;
    private int sex;

    /**
     * create table person(id int primary key, name varchar(10), sex int);
     */

    public Person(){

    }

    public Person(int id,String name,int sex){
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getSex() {
        return sex;
    }

    public void setSex(int sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return"id=" + id + "\tname=" + name + "\tsex=" + sex;
    }

}
public interface PersonDAO {
    public boolean insertPerson(Person person);   //添加
    public boolean deleteById(int id);            //删除
    public List<Person> queryAllPerson();         //查询全部
}

public class PersonDAOImpl extends SqlMapClientDaoSupport implements PersonDAO {

    @Override
    public boolean insertPerson(Person person) {
        getSqlMapClientTemplate().insert("insertPerson",person);
        return false;
    }

    @Override
    public boolean deleteById(int id) {
        getSqlMapClientTemplate().delete("deleteById", id);
        return false;
    }

    @Override
    public List<Person> queryAllPerson() {
        List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");
        return persons;
    }
}
三、配置文件
1.引入ibatis的sqlmap包,在pom.xml中加入:
    <dependency>
      <groupId>org.apache.ibatis</groupId>
      <artifactId>ibatis-sqlmap</artifactId>
      <version>2.3.4.726</version>
    </dependency>
2.spring-core.xml文件里加入ibatis sql map定义:
    <!-- iBatis SQL map定义 -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:/sql-map-config.xml"/>
    </bean>

    <bean id="personDAOImpl" class="com.alibaba.druid.model.PersonDAOImpl">
        <!-- dataSource不是必需 -->
        <property name="dataSource">
            <ref local="dataSource" />
        </property>

        <!-- sqlMapClient必需 -->
        <property name="sqlMapClient">
            <ref local="sqlMapClient"/>
        </property>
    </bean>

    <!-- transactionManager不是必需  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref local="dataSource" />
        </property>
    </bean>
3.第2步中涉及到sql-map-config.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>
    <!--此处一定不能有<settings/> 标签-->
    <!--<settings   cacheModelsEnabled="true"-->
                 <!--enhancementEnabled="true"-->
                 <!--lazyLoadingEnabled="true"-->
                 <!--errorTracingEnabled="true"-->
                 <!--maxRequests="32"-->
                 <!--maxSessions="10"-->
                 <!--maxTransactions="5"-->
                 <!--useStatementNamespaces="false" />-->

    <sqlMap resource="person.xml" />

</sqlMapConfig>
4.第3步中涉及到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>
    <typeAlias alias="Person" type="com.alibaba.druid.model.Person" />

    <insert id="insertPerson" parameterClass="Person">
        <![CDATA[
               insert into person values (#id#,#name#,#sex#) 
           ]]>
    </insert>

    <delete id="deleteById" parameterClass="int">
        <![CDATA[
               delete from person where id=#id# 
            ]]>
    </delete>

    <update id="updatePerson" parameterClass="Person">
        <![CDATA[
                   update person set name=#name#,sex=#sex# where id=#id# 
             ]]>
    </update>

    <select id="queryById" parameterClass="int" resultClass="Person">
        <![CDATA[
                  select * from person where id=#id# 
             ]]>
    </select>

    <select id="queryAllPerson" cacheModel="personCache" resultClass="Person">
        <![CDATA[
                   select * from person 
             ]]>
    </select>
</sqlMap>
四、测试
新建一个测试类,测试数据库连通性:
public class PersonDAOImplTest {
    private static ApplicationContext applicationContext;   //提供静态ApplicationContext
    private static PersonDAOImpl personDAOImpl;

    static{
        applicationContext = new ClassPathXmlApplicationContext("spring-core.xml");
        personDAOImpl = (PersonDAOImpl)applicationContext.getBean("personDAOImpl");
    }
    //添加操作
    @Test
    public void testInsertPerson(){
        personDAOImpl.insertPerson(new Person(1,"zhangsan",2));
    }

    //删除操作
    @Test
    public void testDeletePerson(){
        personDAOImpl.deleteById(1);
    }

    //查询全部
    @Test
    public void testQueryAllPerson(){
        List<Person> persons = personDAOImpl.queryAllPerson();
        //System.out.println(persons.size());
        Iterator<Person> ite = persons.iterator();
        while(ite.hasNext()){
            Person person = ite.next();
            System.out.println(person);
        }
    }
}






 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值