`
尚将军
  • 浏览: 34428 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mybatis功能之spring自动代理完成dao的实现类功能

    博客分类:
  • SSH
阅读更多

之前在写包的时候会划分为dao层,service层,action层,以及实现类层

有了mybatis后dao接口层的实现类不需要写了,有spring代理完成,步骤如下

在spring的配置文件中spring.xml配置如下:

1.  spring.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:mvc="http://www.springframework.org/schema/mvc"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xmlns:tx="http://www.springframework.org/schema/tx"
 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
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
           
      ">
      
      <!-- 1. 配置c3p0连接池 -->
      <bean id="comboPooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="driverClass" value="Oracle.jdbc.driver.OracleDriver"/>
      <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
      <property name="user" value="scm"/>
      <property name="password" value="666"/>
      </bean>
      
      <!-- 2. 配置sqlsession代替原生mybatisUtil工具类 -->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
      <!-- 加载配置文件mybatis.xml -->
      <property name="configLocation" value="classpath:mybatis.xml"/>
      <!-- 引入数据资源 -->
      <property name="dataSource" ref="comboPooledDataSource"/>
      </bean>
      
      <!-- 3. mybatis事务管理器,底层用的是jdbc -->
      <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <!-- 引入数据源 -->
      <property name="dataSource" ref="comboPooledDataSource"/>
      </bean>


      <!-- 由于使用了接口的命名空间,不需要dao的实现类,也不需要sqlSessionTemplate了 -->
      <!--<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>

 </bean>
       -->
      
      <!-- 4. 配置事物通知,如何管理事物 -->
      <tx:advice id="tx" transaction-manager="dataSourceTransactionManager">
      <tx:attributes>
      <!-- rollback-for="Exception" 回滚异常 -->
      <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
      <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
      <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
      <!-- 如果有事务则在当前事务执行,当前没事务则在没事务情况下执行 -->
      <tx:method name="*" propagation="SUPPORTS"/>
      </tx:attributes>
      </tx:advice>
      
      <!-- 5.配置事物切面aop,拦截哪些方法 -->
      <aop:config>
      <aop:pointcut expression="execution(* com.coffee.scm.service.impl.*.*(..))" id="pointcut"/>
      <aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
      </aop:config>
      
      <!-- 注册dao -->
     <!--  <bean id="deptDao" class="com.coffee.scm.dao.impl.DeptDao">
      <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
      </bean>   -->
      <!-- 注册action(注解),里面有service,service加了注解,扫描 -->
      <!-- <context:component-scan base-package="*"/> -->
      
      <!-- 扫描过滤掉controller,因为他们是在springmvc里面配的,否则会出现问题 -->
      <context:component-scan base-package="com.coffee">
      <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
      </context:component-scan>
      <!-- 配置dao接口映射,然后就不用写dao实现类了
            配置 转换器,对于在basePackage设置的包(包括子包)下的接口类,如果在Mapper.xml文件中定义过,
               将被转换成spring的BEAN,在调用 的地方通过@Autowired方式将可以注入接口实例
           由spring自己完成接口的实现
         value="com.coffee.scm.dao"映射接口全路径
         
       -->
      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
      <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
      <property name="basePackage" value="com.coffee.scm.dao"></property>
      </bean>
      
      <!-- 通知springioc注解作用 -->
      <context:annotation-config /> 
      
</beans>



2.mapper.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">
<!-- namespace定义接口的全路径,只需要在接口定义方法
不需要dao层的实现类,然后再写sql语句就行了
原理:
 -->
<mapper namespace="com.coffee.scm.dao.IDeptDao">
<resultMap type="dept" id="deptResultMap">
<id property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
<result property="deptAddress" column="dept_address"/>
</resultMap>

<select id="selectDept" parameterType="Integer" resultMap="deptResultMap">
<!--参数的写法#{deptID} -->
select * from dept where dept_id =#{deptId}
</select>


<insert id="insert" parameterType="dept">
insert into dept values(#{deptId},#{deptName},#{deptAddress})
</insert>

</mapper>


3. service实现层

package com.coffee.scm.service.impl;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import com.coffee.scm.dao.IDeptDao;
import com.coffee.scm.entity.Dept;
import com.coffee.scm.service.IDeptService;


@Service
public class DeptService implements IDeptService {


// 这个注解是根据类型配置,只需找类型,加上这个注解,然后配置接口映射可以去掉dao的接口实现,由spring自动代理完成
@Autowired
private IDeptDao deptDao;


/**
* 插入部门信息,如果遇到异常会回滚,因为spring.xml的事务通知配置里面配置了rollback-for="Exception"
*/
@Override
public void insertDept(Dept dept) throws Exception {
try {
deptDao.insert(dept);


} catch (Exception e) {
throw new Exception(e);
}
}


}


注意:dao接口层定义的方法名要和mapper.xml的sql标签的id对应一致
分享到:
评论

相关推荐

    springboot,mybatis,springboot-mybatis环境,自动生成dao实现类,自动扫描

    springboot,mybatis,springboot-mybatis环境,自动生成dao实现类,自动扫描 springboot环境,mybatis自动扫描,mybatis无需实现类,mybatis mapper扫描 springboot mybatis 手动写dao实现类的: ...

    MyBatis整合Spring中间件jar包 mybatis-spring-1.3.0.jar

    此时,无需编写任何实现类,Spring会自动为`UserMapper`生成一个实现了该接口的代理类,并将其注入到需要的地方。 此外,MyBatis-Spring还支持将Mapper接口的方法直接作为`@Autowired`注解的目标,这样就可以在...

    mybatis3.0.5 and spring3.0.5jar

    通过Spring的Bean定义,可以实现SqlSessionFactory的自动创建和配置,这样可以将数据库操作通过Spring的DAO接口透明化,实现服务层与数据访问层的解耦。例如,可以使用`@Autowired`注解自动注入SqlSessionTemplate,...

    mybatis-spring-1.3.3.jar官方下载

    通过 MyBatis-Spring 的集成,开发者可以充分利用 Spring 的强大功能,同时享受 MyBatis 灵活的 SQL 编写能力,实现高效且易于维护的持久层操作。mybatis-spring-1.3.3.jar 的下载和使用,可以帮助开发者快速构建...

    mybatis-3.2.7 包含spring整合包

    3. DAO 接口的自动实现:Spring 可以自动生成 MyBatis DAO 接口的实现类,减少了大量重复代码。 4. 插件支持:MyBatis 的插件机制可以被 Spring 整合,允许在不修改原有代码的情况下,对 MyBatis 的执行过程进行拦截...

    完整mybatis3.0.6与spring3.0整合例子

    通过以上这些知识点,我们可以理解如何在实际项目中整合MyBatis 3.0.6和Spring 3.0,以及如何实现数据库操作的事务管理,包括在发生错误时自动回滚事务。这个整合例子为开发者提供了一个良好的学习平台,帮助他们更...

    mybatis-Spring整合jar包

    MyBatis-Spring 整合是为了在Spring框架中无缝地使用MyBatis持久层框架,它简化了在Spring应用中配置MyBatis的过程,并提供了事务管理和依赖注入等功能。这个整合jar包包含了MyBatis和Spring的基本组件,使得开发...

    mybatis-spring-1.2.0.rar

    2. **MapperScannerConfigurer**:这个类允许开发者通过扫描特定包来找到并注册 MyBatis 的 Mapper 接口,这样 Spring 可以自动创建对应的代理对象。 3. **SqlSessionTemplate 和 SqlSessionDaoSupport**:这两个类...

    mybatis-spring-1.2.0-bundle.zip

    1. **自动装配 DataSource**:通过 Spring 的 DataSourceTransactionManager,MyBatis-Spring 可以自动配置数据源,实现了事务管理。 2. **SqlSessionFactory 和 SqlSession 的管理**:MyBatis-Spring 提供了 ...

    mybatis-spring-1.0.1-bundle.zip

    这个名为 "mybatis-spring-1.0.1-bundle.zip" 的压缩包,包含的是 MyBatis-Spring 的 1.0.1 版本,这是一个稳定且功能完备的版本,为开发者提供了高效的 ORM 解决方案。 首先,我们来了解一下 MyBatis-Spring 的...

    springboot+mybatis(mybatis dao与xml文件自动生成)

    总结起来,Spring Boot和MyBatis的结合使用可以简化Web应用的开发,而MyBatis Generator则进一步提升了开发效率,通过自动化生成DAO接口和XML配置文件,使开发者能够更专注于业务逻辑的实现。在实际开发中,理解并...

    spring和mybatis整合(mapper代理自动扫描方式实现)

    通过以上步骤,我们就完成了Spring和MyBatis的整合,利用Mapper代理自动扫描的方式实现了数据库操作。这种方式减少了手动创建SqlSessionTemplate或SqlSessionDaoSupport的繁琐工作,提高了开发效率。与传统的基于DAO...

    mybatis3与spring5整合.rar

    整合MyBatis3和Spring5的主要目标是实现DAO(Data Access Object)的自动化管理,让Spring负责创建和管理MyBatis的SqlSession,以及处理与数据库的交互。这通常通过以下步骤完成: 1. 配置MyBatis的...

    mybatis-spring中文文档

    MyBatis-Spring是MyBatis与Spring框架整合的一个类库,它能将MyBatis代码无缝地整合到Spring环境中。通过MyBatis-Spring,Spring可以...在实现自定义功能时,可以参考MyBatis-Spring提供的核心组件和扩展机制进行开发。

    Mybatis_SpringDao

    Mybatis_SpringDao 是一个关于将Mybatis与Spring框架整合使用的示例项目,它展示了如何在Spring应用中采用原始Dao(Data Access Object)的方式进行数据访问,并且包含了事务管理的实现。下面我们将深入探讨这个主题...

    Mybatis-Spring-1.2.2中文文档.zip

    Mybatis-Spring与Spring的声明式事务管理结合,可以在服务层的方法上使用@Transactional注解,实现事务的自动开启、提交、回滚。 7. **SqlSessionTemplate和SqlSessionDaoSupport** 这两个类是Mybatis-Spring提供...

    springboot,mybatis,springboot-mybatis环境,手动写dao实现类,非自动扫描

    springboot,mybatis,springboot-mybatis环境,手动写dao实现类,非自动扫描 springboot环境,mybatis springboot mybatis 自动生成dao实现类的: https://download.csdn.net/download/nowsdt/11085245

    Mybatis-Spring 1.3.2 API中文版

    Mybatis-Spring 是一个连接Mybatis和Spring的桥梁,它简化了在Spring应用中使用Mybatis的过程,实现了数据访问层(DAO)的无代码管理,并提供了事务支持。通过这个库,开发者可以将Mybatis的灵活性和Spring的强大...

    Mybatis_dao.rar_mybatis dao_mybatis_dao.rar

    5. **DAO实现类**: 这是Mybatis的核心部分,实现了Mapper接口,通过SqlSession与数据库进行交互,执行SQL并处理结果。 结合Struts2和Spring3.0,我们可以得到以下优势: - **Struts2**:这是一个流行的MVC(模型-...

    mybatis-spring-1.2.1.zip

    通过MyBatis-Spring,我们可以将MyBatis的数据访问层(DAO)对象纳入到Spring的管理之中,从而实现事务控制、DAO对象的自动装配等高级功能。 在1.2.1版本中,MyBatis-Spring提供了以下核心功能: 1. **...

Global site tag (gtag.js) - Google Analytics