spring整合myBatis

一、简介

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

两个重要模块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。

控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。

容器 (在 Spring 框架中是 IOC 容器) 负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法。

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及
结果集的检索。
MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java
对象)映射成数据库中的记录。
    将创建SqlsessionFactory交给Spring。

二.实例

引入jar包:

 <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.2.0</version>
    </dependency>

  

1.创建实体类

package cn.happy.pojo;

public class Topic {
    private Integer tid;
    private String  tname;

    public Integer getTid() {
        return tid;
    }

    public void setTid(Integer tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }
}

2.创建dao层

public interface ITopicDao {
    /*
    * 添加主题的方法
    * */
    public int addTopic(Topic topic);

3.创建ITopicDao.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="cn.happy.dao.ITopicDao">
   <insert id="addTopic" >
       insert into topic (tname) values (#{tname});
   </insert>

</mapper>

4.创建service层和他的实现类

public interface ITopicService {
    /*
* 添加主题的方法
* */
    public int addTopic(Topic topic);


}

 ITopicServiceImpl

public class TopicServiceImpl implements ITopicService {
    ITopicDao dao;

    public int addTopic(Topic topic) {
        return dao.addTopic(topic);
    }

    public ITopicDao getDao() {
        return dao;
    }

    public void setDao(ITopicDao dao) {
        this.dao = dao;
    }
}

5.创建配置文件

01.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">
<!--通过这个配置文件,完成mybatis与数据库的连接-->
<configuration>
    <!-- 引入jdbc.properties-->
   <!-- <properties resource="jdbc.properties"/>-->

    <typeAliases>
        <package name="cn.happy.pojo"></package>
    </typeAliases>

    <mappers>
        <package name="cn.happy.dao"></package>
    </mappers>
</configuration>

02.jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/newssystem
jdbc.username=root

03.spring的配置文件

采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       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
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
">
    <!--1.识别jdbc.properties文件-->
       <context:property-placeholder location="jdbc.properties"></context:property-placeholder>

    <!--工厂配置-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--大配置文件-->
        <property name="configLocation" value="classpath:MyBatis-config.xml"></property>
    </bean>
    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
    </bean>


    <!--dao(只需提供接口不需提供实现类 ) 映射文件的扫描器可以动态的在内存中构建接口实现类,代理对象-->
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.happy.dao"></property>
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
    </bean>

    <!--service-->
    <bean id="topicService" class="cn.happy.service.impl.TopicServiceImpl">
        <property name="dao" ref="ITopicDao"></property>
    </bean>
    <!--事物管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--AspectJ 配置事物-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="StockException"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <!--定义切点-->
        <aop:pointcut id="mypoint" expression="execution(* *..service.*.*(..))"></aop:pointcut>
        <!--配置顾问-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint"></aop:advisor>
    </aop:config>




</beans>

6.创建测试类

public class test01 {
    @Test
    public void testAdd() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        ITopicService topicService = (ITopicService)ctx.getBean("topicService");
        Topic topic = new Topic();
        topic.setTname("白夜行");
        topicService.addTopic(topic);

    }
}

  

  

  

 

  

  

  

  

  

posted @ 2017-10-21 14:47  ruanjiancainiao  阅读(147)  评论(0编辑  收藏  举报