上一篇文章中已经介绍,MapperScannerConfigurer可以通过扫描的方式获取我们需要的mapper,而不需要我们自己去配置,它的基本配置如下:

 1 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">2         <!-- 配置要扫描的包路径,这样就会扫描该包及其子包 -->3         <property name="basePackage" value="com.hyc.dao" />4         <!-- 指定SqlSessionFactory的bean名称 -->5         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />6         <!-- 指定SqlSessionTemplate的bean名称,优先级高于SqlSessionFactory -->7         <property name="sqlSessionTemplateBeanName" value="com.hyc.mapper" />8         <!-- 当包下的类被这个注解@Repository标示的时候才会被扫描 -->9         <property name="annotationClass" value="org.springframework.stereotype.Repository" />
10 </bean>

配置属性的意义已在注释中说明,需要注意的是如果要使用SqlSessionFactory,就要注释掉属性sqlSessionTemplateBean,否则sqlSessionFactory的配置将不会生效。注意⚠️:上面的配置中,basePackage的值必须是接口所在的包,而不是mapper文件所在的包

下面将测试这种配置的实现方式,我将不再一步一步进行配置,而是直接贴出最终的配置文件。

一、Spring-mybatis配置文件spring-mybatis.xml

 1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3     xmlns:context="http://www.springframework.org/schema/context"4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5     xsi:schemaLocation="http://www.springframework.org/schema/beans6         http://www.springframework.org/schema/beans/spring-beans.xsd7         http://www.springframework.org/schema/context8         http://www.springframework.org/schema/context/spring-context-4.0.xsd">9
10     <!-- 第一种:简单数据库--使用数据库连接池 -->
11     <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
12         <property name="driverClassName" value="org.postgresql.Driver" /> <property
13         name="url" value="jdbc:postgresql://localhost:5433/postgres" /> <property
14         name="username" value="postgres" /> <property name="password" value="hyc123"
15         /> </bean> -->
16     <!--第二种:通过jndi方式配置 -->
17     <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
18         <property name="jndiName" value="jdbc/pg"></property> </bean> -->
19
20     <!-- 第一步:配置数据源--使用数据库连接池 -->
21     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
22         <property name="driverClassName" value="org.postgresql.Driver" />
23         <property name="url" value="jdbc:postgresql://localhost:5433/postgres" />
24         <property name="username" value="postgres" />
25         <property name="password" value="hyc123" />
26         <!-- 最大数据库连接数 -->
27         <property name="maxActive" value="100" />
28         <!-- 最大空闲数,即等待连接数 -->
29         <property name="maxIdle" value="5" />
30         <!-- 最大等待连接时间 -->
31         <property name="maxWait" value="10000" />
32     </bean>
33
34     <!--第二步:配置SqlSessionFactory -->
35     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
36         <!-- 配置数据源 -->
37         <property name="dataSource" ref="dataSource" />
38         <!-- 配置mybatis -->
39         <property name="configLocation" value="classpath:mybatis-config2.xml" />
40     </bean>
41
42     <!--第三步:配置sqlSessionTemplate:通过带参数的构造方法创建对象 -->
43     <!-- <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
44         以sqlSessionFactory为参数传入构造函数中
45         <constructor-arg ref="sqlSessionFactory" />
46         mybatis执行器,取值范围是SIMPLE/REUSE/BATCH三种类型
47         <constructor-arg value="SIMPLE" />
48     </bean> -->
49
50     <!--第三步:通过MapperFactoryBean配置SqlSessionFactory -->
51     <!-- <bean id="productMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
52         配置mapper接口
53         <property name="mapperInterface" value="com.hyc.dao.ProductMapper" />
54         配置SqlSessionFactory
55         <property name="sqlSessionFactory" ref="sqlSessionFactory" />
56         如果同时配置sqlSessionTemplate和SqlSessionFactory,将优先使用sqlSessionTemplate
57         <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />
58     </bean> -->
59
60
61     <!--第三步:通过MapperScannerConfigurer的配置方式 -->
62     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
63         <!-- 配置要扫描的包路径,这样就会扫描该包及其子包 -->
64         <property name="basePackage" value="com.hyc.dao" />
65         <!-- 指定SqlSessionFactory的bean名称 -->
66         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
67         <!-- 指定SqlSessionTemplate的bean名称,优先级高于SqlSessionFactory -->
68         <!-- <property name="sqlSessionTemplateBeanName" value="com.hyc.mapper"
69             /> -->
70         <!-- 当包下的类被这个注解@Repository标示的时候才会被扫描 -->
71         <property name="annotationClass" value="org.springframework.stereotype.Repository" />
72     </bean>
73
74     <bean id="product" class="com.hyc.pojo.Product">
75         <property name="id" value="28"></property>
76         <property name="productName" value="皮鞋1"></property>
77         <property name="productPrice" value="208"></property>
78         <property name="productType" value="男鞋"></property>
79     </bean>
80
81 </beans>

