MyBatis学习(三)---MyBatis和Spring整合

想要了解MyBatis基础的朋友可以通过传送门:

  MyBatis学习(一)---配置文件,Mapper接口和动态SQL  http://www.cnblogs.com/ghq120/p/8322302.html

  MyBatis学习(二)---数据表之间关联  http://www.cnblogs.com/ghq120/p/8323918.html

  之前两篇文章都是单独介绍了MyBatis的用法,并没有和任何框架进行整合。使用MyBatis完成数据库的操作仍有一些模板化的代码,比如关闭SqlSession、提交事务等。

  MyBatis和Spring整合只有dao组件的接口没有实现类,避免了显式调用SqlSession的相关操作数据库的方法,事务的提交和SqlSession的关闭。

  实现MyBatis和Spring整合且只有接口没有实现类的要求是:dao组件接口的主文件名和映射文件的主文件名同名,且在同包下,映射文件的命名空间必须是dao组件接口的全限定名,标志相应的sql语句的id必须是接口的方法名。

MyBatis+Spring

此项目实现的还是用户的增删改查

使用Spring后,就不需要使用工具类来获取SqlSessionFactory和SqlSession的对象。通过在Spring容器中配置bean元素来自动获取。

Spring容器的配置文件如下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"
    xsi:schemaLocation=
    "http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置数据源,指出连接数据库需要的驱动、url、用户名和密码以及连接池相关信息 -->
    <bean id="dbcpdataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"></property>
        <property name="username" value="scott"></property>
        <property name="password" value="itcast"></property>
        <property name="initialSize" value="20"></property>
        <property name="maxActive" value="10"></property>
        <property name="maxIdle" value="3"></property>
        <property name="minIdle" value="2"></property>
    </bean>

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="mybatis-config.xml"></property>
        <property name="dataSource" ref="dbcpdataSource"></property>
    </bean>

    <!-- 配置Dao组件接口的代理类,该bean元素只能配置一个Dao组件的代理类,如果要配置多个,该bean元素要出现多次,根据id来区分 -->
    <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
      <property name="mapperInterface" value="com.ghq.model.dao.UserDao"></property>
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    </bean>
</beans>

由于Spring容器中已经和数据库建立连接,则MyBatis配置文件中无需再次建立和数据库的连接,mybatis-config.xml的配置如下

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

<configuration>
    <!-- 在配置文件中定义别名,可以在映射文件中使用别名 -->
    <typeAliases>
        <package name="com.ghq.model.entity"/>
    </typeAliases>

  <!-- 注册映射文件 -->
  <mappers>
    <package name="com.ghq.model.dao"/>
  </mappers>
</configuration>

dao组件中的方法为

public interface UserDao {
    //根据模糊姓名和性别查询
    List<User> getUserBynameAndGender(Map<String,Object> m);
    //批量删除用户
    public boolean delBatchUser(UserVo vo);
}

dao组件的配置文件UserDao.xml

<?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="com.ghq.model.dao.UserDao">
    <select id="getUserBynameAndGender" parameterType="java.util.Map" resultType="user">
    select * from user_tab
    <!-- where 标签默认会去除第一个and,若输入参数是null,则删除where条件 -->
    <where>
        <if test="username != null and username != ‘‘">
            and username like ‘%${username}%‘
        </if>
        <if test="gender !=null and gender !=‘‘">
            and gender = #{gender}
        </if>
    </where>
  </select>

    <delete id="delBatchUser" parameterType="UserVo">
    delete from user_tab
    <where>
      <if test="idlist !=null and idlist.size() > 0">
        and id in
        <foreach collection="idlist" item="id" open="(" close=")" separator=",">
          #{id}
        </foreach>
      </if>
    </where>
  </delete>

</mapper>

单元测试

使用Spring容器来创建对象,则需要先加载Spring容器,创建dao组件接口的对象,调用对象中的方法。

public class testmybatis {
    //根据条件来获取用户
    @Test
    public void testgetUserbynameAndGender(){
        SqlSession session = MybatisDb.getSession();
        UserDao userdao = session.getMapper(UserDao.class);
        Map<String,Object> user = new HashMap<String,Object>();
        user.put("username", "张");
        user.put("gender", "女");
        List<User> ulist = userdao.getUserBynameAndGender(user);
        if (ulist !=null && ulist.size() > 0) {
            for (User uu : ulist) {
                System.out.println(uu);
            }
        } else {
            System.out.println("没有符合条件的用户");
        }
    }

    //批量删除用户的方法
    @Test
    public void testdelBatchUser(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao)context.getBean("userDao");
        UserVo vo = new UserVo();
        List<Integer> idlist = new ArrayList<Integer>();
        idlist.add(8);
        idlist.add(6);
        vo.setIdlist(idlist);
        boolean flag = userDao.delBatchUser(vo);
        if (flag) {
            System.out.println("删除成功");
        }else{
            System.out.println("删除失败");
        }
    }

原文地址:https://www.cnblogs.com/ghq120/p/8325463.html

时间: 2024-10-08 10:44:17

MyBatis学习(三)---MyBatis和Spring整合的相关文章

MyBatis学习(二):与Spring整合(非注解方式配置MyBatis)

搭建SpringMVC的-->传送门<-- 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话,pom.xml的配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema

Mybatis学习---了解Mybatis

什么是Mybatis 对MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Object,普通的 Java 对象)映射成数据库中的记录.(摘自MyBatis官网) MyBatis与Ibatis 对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层

Spring学习(七)spring整合mybatis

相对于mybatis的平常写法,spring中在使用mybatis时,不需要mybatis-config.xml配置,以及MybatisFactory工厂,在applicationContext.xml中配置即可. 还是使用上次的案例:mybatis传送门 附上applicationContext.xml: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w

MyBatis学习(三)

前言 感觉学习进度还是比较慢啊,一整天的学习效率不是很高,一会看电视,一会喝茶,对自己的要求不严格...今天就说说关联表数据的插入以及别名的使用. 正文 1.关联插入 之前,我在数据库中已经创建了一张users表,现在我新增了一张手机表cellphone,用来记录用户手机的信息,结构如下所示: 其中cellphone对应的实体类为: package org.tonny.entity; public class Cellphone { private int id; private int use

Spring框架学习(4)spring整合hibernate

内容源自:spring整合hibernate    spring整合注解形式的hibernate 这里和上一部分学习一样用了模板模式, 将hibernate开发流程封装在ORM层提供的模板类HibernateTemplate中,通过在DAO中对模板类的使用,实现对传统hibernate开发流程的代替. 一.先来看看Hibernate的传统开发流程: 1) 配置SessionFactory对象 hibernate.cfg.xml <session-factory> a 数据源 driver_cl

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

Spring学习(五)spring整合hibernate

上一篇博客中讲到spring dao层对jdbc的封装,用到了模板模式的设计思想 .这篇我们来看看spring中的orm层对hibernate的封装,也就是所谓的spring整合 hibernate.这里同样用了模板模式, 将hibernate开发流程封装在ORM层提供的模板类HibernateTemplate中,通过在DAO中对模板类的使用,实现对传统hibernate开发流程的代替. 一.先来看看Hibernate的传统开发流程: 1) 配置SessionFactory对象 hibernat

Spring(三):Spring整合Hibernate

背景: 本文主要介绍使用spring-framework-4.3.8.RELEASE与hibernate-release-5.2.9.Final项目整合搭建的过程. 开发环境简介: 1).jdk 1.8 2).spring-framework-4.3.8.RELEASE.hibernate-release-5.2.9.Final 引入Spring到新建项目My-SSH中 1)导入Spring的required包到My-SSH项目 新建java的dynamic web 项目,之后把spring-f

MyBatis学习总结-MyBatis快速入门的系列教程

[MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [MyBatis]MyBatis 动态SQL [MyBatis]MyBatis Java API [MyBatis]MyBatis SQL语句构建器 [MyBatis]MyBatis 日志 [MyBatis]什么是MyBatis [MyBatis]MyBatis 从XML创建SqlSessionFactory实例 [MyBatis]MyBatis不使用XML