dao.StudentDao(其余代码见上一个文档)
package dao;
import domain.Student;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
public interface StudentDao {
@Select("select * from student1 where sid = #{sid}")
public Student selectOne(Integer sid);
//接口底层有一个代理类 ProxyStudentDao(对象)
//ProxyStudentDao代理对象帮我的Dao接口执行一个方法 selectOne
// 1.解析方法 类名字 方法名字 方法参数 返回值
// 2.解析mapper.xml文件 namespace 标签中的id SQL上的#{key} 标签中的resultType
// 类名字----找寻namespace
// 方法名字--找寻某一个标签中的id属性
// 进而找到标签中的一条SQL语句
// 方法的参数---与找到的SQL进行key匹配 组合成一条完整的SQL语句(可以执行的)
// 加载驱动
// 获取连接
// 获取状态参数啦
// 拼接SQL
// 执行查询操作ResultSet = executeQuery();
// 将结果集的信息取出来 存入一个新的容器内(容器的类型通过解析xml标签中的resultType属性来的)
// 资源全部关闭
// 将新的容器连同里面的数据返回
// 需要的信息 1.类名字 2.方法名字 3.定位注解在哪里 4.注解里获取一条SQL 5.SQL上面的信息(方法参数)
// 7.执行查询后的返回类型(当前方法的返回值类型) 8.底层执行的方法sqlSession.selectOne();(注解名字)
//查询多条记录
@Select("select * from student1")
public List<Student> selectAll();
}
联合查询一对一
dao.PersonDao
package dao;
import domain.IDCard;
import domain.Person;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface PersonDao {
//设计一个方法,根据人的id,查询人的信息+对应身份证信息
@Select("select * from person where pid = #{pid}")
@Results(
id="selectOne",//别的语句可以通过这个id调用规则
value={
@Result(id = true,property = "pid",column = "pid"),//默认false,不是主键
@Result(property = "pname",column = "pname"),
@Result(property = "idCard",javaType = IDCard.class,column = "cardid",
one = @One(select = "selectOneIDCard"))//select中是辅助方法名
})
public Person selectOne(Integer pid);//方法返回值对应的是xml resultMap标签中的type属性
//辅助方法
@Select("select * from idcard where cardid = #{cardid}")
public IDCard selectOneIDCard(String cardid);
//利用原来的xml形式
// 文件中有好多
// 1.namespace----类名
// 2.id-----------方法名
// 3.<select>-----@Select
// 4.标签中一条SQL--注解内有一条SQL
// 5.标签中resultMap-----@Results(自定义规则)
// id id
// result result
// association 对象
// 辅助查询 辅助查询--(一个方法 方法上的注解 SQL)
// 6.两个对象 第二个对象延迟机制 settings设置-----注解里设置
@Select("select * from person")
@ResultMap("selectOne")//调用上面的规则
public List<Person> selectAll();
}