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属性是布尔值,来标识用于比较的属性,和XML 元素相似@TypeDiscriminator方法<discriminator>一组实例值被用来决定结果映射的表现。属性:Column, javaType , jdbcType typeHandler,cases。cases属性就是实例的数组。@Results方法<resultMap>结果映射的列表,包含了一个特别结果列如何被映射到属性或字段的详情。属性:value ,是Result注解的数组@Case方法<case>单独实例的值和它对应的映射。属性:value ,type ,results 。Results 属性是结果数组,因此这个注解和实际的ResultMap 很相似,由下面的 Results注解指定@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}。注意:如果使用注解开发,xxmapper.xml映射文件可以不用书写
下面进行代码,实现示例:
创建项目(数据库准备,添加依赖) <dependencies> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <!-- 测试用例 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <!-- 日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.4</version> </dependency> </dependencies> 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> <!-- 引入外部的配置文件 --> <properties resource="jdbc.properties"></properties> <!-- 开启驼峰匹配 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 类别名 --> <typeAliases> <package name="cn.yanqi.pojo"/> </typeAliases> <!-- 连接数据库相关的配置 后面不用写,spring代替--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driverClass}"/> <property name="url" value="${url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper class="cn.yanqi.com.UserMapper"/> </mappers> </configuration> Jdbc.properties driverClass=com.mysql.jdbc.Driver url=jdbc:mysql:///mybatis jdbc.username=root jdbc.password=root实体类就不写了!!! 4. Dao接口
