设为首页 加入收藏

TOP

通向架构师的道路(第二十天)万能框架spring(二)maven结合spring与ibatis(四)
2018-03-14 09:00:25 】 浏览:844
Tags:通向 架构 师的 道路 第二十 万能 框架 spring maven 结合 ibatis
ml这2个xml文件。

看到这儿,有人会问了:为什么不把这两个xml文件也建立在spring目录下?

原因很简单:

在datasource.xml文件内我们已经通过

<bean id="iBatisSessionFactory" class="org.sky.ssi.ibatis.IBatis3SQLSessionFactoryBean" scope="singleton">

    <property name="configLocation" value="sqlmap.xml"></property>

    <property name="dataSource" ref="dataSource"></property>

</bean>

这样的方式把iBatis委托给了spring,iBatis的核心就是这个sqlmap.xml文件了,而在这个sqlmap.xml文件已经引用了login.xml与index.xml文件了。

而我们的web.xml文件里有这么一句:

<context-param>

    <param-name>contextConfigLocation</param-name>

    <param-value>/WEB-INF/classes/spring/**/*.xml</param-value>

</context-param>

因此如果我们再把ibatis/index.xml与ibatis/login.xml再建立到src/main/resources/spring目录下,spring于是会在容器启动时试图加载这两个xml文件,然后一看这两个xml文件不是什么spring的bean,直接抛错,对吧?

其们等一会再来看login.xml文件与index.xml文件,我们先来搞懂iBatis调用原理.

3.4 iBatis调用原理

1)iBatis就是一个dao层,它又被称为sqlmapping,它的sql是书写在一个.xml文件内的,在该xml文件内会将相关的sql绑定到相关的dao类的方法。

2)在调用结束时我们需要在finally块中关闭相关的sql调用。

我们来看一个例子。

login.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"

"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="org.sky.ssi.dao.LoginDAO">

    <select id="validLogin" resultType="int" parameterType="java.util.Map">

        <![CDATA[

        SELECT count(1) from t_login where login_id= #{loginId} and login_pwd=#{loginPwd}

        ]]>

    </select>

</mapper>

该DAO指向了一个接口org.sky.ssi.dao.LoginDAO,该dao接受一个sql,并且接受一个Map类型的参数。

那么我们来看该DAO

LoginDao.java

package org.sky.ssi.dao;

import java.util.Map;

public interface LoginDAO {

    public int validLogin(Map<String, Object> paraMap) throws Exception;

}

LoginImpl.java

package org.sky.ssi.dao.impl;


import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import org.sky.ssi.dao.LoginDAO;

import org.sky.ssi.ibatis.IBatisDAOSupport;

import org.springframework.stereotype.Repository;
 

@Repository

public class LoginDAOImpl extends IBatisDAOSupport<LoginDAO> implements LoginDAO {

    public int validLogin(Map<String, Object> paraMap) throws Exception {

        SqlSession session = this.getSqlSession();

        try {

            return this.getMapper(LoginDAO.class, session).validLogin(paraMap);

        } catch (Exception e) {

            log.error(e.getMessage(), e);

            throw new Exception(e);

        } finally {

            this.closeSqlSession(session);

        }

    }

}

很简单吧,一切逻辑都在xml文件内。

一定记得不要忘了在finally块中关闭相关的sql调用啊,要不然将来工程出了OOM的错误不要怪我啊.

3.5 index模块

Index.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"

"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="org.sky.ssi.dao.StudentDAO">

    <select id="getAllStudent" resultType="org.sky.ssi.dbo.StudentDBO">
首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇使用 partclone 备份磁盘分区 下一篇使用foremost恢复已删除文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目