zoukankan      html  css  js  c++  java
  • mybatis注解开发

    MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置。MyBatis提供的一些基本注解如下表所示。

    注解

    目标

    相应的XML

    描述

    @CacheNamespace

    <cache>  

    为给定的命名空间(比如类)配置缓存。属性:

    implemetation,eviction,

    flushInterval , size 和 readWrite 。

    @CacheNamespaceRef

    <cacheRef>

    参照另外一个命名空间的缓存来使用。

    属性:value,也就是类的完全限定名。

    @ConstructorArgs

    方法

    <constructor>

    收集一组结果传递给对象构造方法。

    属性:value,是形式参数的数组

    @Arg

    方法

    <arg>

    <idArg>

    单独的构造方法参数,是ConstructorArgs  集合的一部分。属性:id,column,javaType,typeHandler。

    id属性是布尔值,来标识用于比较的属性,和<idArg>XML 元素相似

    @TypeDiscriminator

    方法

    <discriminator>

    一组实例值被用来决定结果映射的表

    现。属性:Column, javaType ,  jdbcType typeHandler,cases。

    cases属性就是实例的数组。

    @Case

    方法

    <case>

    单独实例的值和它对应的映射。属性:value  ,type ,results 。

    Results 属性是结果数组,因此这个注解和实际的ResultMap 很相似,由下面的  Results注解指定

    @Results

    方法

    <resultMap>

    结果映射的列表,包含了一个特别结果

    列如何被映射到属性或字段的详情。

    属性:value ,是Result注解的数组

    @Result

    方法

    <result>

    <id>

    在列和属性或字段之间的单独结果映

    射。属性:id ,column , property,

    javaType ,jdbcType ,type Handler ,

    one,many。id 属性是一个布尔值,表

    示了应该被用于比较的属性。one属性是单独的联系,和 <association> 相似,而many 属性是对集合而言的,和

    <collection>相似。

    @One

    方法

    <association>  

    复杂类型的单独属性值映射。属性:

    select,已映射语句(也就是映射器方

    法)的完全限定名,它可以加载合适类

    型的实例。注意:联合映射在注解API

    中是不支持的。

    @Many

    方法

    <collection>

    复杂类型的集合属性映射。属性:

    select,是映射器方法的完全限定名,它可加载合适类型的一组实例。注意:联合映射在 Java注解中是不支持的。

    @Options

    方法

    映射语句的属性

    这个注解提供访问交换和配置选项的宽广范围,它们通常在映射语句上作为属性出现。而不是将每条语句注解变复杂,Options 注解提供连贯清晰的方式来访问它们。属性:useCache=true,

    flushCache=false,

    resultSetType=FORWARD_ONLY,

    statementType=PREPARED,

    fetchSize= -1,timeout=-1 ,

    useGeneratedKeys=false ,

    keyProperty=”id“。

    理解Java 注解是很重要的,因为没有办法来指定“null ”作为值。因此,一旦你使用了 Options注解,语句就受所有默认值的支配。要注意什么样的默认值来避免不期望的行为

    @Insert

    @Update

    @Delete

    方法

    <insert>

    <update>

    <delete>

    这些注解中的每一个代表了执行的真实 SQL。它们每一个都使用字符串数组(或单独的字符串)。如果传递的是字符串数组,它们由每个分隔它们的单独空间串联起来。属性:value,这是字符串数组用来组成单独的SQL语句

    @InsertProvider

    @UpdateProvider

    @DeleteProvider

    @SelectProvider

    方法

    <insert>

    <update>

    <delete>

    <select>

    允许创建动态

    SQL。

    这些可选的SQL注解允许你指定一个

    类名和一个方法在执行时来返回运行

    的SQL。基于执行的映射语句, MyBatis

    会实例化这个类,然后执行由 provider

    指定的方法. 这个方法可以选择性的接

    受参数对象作为它的唯一参数,但是必

    须只指定该参数或者没有参数。属性:

    type,method。type 属性是类的完全限定名。method  是该类中的那个方法名。

    @Param

    参数

    N/A

    当映射器方法需多个参数,这个注解可以被应用于映射器方法参数来给每个参数一个名字。否则,多参数将会以它们的顺序位置来被命名。比如

    #{1},#{2} 等,这是默认的。

    使用@Param(“person”),SQL中参数应该被命名为#{person}。

    测试select,insert,update,delete操作

    实体类:

    项目结构:

    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">
    <!-- XML 配置文件包含对 MyBatis 系统的核心设置 -->
    
    <configuration>
        <properties resource="db.properties" />
        
        <settings>
            <!-- 指定 MyBatis 所用日志的具体实现 -->
            <setting name="logImpl" value="STDOUT_LOGGING"/>
            <!-- 打开懒加载的开关 -->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!-- 将积极加载改为消极加载 -->
            <setting name="aggressiveLazyLoading" value="false"/>
        </settings>
        <!-- 定义别名 位置在setting之后 -->
        <!--     
        <typeAliases>
            <typeAlias alias="user" type="org.model.User"></typeAlias>
        </typeAliases> 
        -->
        <!-- 别名定义 推荐这种方式 扫描该包中的实体类以及子包中的实体类-->
         <typeAliases>
            <package name="model"/>
        </typeAliases>
        
        <environments default="mysql">
            <!-- 环境配置,即连接的数据库。 -->
            <environment id="mysql">
                <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
                <transactionManager type="JDBC" />
                <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}" />
                    <property name="url" value="${url}" />
                    <property name="username" value="${username}" />
                    <property name="password" value="${password}" />
                </dataSource>
            </environment>
        </environments>
        <!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 -->
        <mappers>
            <!-- <mapper resource="org/mapper/ten/proxy/UserMapper.xml"/> -->
            <mapper class="Intefaceproxy.UserInterfaceMapper"/>
        </mappers>
    </configuration> 

    可以看到之前的xxxMapper.xml文件已经删除不需要引入了  而引入的则是一个接口  下面分别进行测试

    @insert

    @delete

     

     

    @select

     

    @update

    -------------------------------------------

    @One 一对一关系测试

    对应的实体类

    Person

    Card

     

    mybatis-config.xml中配置mapper接口的位置

    CardMapper接口

    PersonMapper接口

    测试:

    --------------------------

    一对多关系测试

    Student

    Clazz

     

    mybatis-config.xml中配置mapper接口的位置

    StudentMapper接口

    ClazzMapper接口

    测试:

     --------------------------------

    多对多关系测试

    实体类以及表关系

    user表

    article表

    orders表

    中间表item:

     mybatis-config.xml中配置mapper接口的位置

    userMapper接口:

    articleMapper接口:

    ordersMapper接口:

    测试:

    --------------------------

  • 相关阅读:
    设计模式(三):装饰模式
    实战pythoninstagram
    设计模式(二):观察者模式
    instagram 的api研究
    设计模式(四):代理模式
    设计模式(五):工厂模式
    qq微博oauth认证记录
    js 处理json数据记录
    17Django高级之Auth
    20Django高级之信号
  • 原文地址:https://www.cnblogs.com/Joke-Jay/p/8521695.html
Copyright © 2011-2022 走看看