Spring集成MyBatis的使用-使用SqlSessionTemplate

Spring集成MyBatis的使用

Spring集成MyBatis,早期是使用SqlSessionTemplate,当时并没有用Mapper映射器,既然是早期,当然跟使用Mapper映射器是存在一些区别的,比如映射文件命名空间不需要跟接口名一样,接口中的方法不一定跟sql的id一样,通过它的SqlSessionTemplate的使用,在具体实现类中可以实现找到对应的sql

Spring-Mybatis集成方式二-使用SqlSessionTemplate

step1 导包:spring-webmvc,mybatis,mybatis-spring,dbcp,ojdbc,spring-jdbc,junit

同Mapper映射器中的配置方式

step2 添加Spring配置文件,不再需要Mybatis的配置文件,可以在Spring配置文件中,添加SqlSessionFactoryBean来代替,且不需要配置MapperScannerConfigurer,而是配置SqlSessionTemplate

<?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" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jee="http://www.springframework.org /schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">    

        <!-- 配置连接池 -->
        <!-- 读取属性文件 -->
        <util:properties id="db" location="classpath:config.properties">
        </util:properties>
        <!-- 配置连接池,可以参考DBUtil的方法,这里采用spring创建连接池-->
        <!-- destroy-method方法作用是:当spring容器关闭后,会将连接释放回到连接池,避免资源浪费 -->
        <bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
         <property name="driverClassName" value="#{db.driver}"/>
         <property name="url" value="#{db.url}" />
         <property name="username" value="#{db.user}" />
         <property name="password" value="#{db.pwd}" />
        </bean>

        <!-- 配置SqlSessionFactoryBean -->
        <bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean">
         <!-- 指定连接资源 -->
         <property name="dataSource" ref="ds"/>
         <!-- 指定映射文件:entity包下的所有后缀xml的映射文件 -->
         <property name="mapperLocations" value="classpath:entity/*.xml"/>
        </bean>

        <!-- 配置SqlSessionTemplate -->
        <bean id="sst" class="org.mybatis.spring.SqlSessionTemplate">
         <!-- 采用构造器方式注入SqlSessionFactoryBean,注入第一个参数 -->
         <constructor-arg index="0" ref="ssfb"></constructor-arg>
        </bean>

        <!-- 配置组件扫描 -->
        <context:component-scan base-package="dao"></context:component-scan>
</beans>

step3 写实体类,属性名和表格的字段名一样

同Mapper映射器中的配置方式

