运用mybatis3.0 annotation接口简化数据访问
使用mybatis3.0 annotation接口简化数据访问
数据访问进化简史,比较简单,不负责能跑起来
- 一、原始的sql
select address from user where name='test'
- 二、jdbc
//若干操作 String sql="select address from user where name='"+name+"'"; //执行 //解析结果 //包括若干个try catch
解决了java到数据库的访问,但是存在大量的复制代码,并且异常需要自己处理
- 三、ibatis2.0代码
<!--大量的XML定义文件--> <select id="queryAddressByName" parameterType="String" resultType="String"> select address from user where name=#{name} </select>
Class UserDao{ //大量的常量定义 final static private String QUERY_ADDRESS_BY_NAME= getClass()+"queryAddressByName"; String queryAddressByName(final String name){ final String address=sqlMapper.selectforObject(QUERY_ADDRESS_BY_NAME, name); return address; } }
主要优势
- sql和java代码分离
- 不需要关注数据库连接和关闭
- 不需要关注数据获取方式
主要不足
- 大量的xml及后续管理问题
- 会看到大量的final static String QUERY_ADDRESS_BY_NAME= getClass()+"queryAddressByName"这样的sqlmapper名字
- 四、Mybatis 3.0
Mybatis 3.0通过引入注解,解决了上述不足
@Select等注解减少XML文件
@repository注解使用接口减少常量定义
- 4.1、@repository
@repository interface UserMapper{ String queryAddressByName(String name); }
<select id="queryAddressByName" parameterType="String" resultType="String"> select address from user where name=#{name} </select>
此接口可以通过访问2.0的xml
并且spring的整合直接访问,使用方法名关联,不需要实现类
调用代码
Class UserDao{ @autowired private userMapper mapper; String queryAddressByName(final String name){ final String address=mapper.queryAddressByName(name); return address; } }
主要改进:
- 2.0中大量的常量字符串被使用函数名称代替
- 与2.0原有xml资源能平稳过渡
- 4.2、@Select和@Param等
@repository interface userMapper{ @select("select address from user where name=#{name}") String queryAddressByName(String name) }
使用annotation方式下不需要产生xml,调用代码不变
对于同一个mapper接口来说可以混用xml和annotation方式
参数上的annotation
@repository interface userMapper{ @select("select address from user where name=#{name} and gender=#{gender}" String queryAddressByName(@param(value="name" String name, @param(value="gender") String gender) }
参数annotation还可以和xml混搭
@repository interface userMapper{ String queryAddressByNameAndGender(@param(value="name" String name, @param(value="gender") String gender); }
<select id="queryAddressByNameAndGender" resultType="String"> select address from user where name=#{name} and gender=#{gender} </select>
主要改进;
- xml被大量减少,管理难度降低
- Ibatis annotation的优势
- 减少xml,减少了java到xml的映射,目前的IDE上java用起来还是要比xml友好
- 通过接口访问而不是类似2.0中字符串指定sqlmapper名,看不到一堆常量String
- 通过在mapper接口参数上的@param可以输入多个参数,减少模糊化的hashmap使用,让接口定义更加精确