Spring与Ibatis整合入门

Ibatis作为一个将java对象与sql中的数据进行映射的工具,可以将一个应用中常用的sql操作抽象为模版,在应用后续与数据库的交互中,将输入sql语句简化为更改一部分参数。

ibatis整合到springmvc项目中包括以下的内容:

1. 创建一个与数据表相对应的java简单对象POJO

例如:我们的数据表结构如下:

相应的,我们创建一个java对象AttendDO:

public class AttendDO {

    private String username;

    private Date attendTime;

    private int type;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getAttendTime() {
        return attendTime;
    }

    public void setAttendTime(Date attendTime) {
        this.attendTime = attendTime;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }
}

注意:所有属性必须添加相应的get和set函数,因为ibatis会将数据写入到创建的AttendDO对象中。

2. 在spring的配置文件中增加ibatis需要的配置文件

ibatis主要完成以下两件事:

  • 根据JDBC规范建立与数据库的连接
  • 通过反射打通Java对象与数据库数据交互之间相互转化的关系

———摘自《深入分析Java Web技术内幕》

我们新建一个配置文件applicationContext.xml文件(名称没有限制)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <context:component-scan base-package="com.HG.test"/>
    <!-- 扫描java文件,将所有注解标示的类注册为bean -->

    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </bean>

    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:sqlMapConfig.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

前面提到,ibatis共有两大任务,而applicationContext.xml包括了所有ibatis的配置信息。

其中,dataSource配置了与数据库交互的所有信息,这些信息在配置文件jdbc.properties中。

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/Attendance
username = root
password = 910718

而另一项任务:将java对象与数据库的数据进行关联,则在sqlMapClient中进行配置。

sqlMapClientFactoryBean是一个产生sqlMapClient的工厂,而sqlMapClient中存放的最主要的信息包括configLocation和dataSource,其中dataSource用来链接数据库,而configLocation中存放了另一个ibatis重要的配置文件,我们这里将该文件起名为sqlMapConfig.xml。首先给结论:configLocation中存放了有关数据表和java对象映射的内容。

<?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>
    <!-- 这里可以写多个实体的映射文件 -->
    <sqlMap resource="sqlmap-attend.xml"/>
</sqlMapConfig>
其中,sqlMapConfig中写入相应的映射文件,这个映射就表示了一张数据表与相应的java对象的映射关系。
sqlmap-attend.xml如下:
<?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>
    <!-- 为AttendDO设置一个别名 -->
    <typeAlias alias="AttendDO" type="com.HG.test.pojo.AttendDO"/>

    <!--   配置对象和数据表之间的映射关系   -->
    <resultMap id="attendDO" class="AttendDO">
        <result property="username" column="username" />
        <result property="attendTime" column="attendTime" />
        <result property="type" column="type" />
    </resultMap>

    <insert id="insert_attend" parameterClass="AttendDO">
        <![CDATA[
            insert into attend(username, attendTime, type) values(#username#, #attendTime#, #type#)
        ]]>
    </insert>

    <select id="select_attend_time" parameterClass="java.util.Map" resultMap="attendDO">
        <![CDATA[
            select * from attend where attendTime BETWEEN #startTime# AND #endTime#
        ]]>
    </select>
</sqlMap>

有关sqlmap配置的技巧,已经有很多博客详细写了,我就不在赘述了。贴出链接:

http://wangchongbiao.iteye.com/blog/1544667

http://www.cnblogs.com/lcngu/p/5122940.html

上述文件给出了数据表中每个数据和attendDO中的每个成员变量的映射关系,同时给出了相应的sql语句模版。

回过头,我们看applicationContext.xml文件,文件中包含了配置数据库连接、数据表和java对象映射关系以及相应的sql语句模版三个功能。

到此为止,所有ibatis的配置内容介绍完毕,最后只需要将总的配置文件applicationContext.xml文件在spring的配置文件中进行配置即可:

在dispatcher-servlet.xml中:

<import resource="classpath:applicationContext.xml"/>

3.dao层

spring项目的dao层一般用来与数据库进行交互。下面为AttendDaoImpl.java

@Component
public class AttendDaoImpl extends SqlMapClientDaoSupport implements AttendDAO {
    @Resource(name = "sqlMapClient")
    private SqlMapClient sqlMapClient;
    @PostConstruct
    public void initSqlMapClient(){
        super.setSqlMapClient(sqlMapClient);
    }

    @Override
    public boolean insert_attend(AttendDO attendDO) {
        Object result = getSqlMapClientTemplate().insert("insert_attend", attendDO);
        return result != null ? true:false;
    }

    @Override
    public List<AttendDO> select_byTime(Date startTime, Date endTime) {
        Map<String, Date> timeMap = new HashMap<String, Date>();
        timeMap.put("startTime", startTime);
        timeMap.put("endTime", endTime);
        List<AttendDO> result = getSqlMapClientTemplate().queryForList("select_attend_time", timeMap);
        return result;
    }

    @Override
    public List<AttendDO> select_byUser(String username, Date startTime, Date endTime) {
        return null;
    }

    @Override
    public List<List<AttendDO>> select_ALLUser(Date startTime, Date endTime) {
        return null;
    }
}

上面一段代码中,首先要将配置文件中的sqlMapClient的bean实例化传给SqlMapClientDaoSupport。

以select_byTime()函数为例,首先,为了传递两个参数,构造一个map结构作为入参。之后getSqlMapClientTemplate()函数由beanfactory构造了一个SqlMapClientTemplate的实例。由于程序配置的sqlMapClient在开始已经写入到本类中,所以生成的sqlMapClient都具有相同的配置信息。之后,调用其queryForList()函数,该函数由两个参数,第一个参数为对应的sqlMap文件中sql模版的id,第二个参数为为sql模版传递的参数。在执行了查询操作后,会将结果集返回,返回的类型也在sqlMap中由resultMap配置项进行了规定。

4.测试

直接贴代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value="classpath:applicationContext.xml")
public class AttendDAOTest {
    @Resource
    private AttendDaoImpl attendDaoImpl;

