注解方式就是将SQL语句直接写在接口上,对于需求比较简单的系统,效率较高。缺点在于,每次修改sql语句
都要编译代码,对于复杂的sql语句可编辑性和可读性都差,一般不建议使用这种配置方式;
包含下面几种
@Select
@Results
@Insert
@Update
@Delete
mapper接口示例:
@Results(id="jobInfo",value={
@Result(property="id",column="id",id = true),
@Result(property="userId",column="user_id"),
@Result(property="compName",column="comp_name"),
@Result(property="years",column="years"),
@Result(property="title",column="title")
})
@Select("select id, user_id, comp_name, years, title from t_job_history"
+ " where user_id = #{userId}")
List<TJobHistory> selectByUserId(int userId);
@ResultMap("jobInfo")
@Select("select id, user_id, comp_name, years, title from t_job_history")
List<TJobHistory> selectAll();
@Insert("insert into t_job_history (id, user_id, comp_name, years, title)"
+ " values (#{id,jdbcType=INTEGER}, #{userId,jdbcType=INTEGER},"
+ "#{compName,jdbcType=VARCHAR},"
+ "#{years,jdbcType=INTEGER}, #{title,jdbcType=VARCHAR})")
@Options(useGeneratedKeys=true,keyProperty="id")
int insert(TJobHistory record);
测试方法:
@Test
// 注解测试
public void testAnno() {
// 2.获取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.获取对应mapper
TJobHistoryAnnoMapper mapper = sqlSession.getMapper(TJobHistoryAnnoMapper.class);
List<TJobHistory> list = mapper.selectByUserId(1);
System.out.println(list.size());
List<TJobHistory> listAll = mapper.selectAll();
System.out.println(listAll.size());
TJobHistory job = new TJobHistory();
job.setTitle("产品经理");
job.setUserId(1);
job.setCompName("美团");
job.setYears(3);
mapper.insert(job);
System.out.println(job.getId());
}