From《MyBatis从入门到精通》java
第一步,在接口中添加方法:sql
public interface UserMapper { SysUser selectById(Long id); }
第二步,完成映射文件:数据库
<?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="tk.mybatis.simple.mapper.UserMapper"> <!-- 对接口和接口方法映射的讲解: XML与接口是经过namespace的值设置为接口的全限定名称进行关联 XML与接口中的方法是经过select标签的id属性值和定义的接口方法名一致进行关联 若是接口方法中没有和XML中的id属性值相对应,启动程序就会报错。 映射XML和接口的命名须要符合以下规则: 1.当只只用XML而不使用接口的时候,namespace的值能够设置为任意不重复的名称 2.标签的id属性值在任什么时候候都不能出现英文句号“.”,而且同一个命名空间下不能出现重复的id 3.由于接口中的方法是能够重载的,因此接口中全部的同名方法会对应XML中的同一个id的方法。 最多见的用法是,同名方法中其中一个增长衣蛾RowBound类型的参数用于实现分页查询。 --> <!-- resultMap是一种很重要的配置结果映射的方法,resultMap的属性: id:必填,而且惟一。 type:用于配置查询列所映射到的Java对象类型 extends:选填,能够配置当前的resultMap继承自其余的resultMap,属性值为继承resultMap的id autoMapping:选填,用于配置是否启用非映射字段(没有在resultMap中配置的字段)的自动映射功能 该配置能够覆盖全局的autoMappingBehavior配置(!!!针对没有在resultMap中配置的字段) resultMap包含的标签: <constructor>:配置用构造方法注入结果,包含两个字标签 <idArg>:id参数,标记结果做为id(惟一值),能够帮助提升总体性能 <arg>:注入到构造方法的一个普通结果 <id>:id参数,标记结果做为id(惟一值),能够帮助提升总体性能 <result>:主导到Java对象属性的普通结果 ==================================================== 后面会详细讲解的部分 ==================================================== <association>:一个复杂的类型关联,许多结果将包装成这种类型 <collection>:复杂类型的集合 <discriminator>:根据结果值来决定使用哪一个结果映射 <case>:基于某些值的结果映射 ==================================================== ==================================================== id和result标签包含的属性: column:从数据库获得的列名(来源于数据库的数据) property:映射到列结果的属性(来源与resultMap标签type属性指明的对象的属性) =================================================================== 这部分我尚未遇到过,还不是很熟悉 =================================================================== javaType:若是映射到一个JavaBean,Mybatis一般能够自动的判断属性的类型 若是映射到HashMap,则须要明确的指明javaType。 jdbcType:列对应的数据库类型。JDBC类型仅仅须要对插入、更新、删除操做可能为空 的列进行处理。这是JDBC jdbcType的须要,而不是MyBatis的须要。 typeHandler:使用这个属性能够覆盖默认的类型处理器。这个属性值是类的彻底限定 名或者类型别名。 =================================================================== =================================================================== --> <resultMap id="userMap" type="tk.mybatis.simple.model.SysUser"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="userPassword" column="user_password"/> <result property="userEmail" column="user_email"/> <result property="userInfo" column="user_info"/> <result property="headImg" column="head_img" jdbcType="BLOB"/> <result property="createTime" column="user_password" jdbcType="TIMESTAMP"/> </resultMap> <!-- <select>:映射查询语句使用的标签 id:命名空间惟一标识符,可用来表明这句话 resultMap:用来设置返回值的类型和映射关系 #{id}:MyBatis SQL中使用预编译参数的一种方式,这个id须要与形式参数如出一辙么 --> <select id="selectById" resultMap="userMap"> SELECT * FROM sys_user WHERE id = #{id} </select> </mapper>
第三步,如何在程序中使用mybatis
@Test public void testSelectById(){ SqlSession sqlSession=getSqlSession(); try{ /* 这个地方和之前的代码比,已经发生了变化: List<Country> countryList = sqlSession. selectList("tk.mybatis.simple.mapper.CountryMapper.selectAll"); 之前这个地方,使用的是从sqlSession中经过xml文件的命名空间集selectId找到一个方法, 而如今直接经过接口的方式,相对而言十分的方便。 */ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); SysUser user = userMapper.selectById(1L); Assert.assertNotNull(user); Assert.assertEquals("admin",user.getUserName()); }finally { sqlSession.close(); } }