step4 EmpMapper.xml映射文件,namespace不再要求等同接口名,可以随便取,如取名newname,后续将在具体实现类中使用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="newname"><!-- 如果不是采用Mapper映射器,命名空间随便写,不做要求 -->
  <!-- id要求唯一
       parameterType:填写实体类的完整名字
  -->
  <!-- 插入语句 -->
  <insert id="save" parameterType="entity.Employee">
   INSERT INTO T_TABLE VALUES(6,#{name},#{age})
  </insert>
  <!-- 根据id查询语句 -->
  <select id="findByID" parameterType="int" resultType="entity.Employee">
   SELECT * FROM T_TABLE WHERE ID=#{id}
  </select>
  <!-- 查询所有结果,不需要参数类型 -->
  <select id="findAll" resultType="entity.Employee">
  SELECT * FROM T_TABLE
  </select>
  <!-- 修改操作 -->
  <update id="modify" parameterType="entity.Employee">
  UPDATE T_TABLE SET NAME=#{name},AGE=#{age} WHERE ID=#{id}
  </update>
  <!-- 删除操作 -->
  <delete id="delete" parameterType="int">
  DELETE FROM T_TABLE WHERE ID=#{ididid}
  </delete>

  <!-- 返回map类型的结果 -->
  <!-- 也可以将返回结果简写成map,map即为java.util.Map -->
  <select id="findOne" parameterType="int" resultType="java.util.Map">
   SELECT * FROM T_TABLE WHERE ID=#{id}
  </select>

  <!-- 使用resultMap解决表的字段名和实体类的属性名不一致的情况 -->
  <resultMap id="resultMapID" type="entity.NewEmployee">
    <result property="empID" column="id" />
    <result property="empName" column="name" />
    <result property="empAge" column="age" />
  </resultMap>

  <select id="findOneByNewEmp" parameterType="int" resultMap="resultMapID">
  SELECT * FROM T_TABLE WHERE ID=#{id}
  </select>

</mapper>

step5 写一个DAO接口,接口方法没有特定要求,本例没有做修改

import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Repository;
import entity.Employee;
import entity.NewEmployee;
/**
 * Mapper映射器,接口方法不一定跟EmpMapper.xml中写的sql的id一致,本例中没有修改
 * @author clyang
 */
public interface EmployeeDAO {

    //将一条数据插入数据库
    public void save(Employee e);
    //查询所有结果
    public List<Employee> findAll();
    //根据id来查找结果
    public Employee findByID(int id);
    //修改操作
    public void modify(Employee e);
    //删除操作
    public void delete(int id);
    //返回类型为map的查询,根据id来查询
    public Map findOne(int id);
    //当表的字段名和实体类的属性名不一致时,根据id来查询
    public NewEmployee findOneByNewEmp(int id);

}

step6 再写一个实现类实现这个接口,在接口的实现方法里写具体的方法,在里面使用注入的SqlSessionTemplate,调用其API,实现跟映射文件中sql的关联。

SqlSessionTemplate其对SqlSession进行了封装,为线程安全接口

import java.util.List;
import java.util.Map;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import entity.Employee;
import entity.NewEmployee;
@Repository("empDAO")
public class EmployeeDAOImpl implements EmployeeDAO{

    //注入SqlsessionTemplate
    @Autowired
    @Qualifier("sst")
    private SqlSessionTemplate sst;
    /**
     * 不用考虑提交事务和关闭SqlSession,SqlSessionTemplate为线程安全接口
     */
    public void save(Employee e) {
        sst.insert("newname.save",e);
    }

    public List<Employee> findAll() {
        return sst.selectList("newname.findAll");
    }

    public Employee findByID(int id) {
        return sst.selectOne("newname.findByID", id);
    }

    public void modify(Employee e) {
        sst.update("newname.modify", e);
    }

    public void delete(int id) {
        sst.delete("newname.delete",id);
    }

    public Map findOne(int id) {
      return sst.selectOne("newname.findOne",id);
    }

    public NewEmployee findOneByNewEmp(int id) {
        return sst.selectOne("newname.findOneByNewEmp",id);
    }
}

看大这里,就明白为什么不需要接口方法跟映射文件中的sql的id名字一样,命名空间也不做要求了,因为实现类方法中已经指明了。

测试代码:

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import dao.EmployeeDAO;
import entity.Employee;

public class testCase {
    @Test
    public void test1() {
        //启动spring容器
        String config="spring-mybatis.xml";
        ApplicationContext ac=new ClassPathXmlApplicationContext(config);
        //调用EmployeeDAOImpl实现类,使用父类接口指向子类对象
        EmployeeDAO dao=ac.getBean("empDAO",EmployeeDAO.class);
        //调用查询方法
        List<Employee> list=dao.findAll();
        System.out.println(list);
        //不需要手动关闭连接
    }
}

测试结果:OK

总结:使用SqlSessionTemplate跟使用Mapper映射器配置方法整体区别不大,为早期的使用方法,主要为需要有实现类,实现类要依赖注入SqlSessionTemplate,然后使用它的API实现对数据库的操作。

原文地址:https://www.cnblogs.com/youngchaolin/p/10354152.html

时间: 2024-10-07 05:06:51

Spring集成MyBatis的使用-使用SqlSessionTemplate的相关文章

Unit08: Spring集成mybatis

Unit08: Spring集成mybatis 1. Spring集成mybatis (1)方式一 step1. 导包. spring-webmvc,mybatis,mybatis-spring, ojdbc,dbcp,spring-jdbc,junit. step2. 添加spring的配置文件. 注:集成之后,不再需要mybatis的配置文件了,之前的配置信息 用一个bean(SqlSessionFactoryBean)来代替. step3.实体类. step4.映射文件. step5.Ma

Spring集成MyBatis框架

Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错:另一个是,复杂的SQL用字符串写起来简直不可维护(换行.可视长度.参数都是问题). 2.使用Spring JdbcTemplate 这个其实还是挺不错的,配置比较简单,功能丰富上比手工管理Connection要舒服多了,而且代码也比较简洁.

Spring 集成mybatis 配置方法

<?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/sch

Mybatis-Generator插件的使用与Spring集成Mybatis的配置

Mybatis-Generator插件 Mybatis-Generator是一个用于自动生成dao层接口.pojo以及mapper xml的一个Mybatis插件,该插件有三种用法:命令行运行.Eclipse插件.maven插件.个人觉得maven插件最方便,可以在eclipse/intellij idea等ide上通用,本文也是介绍在maven中配置并使用这个插件. 现在我mysql中有一个school数据库,该数据库有student.cls两张表格,表结构如下: student表: cls表

Spring集成MyBatis的使用-使用Mapper映射器

Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描Mapper映射器 (1)集成步骤 step1 导包: spring-webmvc, mybatis, mybatis-spring, dbcp, ojdbc, spring-jdbc, junit, mysql相关等 <dependencies> <!--导入junit测试包-->

Spring集成myBatis操作数据库

学习来源: http://www.cnblogs.com/lhw1994/p/6759815.html 1. mybatis介绍 这是一个半自动化的框架,何谓半自动,因为它需要手工编写POJO.SQL和映射关系.虽然要多花点时间编写SQL语句,但至少在优化方面可以省心不少. 2. Spring与myBatis的结合 2.1 基础配置文件  mybatis_config.xml <?xml version="1.0" encoding="UTF-8"?>

Spring集成Mybatis

jar文件下载地址:http://download.csdn.net/detail/huhui_bj/8575533 一.准备jar包 [mybatis] mybatis-3.2.0.jar mybatis-spring-1.1.1.jar log4j-1.2.17.jar [spring] spring-aop-3.2.0.RELEASE.jar spring-beans-3.2.0.RELEASE.jar spring-context-3.2.0.RELEASE.jar spring-cor

Spring集成MyBatis完整示例

为了梳理前面学习的<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>中的内容,准备做一个完整的示例完成一个简单的图书管理功能,主要使用到的技术包含Spring.MyBatis.Maven与MySQL等.最后的运行效果如下: 项目结构如下: 一.新建一个基于Maven的Web项目 1.1.创建一个简单的Maven项目,项目信息如下: 1.2.修改层面信息,在项目上右键选择属性,再选择“Project Face

spring集成Mybatis框架,junit测试

1.Spring的xml文件配置如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:aop="http://www