    @Test
    public void selectTest() throws ParseException
    {
        SimpleDateFormat sim=new SimpleDateFormat("yyyy-MM-dd");
        Date startTime = sim.parse("2016-09-12");
        Date endTime = sim.parse("2016-09-17");
        List<AttendDO> list = attendDaoImpl.select_byTime(startTime, endTime);
        for(int i = 0; i<list.size();i++)
        {
            System.out.println(list.get(i).getUsername() + "  " +list.get(i).getAttendTime() + "  " +list.get(i).getType());
        }
    }
}

  

时间: 2024-11-05 18:44:48

Spring与Ibatis整合入门的相关文章

spring+struts2+ibatis整合

与spring+springmvc+ibatis相比,只需作相应的修改即可完成框架的整合.具体配置如下: web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" x

spring+springmvc+ibatis整合小结

最近在整合Spring和ibatis时,不管applicationContext.xml放在哪儿,在web.xml中怎么配置,tomcat启动时始终报applicationContext.xml的错.后来查资料后才发现之前的web.xml配置文件没有在<context-param>中指定applicationContext.xml的路径.原来tomcat在加载web.xml时会优先加载<context-param>和<listener>,之后才加载<servlet

spring+springmvc+ibatis整合注解方式实例

需求说明 实现用户通过数据库验证登录需求,采用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,只建立单张用户表T_USER,表结构如下: 字段名称 数据类型 字段描述 ID int 用户编号 USERNAME VARCHAR 用户名 PASSWORD VARCHAR 用户登录密码 sql语句如下: CREATE TABLE `t_user` ( `ID` int(11) NOT NULL auto_increment, `

spring mvc+ibatis+mysql的组合框架入门实例demo源码下载

原文:spring mvc+ibatis+mysql的组合框架入门实例demo源码下载 源代码下载地址:http://www.zuidaima.com/share/1550463678958592.htm spring mvc+ibatis+mysql的组合框架实例 首页 http://localhost:端口/项目/index.jsp 添加用户 添加地址 项目截图 jar包截图

SpringMVC入门学习(三)+Spring应用(整合)

在整合之前我们再来回顾一下Spring和SpringMVC Spring: Spring框架的核心是提供了一个容器,该容器可以对Bean组件进行管理,例如创建Bean对象,销毁一个Bean对象等操作.此外该容器还具有IOC和AOP高级特性,将Bean对象调用解耦. SpringMVC: spring mvc是类似于struts的一个MVC开源框架,其实都是属于spring,spring mvc需要有spring的jar包作为支撑才能跑起来 Spring和SpringMVC整合不再需要拷jar包,

Struts+Spring+Hibernate整合入门详解

标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRING&HIBERNATE(12) Java 5.0 Struts 2.0.9 spring 2.0.6 hibernate 3.2.4 作者:  Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念       Struts:作为基于 MVC 模式的 Web 应用最经典框架,两个项目

spring cloud 入门系列八:使用spring cloud sleuth整合zipkin进行服务链路追踪

好久没有写博客了,主要是最近有些忙,今天忙里偷闲来一篇. =======我是华丽的分割线========== 微服务架构是一种分布式架构,微服务系统按照业务划分服务单元,一个微服务往往会有很多个服务单元,一个请求往往会有很多个单元参与,一旦请求出现异常,想要去定位问题点真心不容易,因此需要有个东西去跟踪请求链路,记录一个请求都调用了哪些服务单元,调用顺序是怎么样的以及在各个服务单元处理的时间长短.常见的服务链路追踪组件有google的dapper.twitter的zipkin.阿里的鹰眼等,它们

Spring Boot:整合MyBatis框架

综合概述 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录.MyBatis是一款半ORM框架,相对于Hibernate这样的完全ORM框架,MyBatis显得更加灵活,因为可以直接控制SQL语句,所

九 spring和mybatis整合

1       spring和mybatis整合 1.1     整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理. 1.2     整合环境 创建一个新的java工程(接近实际开发的工程结构) jar包: mybatis3.2.7的jar包 spring3.2.