上述配置种包括数据源、sqlSessionFactory、MapperScannerConfigurer的配置,还有注释部分的另外两种数据源配置方式和另外两种MyBatis-Spring的配置方式。

二、mybatis配置文件

数据源配置种的mybatis-config2.xml文件配置如下:

 1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4   "http://mybatis.org/dtd/mybatis-3-config.dtd">5 <!-- mybatis的基本配置文件:主要配置基本的上下文参数和运行环境 -->6 <configuration>7     <!--设置 -->8     <settings>9         <!--缓存配置的全局开关:如果这里设置成false,那么即便在映射器中配置开启也无济于事 -->
10         <setting name="cacheEnabled" value="true" />
11         <!--延时加载的全局开关 -->
12         <setting name="lazyLoadingEnabled" value="false" />
13         <!-- 是否允许单一语句返回多结果集 -->
14         <setting name="multipleResultSetsEnabled" value="false" />
15         <!-- 使用列标签代替列名,需要兼容驱动 -->
16         <setting name="useColumnLabel" value="true" />
17         <!-- 允许JDBC自动生成主键,需要驱动兼容。如果设置为true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍能正常工作 -->
18         <setting name="useGeneratedKeys" value="false" />
19         <!-- 指定MyBatis该如何自动映射列到字段或属性:NONE表示取消自动映射;PARTIAL表示只会自动映射,没有定义嵌套结果集和映射结果集;FULL会自动映射任意复杂的结果集,无论是否嵌套 -->
20         <setting name="autoMappingBehavior" value="PARTIAL" />
21         <!-- 配置默认的执行器:SIMPLE是普通的执行器;REUSE会重用预处理语句;BATCH会重用语句并执行批量更新 -->
22         <setting name="defaultExecutorType" value="SIMPLE" />
23         <!--设置超时时间:它决定驱动等待数据库响应的秒数,任何正整数 -->
24         <!-- <setting name="defaultStatementTimeout" value="25"/> -->
25         <!--设置数据库驱动程序默认返回的条数限制,此参数可以重新设置,任何正整数 -->
26         <!-- <setting name="defaultFetchSize" value="100" /> -->
27         <!-- 允许在嵌套语句中使用分页(RowBounds) -->
28         <setting name="safeRowBoundsEnabled" value="false" />
29         <!-- 是否开启自动驼峰命名规则,即从a_example到aExample的映射 -->
30         <setting name="mapUnderscoreToCamelCase" value="true" />
31         <!-- 本地缓存机制,防止循环引用和加速重复嵌套循环 -->
32         <setting name="localCacheScope" value="SESSION" />
33         <!-- 当没有为参数提供特定JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,如NULL/VARCHAR/OTHER -->
34         <setting name="jdbcTypeForNull" value="OTHER" />
35         <!-- 指定触发延迟加载的方法,如equals/clone/hashCode/toString -->
36         <setting name="lazyLoadTriggerMethods" value="equals" />
37     </settings>
38     <!--类型命名 -->
39     <!--别名:pojo对象的别名 -->
40     <typeAliases>
41         <!-- 对包进行扫描,可以批量进行别名设置,设置规则是:获取类名称,将其第一个字母变为小写 -->
42         <package name="com.hyc.pojo" />
43         <package name="com.hyc.objectfactory" />
44         <package name="com.hyc.bean" />
45         <package name="com.hyc.dao" />
46     </typeAliases>
47     <!--插件 -->
48     <!-- <plugins /> -->
49     <!-- 映射器 -->
50     <mappers>
51         <mapper resource="com/hyc/mapper/ProductMapper.xml" />
52     </mappers>
53
54 </configuration>

三、创建映射器

1⃣️创建接口,增加@Repository注解标示

 1 @Repository
 2 public interface ProductMapper {3 4     int insertProduct(Product product);5 6     int deleteByPrimaryKey(String id);7 8     int updateByPrimaryKey(Product product);9
10     List<Product> selectProducts(String name);
11
12 }

注意使用注解,否则将不会被扫描到,在spring种往往使用注解@Repository表示数据访问层(DAO)

2⃣️创建对应的mapper文件

 1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">3 <mapper namespace="com.hyc.dao.ProductMapper">4     <resultMap id="BaseResultMap" type="com.hyc.pojo.Product">5         <id column="id" jdbcType="VARCHAR" property="id" />6         <result column="product_name" jdbcType="VARCHAR" property="productName" />7         <result column="product_price" jdbcType="VARCHAR" property="productPrice" />8         <result column="product_type" jdbcType="VARCHAR" property="productType" />9     </resultMap>
10     <sql id="Base_Column_List">
11         id, product_name, product_price, product_type
12     </sql>
13
14     <!-- 查询所有产品 -->
15     <select id="selectProducts" resultMap="BaseResultMap" parameterType="String">
16         select * from product where product_name like concat('%',#{name},'%')
17     </select>
18
19     <!-- 插入产品 -->
20     <insert id="insertProduct" parameterType="com.hyc.pojo.Product">
21         insert into product
22         (id,
23         product_name, product_price,
24         product_type)
25         values
26         (#{id,jdbcType=VARCHAR}, #{productName,jdbcType=VARCHAR},
27         #{productPrice,jdbcType=VARCHAR},
28         #{productType,jdbcType=VARCHAR})
29     </insert>
30
31     <!-- 根据ID删除产品 -->
32     <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
33         delete from
34         product
35         where id = #{id,jdbcType=VARCHAR}
36     </delete>
37
38     <!--修改产品 -->
39     <update id="updateByPrimaryKey" parameterType="com.hyc.pojo.Product">
40         update product
41         set
42         product_name = #{productName,jdbcType=VARCHAR},
43         product_price =
44         #{productPrice,jdbcType=VARCHAR},
45         product_type =
46         #{productType,jdbcType=VARCHAR}
47         where id = #{id,jdbcType=VARCHAR}
48     </update>
49 </mapper>

四、单元测试

1⃣️基本类

用来初始化ClassPathXmlAppicationContext,从而获取bean、mapper等

 1 public class BaseTest {2 3     public SqlSessionTemplate template = null;4     ClassPathXmlApplicationContext context = null;5 6     @Before7     public void before() {8         context = new ClassPathXmlApplicationContext("classpath:spring-mybatis.xml");9         template = context.getBean(SqlSessionTemplate.class);
10     }
11 }

通过传入spring-mybatis的配置文件初始化ClassPathXmlApplicationContext

2⃣️测试类

 1 public class TestMapperFactoryBean extends BaseTest {2 3     @Test4     public void testInsert() {5         ProductMapper pm = super.context.getBean(ProductMapper.class);6         Product product = super.context.getBean(Product.class);7         int add = pm.insertProduct(product);8         System.out.println(add > 0 ? "插入成功" : "插入失败");9     }
10
11     @Test
12     public void testDelete() {
13         ProductMapper pm = super.context.getBean(ProductMapper.class);
14         int del = pm.deleteByPrimaryKey("8cb4fc3a-dd71-46e9-a0de-0e8b967a127c");
15         System.out.println(del > 0 ? "删除成功" : "删除失败");
16     }
17
18     @Test
19     public void testUpdate() {
20         ProductMapper pm = super.context.getBean(ProductMapper.class);
21         Product product = super.context.getBean(Product.class);
22         product.setProductName("测试修改");
23         product.setProductPrice("修改后价格");
24         product.setProductType("修改后分类");
25         int update = pm.updateByPrimaryKey(product);
26         System.out.println(update > 0 ? "修改成功" : "修改失败");
27     }
28
29     @Test
30     public void testSelect() {
31         ProductMapper pm = super.context.getBean(ProductMapper.class);
32         List<Product> pl = pm.selectProducts("T");
33         System.out.println(pl.size());
34     }
35 }

测试结果都是成功,将不再贴出。

至此,MyBatis-Spring项目的搭建过程总结完毕。

最美好的时光里,不要一直是一个lowser!

MyBatis-Spring(五)--MapperScannerConfigurer实现增删改查相关推荐

  1. Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例

    <p>这篇文章介绍如何使用 Jpa 和 Thymeleaf 做一个增删改查的示例.</p> 先和大家聊聊我为什么喜欢写这种脚手架的项目,在我学习一门新技术的时候,总是想快速的搭 ...

  2. MyBatis的Mapper 代理的增删改查操作(三)

    沉迷于黑与白世界中的人,无论怎么挣扎,都逃不过被同化的命运.前世看见了什么,那么今世便是什么. 上一章简单介绍了MyBatis的命名空间方式的增删改查操作(二),如果没有看过,请观看上一章. 一. M ...

  3. mybatis从零基础到增删改查数据库

    本文是mybatis框架一个初步的入门总结,最全的最好的资料应该参考这个:http://mybatis.github.io/mybatis-3/zh/index.html 本文在Eclipse下搭建一 ...

  4. mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数

    mybatis复习02,简单的增删改查 创建数据表 user_info 在项目中创建数据表对应的实体类 UserInfo.java 在pom.xml文件中引入依赖 创建核心配置文件mybatis-co ...

  5. Mybatis实现简单的数据库增删改查操作

    简介: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Ma ...

  6. (转)Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例

    http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html 这篇文章介绍如何使用 Jpa 和 ...

  7. spring boot(十五)spring boot+thymeleaf+jpa增删改查示例

    快速上手 配置文件 pom包配置 pom包里面添加jpa和thymeleaf的相关包引用 <dependency><groupId>org.springframework.bo ...

  8. SpringBoot使用Redis和MyBatis完成缓存数据的增删改查

    文章目录 1.在Spring Boot中集成Redis 2.配置Redis类 关于Redis Template中序列化和反序列化配置的解释 3.创建测试实体类 4.实现实体和数据表的映射关系 5.创建 ...

  9. Spring Boot整合Mybatis-Plus 增删改查+ 分页基本使用完整示例

    写在前面 MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 "裸MyBatis",不来点增强插件都不好意思了.这不,在上一篇文章<Spring Boot项目利用 ...

最新文章

  1. 刷前端面经笔记(十一)
  2. 量化集体行为特刊:信息论为量化集体性提供形式化框架
  3. 基于增强现实和脑机接口的机械臂控制系统
  4. Python面试题:如何判断字典a在字典b
  5. ribbon源码(1) 概述
  6. 使用Redis的简单消息队列
  7. 一个快速生成元素背景的 React 组件
  8. 指纹识别 python_python 网站指纹识别
  9. (软件工程复习核心重点)第二章可行性研究习题
  10. Java拓展(数据类型及其大小)
  11. 第13章 使用ADO.NET访问数据库
  12. 风控策略分析中最重要的五步心法
  13. 如何理解 RxJS?RxJS的中文API和使用教程
  14. 史上最经典Java入门基础视频,没有之一!
  15. SurfaceView 之满屏的代码雨效果
  16. struts2 拦截器返回值问题
  17. 配置localhost
  18. gitlab:切换远程仓库
  19. git clone项目文件时报错解决remote: Enumerating objects: 19, done. remote: Counting objects: 100% (19/19), don
  20. 2011年9月30日

热门文章

  1. Codeforces--701B--Cells Not Under Attack
  2. Linux双独立显卡SLI,完美的解决方案:双显卡不需要使用双水冷Tt提供SLi冷却解决方案...
  3. Mac没有winnt格式_好用易操作,适用于Mac用户的5个免费FLV视频播放器
  4. hapi_带有节点和Hapi后端的Angular文件上传
  5. 一对一、一对多、多对多(实操)
  6. SAP固定资产模块的表
  7. 什么是人工智能?你需要知道的关于人工智能的一切
  8. 自定义桌面右键菜单-Win 10 版
  9. BZOJ2144: 跳跳棋
  10. csgo为什么显示vac无法连接服务器,csgovac无法验证您的游戏会话怎么办 看完你就知道了...