一、面向接口编程:
好处:扩展性好,分层开发中,上层不用管具体的实现,大家都遵循共同的标准,使得开发变得容易。规范性更好
二、注解的实现:
1,编写DAO接口
public interface UserDao {
@Select("select * from user")
public List<User> getList();
@Insert("insert into user(name,pwd) values(#{name},#{pwd})")
public int insert(User user);
}
2,在核心配置文件中 导入
<mappers>
<mapper class="cn.sxt.dao.UserDao"/>
</mappers>
3,使用
public static void main(String[] args) throws IOException {
SqlSession session = MyBatisUtil.getSession();
UserDao userDao = session.getMapper(UserDao.class);
List<User> list = userDao.getList();
for(User u:list){
System.out.println(u);
}
}
三,注解方式实现ResultMap
1,方法一
①,创建UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 代表一个映射 -->
<mapper namespace="com.sxt.dao">
<!-- 创建自定义结果集 -->
<resultMap type="User" id="myUser">
<result property="id" column="uid" javaType="Integer" />
<result property="name" column="uname" />
<result property="address" column="uaddress"/>
<result property="sex" column="usex"/>
</resultMap>
</mapper>
②,在mybatis.cfg.xml里面配置UserMapper.xml
<!-- 加载自定义的mapper【写的就是sql】 注意要先配置xml再加载注解
因为在注解里面用到了XML里面的对象
-->
<mappers>
<mapper resource="com/sxt/dao/UserMapper.xml"/>
<mapper class="com.sxt.dao.UserDAO"/>
</mappers>
③,修改UserDAO
/**
* 全查询
*/
@Select("select id as uid,name as uname ,address as uaddress,sex as usex from user ")
@ResultMap("com.sxt.dao.myUser")
public List<User> queryAll();
④,测试
SqlSession session=MyBatisUtils.getSession();
UserDAO userDAO = session.getMapper(UserDAO.class);
List<User> list = userDAO.queryAll();
for (User user : list) {
System.out.println(user);
}
session.commit();
session.close();
2,方法二【推荐】
①,修改UserDAO
/**
* 全查询
*/
@Select("select id as uid,name as uname ,address as uaddress,sex as usex from user ")
@Results({
@Result(column="uid",property="id"),
@Result(column="uname",property="name"),
@Result(column="uaddress",property="address"),
@Result(column="usex",property="sex")
})
public List<User> queryAll();
②,测试
SqlSession session=MyBatisUtils.getSession();
UserDAO userDAO = session.getMapper(UserDAO.class);
List<User> list = userDAO.queryAll();
for (User user : list) {
System.out.println(user);
}
session.commit();
session.close();
四,注解方式实现一对多多对一【了解】
1,创建Dept
public class Dept {
private Integer deptno;
private String dname;
private String loc;
private Set<Emp> emps=new HashSet<>();
}
2,创建Emp
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Timestamp hiredate;
private Double sal;
private Double comm;
// 建立员工和部门的多多对一的关系
private Dept dept;
}
3,创建DeptDAO
public interface DeptDAO {
@Select("select * from dept")
@Results({@Result(column="deptno",property="deptno"),
@Result(column="dname",property="dname"),
@Result(column="loc",property="loc"),
@Result(column="deptno",property="emps",javaType=Set.class,
many=@Many(select="com.sxt.dao.EmpDAO.queryEmpByEmpno"))})
public List<Dept> queryAllDept();
@Select("select * from dept where deptno=#{value}")
public Dept queryDeptByDeptNo(Integer deptno);
}
创建EmpDAO
@Select("select * from emp ")
@Results({
@Result(column="empno",property="empno"),
@Result(column="ename",property="ename"),
@Result(column="job",property="job"),
@Result(column="mgr",property="mgr"),
@Result(column="hiredate",property="hiredate",javaType=Timestamp.class),
@Result(column="sal",property="sal",javaType=Double.class),
@Result(column="comm",property="comm",javaType=Double.class),
@Result(column="deptno",property="dept",javaType=Dept.class,
one=@One(select="com.sxt.dao.DeptDAO.queryDeptByDeptNo"))
})
public List<Emp> queryAll();
@Select("select * from emp where deptno=#{value}")
@Results({
@Result(column="empno",property="empno"),
@Result(column="ename",property="ename"),
@Result(column="job",property="job"),
@Result(column="mgr",property="mgr"),
@Result(column="hiredate",property="hiredate",javaType=Timestamp.class),
@Result(column="sal",property="sal",javaType=Double.class),
@Result(column="comm",property="comm",javaType=Double.class),
@Result(column="deptno",property="dept",javaType=Dept.class,
one=@One(select="com.sxt.dao.DeptDAO.queryDeptByDeptNo"))
})
public List<Emp> queryEmpByEmpno(Integer empno);
5,在mybtais.cfg.xml里面配置DAO
<!-- 加载自定义的mapper【写的就是sql】 -->
<mappers>
<mapper class="com.sxt.dao.DeptDAO"/>
<mapper class="com.sxt.dao.EmpDAO"/>
</mappers>
6,测试
public static void main(String[] args) {
SqlSession session=MyBatisUtils.getSession();
/*EmpDAO empDAO=session.getMapper(EmpDAO.class);
List<Emp> all = empDAO.queryAll();
for (Emp emp : all) {
System.out.println(emp);
}*/
DeptDAO deptDAO=session.getMapper(DeptDAO.class);
List<Dept> allDept = deptDAO.queryAllDept();
for (Dept dept : allDept) {
System.out.println(dept);
}
}