`

使用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;
	}
}

 

主要优势

 

  1. sql和java代码分离
  2. 不需要关注数据库连接和关闭
  3. 不需要关注数据获取方式
主要不足
  1. 大量的xml及后续管理问题
  2. 会看到大量的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;
	}
}

主要改进:

  1. 2.0中大量的常量字符串被使用函数名称代替
  2. 与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使用,让接口定义更加精确

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics