10. Développement des annotations Mybatis
10.1 Qu'est-ce que le développement d'annotations
Les informations de configuration initiales de Mybatis sont basées sur XML, et la déclaration de mappage (SQL) est également définie en XML. Et pour MyBatis 3 propose une nouvelle configuration basée sur des annotations. L'utilisation de la méthode de développement d'annotations peut réduire le besoin d'écrire des fichiers de mappage Mapper.
10.2 Annotations couramment utilisées
annotation | décrire |
---|---|
@Insérer | Nouvelle configuration |
@Mise à jour | mise à jour de la configuration |
@Supprimer | suppression de la configuration |
@Sélectionner | requête de configuration |
@Options | Configurez le retour de la clé primaire, désactivez le cache secondaire et d'autres fonctions |
@Résultat | encapsulation du jeu de résultats |
@Résultats | Utiliser avec @Result pour encapsuler plusieurs ensembles de résultats |
@ResultMap | Fait référence au package défini par @Results |
@Un | Encapsulation d'ensemble de résultats un à un |
@Beaucoup | Encapsulation d'ensemble de résultats un-à-plusieurs |
@SelectProvider | Mappage SQL dynamique |
@CacheNamespace | Cache L2 |
@Param | Entrez plusieurs paramètres |
@Mappeur | Donnez le mappeur DAO à la gestion de Spring et intégrez-le avec |
10.3 Classes d'entités
10.3.1 Classe Département
public class Dept {
private Integer deptno;
private String dname;
private String loc;
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "Dept{" +
"deptno=" + deptno +
", dname='" + dname + '\'' +
", loc='" + loc + '\'' +
'}';
}
}
10.3.2 Catégorie d'employés
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double comm;
private Integer deptno;
private Dept dept;
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHiredate() {
return hiredate;
}
public void setHiredate(Date hiredate) {
this.hiredate = hiredate;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public Double getComm() {
return comm;
}
public void setComm(Double comm) {
this.comm = comm;
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"empno=" + empno +
", ename='" + ename + '\'' +
", job='" + job + '\'' +
", mgr=" + mgr +
", hiredate=" + hiredate +
", sal=" + sal +
", comm=" + comm +
", deptno=" + deptno +
", dept=" + dept +
'}';
}
}
10.4 Ajout, suppression, modification et différence d'un seul tableau
10.4.1 interface du mappeur
public interface DeptMapper {
@Select("select deptno,dname,loc from dept")
List<Dept> select();
@Select("select deptno,dname,loc from dept where deptno = #{deptno}")
Dept selectById(Integer deptno);
@Insert("insert into dept(dname,loc) values (#{dname}, #{loc})")
@Options(useGeneratedKeys = true, keyProperty = "deptno", keyColumn = "deptno")
void insert(Dept dept);
@Update("update dept set dname = #{dname},loc=#{loc} where deptno = #{deptno}")
void update(Dept dept);
@Delete("delete from dept where deptno=#{deptno}")
void delete(Integer deptno);
}
10.4.2 Essais
public class AnnotationTest {
@Test
public void testSelect() {
SqlSession sqlSession = MybatisUtil.getSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
List<Dept> list = deptMapper.select();
for (Dept dept : list) {
System.out.println(dept);
}
sqlSession.close();
}
@Test
public void testSelectById() {
SqlSession sqlSession = MybatisUtil.getSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = deptMapper.selectById(10);
System.out.println(dept);
sqlSession.close();
}
@Test
public void testInsert() {
SqlSession sqlSession = MybatisUtil.getSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = new Dept();
dept.setDname("aa");
dept.setLoc("aa");
deptMapper.insert(dept);
sqlSession.commit();
System.out.println("主键:" + dept.getDeptno());
sqlSession.close();
}
@Test
public void testUpdate() {
SqlSession sqlSession = MybatisUtil.getSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
Dept dept = new Dept();
dept.setDeptno(41);
dept.setDname("bb");
dept.setLoc("bb");
deptMapper.update(dept);
sqlSession.commit();
sqlSession.close();
}
@Test
public void testDelete() {
SqlSession sqlSession = MybatisUtil.getSession();
DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
deptMapper.delete(41);
sqlSession.commit();
sqlSession.close();
}
}
10.5 Cartographie des relations biunivoques
10.5.1 interface du mappeur
public interface EmpMapper {
/*
* 手动映射resultMap标签
* @Results + @Result注解替代
* @Results = resultMap标签
* @Result = resultMap标签的子标签id和result
*/
@Select("select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp")
@Results(id = "selectResultMap",
value = {
@Result(id = true, column = "empno", property = "empno"),
@Result(column = "ename", property = "ename"),
@Result(column = "job", property = "job"),
@Result(column = "mgr", property = "mgr"),
@Result(column = "hiredate", property = "hiredate"),
@Result(column = "sal", property = "sal"),
@Result(column = "comm", property = "comm"),
@Result(column = "deptno", property = "deptno"),
@Result(column = "deptno", property = "dept", javaType = Dept.class,
one = @One(select = "com.newcapec.dao.DeptDao.selectById", fetchType = FetchType.LAZY))
})
List<Emp> select();
@Select("select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp where empno=#{empno}")
@ResultMap("selectResultMap")
Emp selectById(Integer empno);
}
10.5.2 Essais
@Test
public void testSelectEmp() {
SqlSession sqlSession = MybatisUtil.getSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> empList = empMapper.select();
for (Emp emp : empList) {
System.out.println(emp);
}
sqlSession.close();
}
@Test
public void testSelectEmpById() {
SqlSession sqlSession = MybatisUtil.getSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = empMapper.selectById(7369);
System.out.println(emp);
sqlSession.close();
}