使用mybatis3.0 annotation接口简化数据访问

本文概述了数据访问技术的演进历程,从原始的SQL查询,通过JDBC的实现,到引入iBATIS简化过程,最终过渡到MyBatis 3.0利用注解进行更高效的数据访问。详细阐述了每一步的优缺点及如何通过MyBatis注解减少XML文件、提高接口清晰度和参数管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据访问进化简史,比较简单,不负责能跑起来

  • 一、原始的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使用,让接口定义更加精确

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值