zoukankan      html  css  js  c++  java
  • mybatis通用mapper的使用

           项目中持久层封装了两套,一个hibernate,一个是mybatis。hibernate中封装了一些通用的方法,但是mybatis中没有,基于这个需求开始使用mybatis的通用mapper。

           通用mapper有什么好处呢?以往我们使用mapper文件都是自己写sql语句,针对的是单个实体,也就是每个实体都有其对应的mapper文件。使用通用mapper给我们带来了极大的方便,它不需要mapper.xml文件,只需我们调用相应的接口,引入jar包再进行简单的配置就好了。下面是使用中的一些总结。
    首先我们要创建自己的接口来继承Mapper<T>,其中的T必须实现,也就是必须指定类型:
    import com.github.abel533.mapper.Mapper;
    @Repository("courseDao")
    public interface CourseDao extends Mapper<Course>{}
    这样我们就拥有了Mapper中的通用方法
    如果是maven项目,在pom文件中添加如下依赖即可:
     
    <!-- 通用Mapper -->
    <dependency>
    <groupId>com.github.abel533</groupId>
    <artifactId>mapper</artifactId>
    <version>2.3.4</version>
    </dependency>
    接下来就是修改mybatis配置文件,我们的配置文件都是通过spring来管理的,在网上查到一些资料,如果使用spring管理,直接在配置文件中按照如下配置即可:
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations">
    <array>
    <value>classpath:mapper/*.xml</value>
    </array>
    </property>
    <property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity"/>
    <property name="plugins">
    <array>
    <-- 主要看这里 -->
    <bean class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/>
    </array>
    </property>
    </bean>
    注意typeAliasesPackage的value对应的是你自己的实体的类名。
    按照上述配置mybatis配置文件总是报如下错误:
    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (com.github.abel533.mapper.MapperProvider.dynamicSQL). Cause: java.lang.InstantiationException: com.github.abel533.mapper.MapperProvider
    查询无果,换另一种方式,将mybatis的配置文件单独抽出,在spring中进行引用,如下
    spring-mybatis配置文件:
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:mapper/*.xml" />
    <property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity" />
    <!-- mybatis全局配置文件 -->
    <property name="configLocation" value="classpath:spring/mybatis-config.xml" />
    </bean>
    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">
    <configuration>
    <plugins>
    <!-- 通用Maper -->
    <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
    <!-- 主键自增回写方法,默认值MYSQL,详细说明请看文档 -->
    <property name="IDENTITY" value="MYSQL" />
    <!-- 通用Mapper接口,多个通用接口用逗号隔开 -->
    <property name="mappers" value="com.github.abel533.mapper.Mapper" />
    </plugin>
    </plugins>
     
    </configuration>
    运行,ok
     

    注意

    泛型(实体类)<T>的类型必须符合要求
    实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:
    1. 表名默认使用类名,驼峰转下划线,如UserInfo默认对应的表名为user_info.
    2. 表名可以使用@Table(name = "tableName")进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.
    3. 字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.
    4. 可以使用@Column(name = "fieldName")指定不符合第3条规则的字段名
    5. 使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用.
    6. 建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.
    7. 默认情况下,实体类中如果不存在包含@Id注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).
    8. 实体类可以继承使用,可以参考测试代码中的com.github.abel533.model.UserLogin2类.
    9. 由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型.
    除了上面提到的这些,Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。
     
     
    补充:
    后来找到了通过spring管理mybatis的方法,不需要单独抽出mybatis的配置文件,修改spring-mybatis.xml如下:
    [html] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    2.         <property name="dataSource" ref="dataSource" />  
    3.         <property name="mapperLocations" value="classpath:mapper/*.xml" />  
    4.         <property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity" />  
    5.         <property name="plugins">  
    6.             <array>  
    7.                 <bean class="com.github.abel533.mapperhelper.MapperInterceptor">  
    8.                     <property name="properties">  
    9.                         <value>  
    10.                             mappers=com.github.abel533.mapper.Mapper  
    11.                             IDENTITY=MYSQL  
    12.                             notEmpty=true  
    13.                         </value>  
    14.                     </property>  
    15.                 </bean>  
    16.             </array>  
    17.         </property>  
    18.         <!-- mybatis全局配置文件 -->  
    19.         <!-- <property name="configLocation" value="classpath:spring/mybatis-config.xml"></property> -->  
    20.     </bean>  

    http://blog.csdn.net/xfz0330/article/details/52275192

  • 相关阅读:
    Java 简单算法--打印乘法口诀(只使用一次循环)
    Java简单算法--求100以内素数
    ubuntu 16.04 chrome flash player 过期
    java 网络API访问 web 站点
    java scoket (UDP通信模型)简易聊天室
    leetcode1105 Filling Bookcase Shelves
    leetcode1140 Stone Game II
    leetcode1186 Maximum Subarray Sum with One Deletion
    leetcode31 Next Permutation
    leetcode834 Sum of Distances in Tree
  • 原文地址:https://www.cnblogs.com/softidea/p/6629625.html
Copyright © 2011-2022 走看看