数据访问进化简史,比较简单,不负责能跑起来
select address from user where name='test'
//若干操作 String sql="select address from user where name='"+name+"'"; //执行 //解析结果 //包括若干个try catch
解决了java到数据库的访问,但是存在大量的复制代码,并且异常需要自己处理
<!--大量的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; } }
主要优势
@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; } }
主要改进:
@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>
主要改进;