Spring-Mybatis整合

Spring-Mybatis整合

    一、整合的内容

     1、SqlSessionFactory将放入Spring容器中作为单例存在

    2、Mapper代理,将从Spring容器中直接获取mapper代理对象

     3、数据源和数据库连接池的事务管理都将有由Spring进行管理

     二、整合操作

        数据源:ApplicationContext.xml中加载数据库配置文件db.properties

  jdbc.driver=com.mysql.jdbc.Driver
        jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&useSSL=false
        jdbc.username=root

        jdbc.password=123456
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    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-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="maxActive" value="10" />
        <property name="maxIdle" value="5" />
    </bean>
</beans>

        将SqlSessionFactory归于Spring管理

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定Mybatis核心配置文件 凡是Spring配置文件都得加classpath -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
        <!-- 指定回话工厂使用的数据源 -->
        <property name="dataSource" ref="dataSource"/>
    </bean>

   三、 简单的实现

    简单的Dao实现
<!-- 原生dao实现
		注意:class必须指定Dao的实现类的全路径 -->
	<bean id="userDao" class="org.lier.dao.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>

    这种方式下实现的条件:

    1、有dao借口,并且还要有相关的实现类,实现类需要继承org.mybatis.spring.support.SqlSessionDaoSupport类。

    2、class的值必须指定dao的实现类的全路径

    public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    @Override
    public List<User> selectUsersByName(String username) {
//        session线程不安全,放入放入方法体中,随用随毁
        SqlSession session = this.getSqlSession();
        List<User> users =session.selectList("test.findByName",username);
        session.commit();
        session.close();
        return users;
    }
}

    测试方法;

private ApplicationContext ctx;
	
	@Before
	public void setUp() throws Exception{
		String configLocation = "ApplicationContext.xml";
		ctx = new ClassPathXmlApplicationContext(configLocation);
		
	}
	
	@Test
	public void selectUsersByNameTest() {
//		获取UserDao对象,getBean中的字符串是在ApplicationContext.xml中声明的
		UserDao userdao = (UserDao) ctx.getBean("userDao");
		List<User> users  = userdao.selectUsersByName("王五");
		System.out.println(users.toString());
	} 

        问题以及注意:

        上面的实现类中手动的commit了,但是报错了

  java.lang.UnsupportedOperationException:Manual commit is not allowed over a Spring managed SqlSession

    大致意思是在和Spring整合之后,是不允许手动的Commit的。将手动commit的语句去掉就可以正常的执行了。完美!加油W~!W

    Mapper代理的方式:单个以及扫描方式
Mapper动态代理的方式
	<!-- 动态代理方式Mapper方式实现 -->
	<bean id="userDaoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<!-- 配置Mapper接口的全路径  -->
		<property name="mapperInterface" value="org.lier.mapper.UserDaoMapper"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
	</bean>
	<!-- 使用包扫描的方式批量引入Mapper -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 指定要扫描的包的全路径,如果有多个包,用英文状态下的逗号进行分割 -->
		<property name="basePackage" value="org.lier.mapper"></property>
	</bean>
@Test
	public void findOrderToUser2Test() {
//		获取UserDao对象,getBean中的字符串是在ApplicationContext.xml中声明的
		UserDaoMapper mapper = (UserDaoMapper) ctx.getBean("userDaoMapper");
		List<Orders> orders = mapper.findOrderToUser2();
		System.out.println(orders.toString());
		
	}

    总结下啊!

        1、整合中数据源不在mybatis控制,内容大概一致,不难理解。

        2、重要的一点SqlSessionFactory由Spring进行注入(单例),在Mybatis中,必须获取了这个factory才能获取session对象,执行sql。

        3、实现方式:

        在单个Mybatis中dao实现手动加载配置文件,创建factory,获取session,执行,然后提交关闭,整合的时候,提供实现类,通过获取bean获取相关的实现类进行操作,这其中,SQLSessionFactory已经被Spring接管了注入了,直接获取session,执行,不需要commit。

       代理模式下:都省去了实现类了,Mybatis指定Mapper接口两者在同一目录下,在整合版中指定mapper接口、会话工厂。综上就是说就是将Mybatis中需哟啊手工创建的factory让Spring接管了。然后在Spring中指定相关的mapper接口,就可以通过bean获取相关的接口的代理类了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值