MyBatis基于注解形式的开发2

基于注解形式的开发
	
		原有形式以xml文件存在的
			configuration.xml
			<!--<mapper resource="mapper/StudentMapper.xml">-->
			<mapper class="dao.StudentDao">
			mapper.xml--------->注解方式

		使用注解形式开发 必须采用mapper代理来执行
			dao是一个接口+注解形式
			dao是一个接口+mapper.xml

		如果是xml  标签<insert> <delete> <update id=""> <select id="" resultType="">
		如果是注解 @Insert  @Delete  @Update  @Select

		@Insert("insert into student values(#{sid},#{sname},#{ssex})")
		public void insert(Student student);

		方法名字随意
		方法参数从Service层来的
			通常参数是一个  基础类型 int  Integer  String
			通常参数是一个	domain对象  map
			参数不是一个	Integer sid,String sname
				1.将SQL语句中的#{key}--->#{param1},#{param2}
				2.SQL语句不变采用原有的#{key} 方法每个参数前面添加@Param("key")

package dao;

import domain.Student;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface StudentDao {

    //设计一个删除单条记录的方法
    @Delete("delete from student where sid = #{sid}")
    void delete(Integer sid);
    //方法的底层有一个代理  帮我们执行这个方法该做的事情
    //分析方法          方法名字delete    方法参数sid
    //分析mapper.xml   类名字dao.StudentDao---namespace
    //                方法名字delete----------id
    //                mapper的<delete>-------SQL语句
    //                语句上面有参数#{key}-----利用方法传递的sid参数进行匹配
    //          代理对象会根据标签<delete>  调用原来sqlSession对象中的delete方法

    //类方法名和sql之间的对应关系  找到sql  知道sql上面的信息  执行哪个方法
    //如果将原有的xml文件删掉 改成注解的形式
    //1.类 方法名和sql对应关系就简单了
    //2.注解中的信息肯定需要写sql
    //3.执行底层的哪个对应方法-----注解名字类似以前的标签名  为了找寻底层方法用的
    //      Insert Delete Update Select

    @Insert("insert into student value (#{sid},#{sname},#{ssex},#{sage})")
    //public void insert(Student student);//一个domain对象 一个基本值(int Integer String)
    //public void insert(Map map);

    public void insert(@Param("sid")Integer sid,@Param("sname")String sname,@Param("ssex")String ssex,@Param("sage")Integer sage);
    //如果dao方法的参数不是包装成一个对象
    //  1.sql中将原来的#{key}---#{param1}  #{param2}
    //  2.方法的每一个参数前面 添加@Param("key")  注解的key与SQL#{key} 对应

    @Update("update student set sname=#{sname},ssex=#{ssex},sage=#{sage} where sid=#{sid}")
    public void update(Student student);


    //==================================================================================

    //dao的方法 负责读取数据库中一行记录
    @Select("select * from student 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 student")
    public List<Student> selectAll();


    //表格之间的关系
    //  一对一
    //  一对多
    //  多对多
    //联合查询
    //  先查一遍  再查一遍(立即加载 延迟加载)
    //  联合的方式(等值连接 内连接 外连接)

}

package dao;

import domain.IDCard;
import domain.Person;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.FetchType;

import java.util.List;

public interface PersonDao {

    //设计一个方法 根据人的id 查询人的信息+连同对应的身份证信息


    @Select("select * from person where pid = #{pid}")
    @Results(
            id="selectOne",
            value={
                    @Result(property="pid",column="pid",id=true),
                    @Result(property="pname",column="pname"),
                    @Result(property="idCard",javaType=IDCard.class,column="cardid",one=@One(select="selectOneIDCard",fetchType=FetchType.LAZY))
            }
    )
    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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值