spring整合mybatis(代理的方式)【我】

创建项目等同上一篇非代理方式随笔,只说不一样的部分:

项目结构主要是多了下面红框部分:

 

配置文件:

主要是dao配置文件中多了Mapper代理java类的扫描包路径:

applicationContext-dao.xml:

<?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:resource/*.properties" />
    
    <!-- 引入其他xml -->
    <import resource="classpath:spring/applicationContext-service.xml"/>
    
    
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="maxActive" value="10" />
        <property name="minIdle" value="5" />
    </bean>
    
    <!-- 配置sqlsessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
        <property name="dataSource" ref="dataSource"></property>
        
        <!-- sql映射文件路径(是否用代理方式都可以在这配置xml文件路径) -->
<!--         <property name="mapperLocations" value="classpath*:com/zhangguo/bookstore/mapper/*Mapper.xml"></property> -->
        <property name="mapperLocations" value="classpath*:mybatis/mapper/*.xml"></property>
    </bean>
    
    <!-- 配置扫描包,加载mapper代理对象(使用代理方式才需要配置这个xxMapper.java的扫描包) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--         <property name="basePackage" value="com.taotao.mapper"></property> -->
        <property name="basePackage" value="mybatis.mapper"></property>
    </bean>
</beans>

其实就是多了下面部分:

  <!-- 配置扫描包,加载mapper代理对象(使用代理方式才需要配置这个xxMapper.java的扫描包) -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="mybatis.mapper"></property>
    </bean>

在这里其实就是对 BookDAO.java 类的扫描包配置,指定其为对应的代理类。

 

然后是java代码:

首先,这个就需要针对每个代理类配置一个 xml文件:BookMapper.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="mybatis.mapper.BookDAO">
    <!--id应该是接口中的方法,结果类型如没有配置别名则应该使用全名称 -->
    <!--获得所有图书 -->
    <select id="getAllBooks" resultType="mybatis.pojo.Book">
        select id,title,price,publishDate from books
    </select>
    <!--获得图书对象通过编号 -->
    <select id="getBookById" resultType="mybatis.pojo.Book">
        select id,title,price,publishDate from books where id=#{id}
    </select>
    <!-- 增加 -->
    <insert id="add">
        insert into books(title,price,publishDate)
        values(#{title},#{price},#{publishDate})
    </insert>
    <!-- 删除 -->
    <delete id="delete">
        delete from books where id=#{id}
    </delete>
    <!-- 更新 -->
    <update id="update">
        update books set title=#{title},price=#{price},publishDate=#{publishDate}
        where id=#{id}
    </update>
</mapper>

注意,开头部分的 命名空间要指定其对应的代理类,这里 是  namespace="mybatis.mapper.BookDAO"

 

然后是其代理类的java代码:BookDAO.java

package mybatis.mapper;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import mybatis.pojo.Book;

/**
 * 图书数据访问接口
 */
public interface BookDAO {
    /**
     * 获得所有图书
     */
    public List<Book> getAllBooks();
    /**
     * 根据图书编号获得图书对象
     */
    public Book getBookById(@Param("id") int id);
    /**
     * 添加图书
     */
    public int add(Book entity);
    /**
     * 根据图书编号删除图书
     */
    public int delete(int id);
    /**
     * 更新图书
     */
    public int update(Book entity);
}

 

最后是测试类:Test

package test;

import java.util.List;

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

import mybatis.pojo.Book;
import mybatis.service.BookService;
import mybatis.service.T1Service;

public class T1 {

    static BookService bookservice;

    @BeforeClass
    public static void before(){
        ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml");
        bookservice=ctx.getBean(BookService.class);
    }
    
    @Test
    public void testGetAllBooks() {
        List<Book> books=bookservice.getAllBooks();
        System.out.println(111);
        System.out.println(books);
    }
    
  //只需看上面部分,当然也可以将其改写在main方法中
public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:spring/applicationContext-dao.xml"); //非代理的方式 T1Service t1Service =ctx.getBean(T1Service.class); t1Service.getBookById(); } }

 

posted @ 2019-05-21 16:46  戈博折刀  阅读(230)  评论(0编辑  收藏  举报