美文网首页
MyBatis基于注解开发

MyBatis基于注解开发

作者: _FireFly_ | 来源:发表于2020-11-14 00:10 被阅读0次

Student

public class Student {

    private Integer sid;
    private String sname;
    private String ssex;
    private Integer sage;

    public Student() {
    }
    public Student(Integer sid, String sname, String ssex, Integer sage) {
        this.sid = sid;
        this.sname = sname;
        this.ssex = ssex;
        this.sage = sage;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", ssex='" + ssex + '\'' +
                ", sage=" + sage +
                '}';
    }

    public Integer getSid() {
        return sid;
    }

    public void setSid(Integer sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }

    public Integer getSage() {
        return sage;
    }

    public void setSage(Integer sage) {
        this.sage = sage;
    }
}

Person

public class Person {

    private Integer pid;
    private String pname;
    private IDCard idCard;//外键  对象 对象的id

    //根据人的pid  查询人的信息+对应的身份证信息


    public Person() {
    }

    public Person(Integer pid, String pname, IDCard idCard) {
        this.pid = pid;
        this.pname = pname;
        this.idCard = idCard;
    }

    @Override
    public String toString() {
        return "Person{" +
                "pid=" + pid +
                ", pname='" + pname + '\'' +
                ", idCard=" + idCard +
                '}';
    }

    public Integer getPid() {
        return pid;
    }

    public void setPid(Integer pid) {
        this.pid = pid;
    }

    public String getPname() {
        return pname;
    }

    public void setPname(String pname) {
        this.pname = pname;
    }

    public IDCard getIdCard() {
        return idCard;
    }

    public void setIdCard(IDCard idCard) {
        this.idCard = idCard;
    }
}

IDCard

package domain;

public class IDCard {

    private String cardid;
    private String address;
    private Person person;//为了业务需求 放了一个关联属性

    //一个身份证的cardid  查询身份证信息+跟他关联的人信息


    public IDCard(){}
    public IDCard(String cardid, String address, Person person) {
        this.cardid = cardid;
        this.address = address;
        this.person = person;
    }

    @Override
    public String toString() {
        return "IDCard{" +
                "cardid='" + cardid + '\'' +
                ", address='" + address + '\'' +
                ", person=" + person +
                '}';
    }

    public String getCardid() {
        return cardid;
    }

    public void setCardid(String cardid) {
        this.cardid = cardid;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

StudentDao

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();

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

PersonDao

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();
}

PersonService

public class PersonService {

    private PersonDao dao = MyUtil.getMapper(PersonDao.class,true);

    //设计一个业务方法 根据人的id 查询人的信息+连同对应的身份证信息
    public Person selectOne(Integer pid){
        return dao.selectOne(pid);
    }

    public List<Person> selectAll(){
        return dao.selectAll();
    }
}

StudentService

public class StudentService {
   //dao层对象作为属性
    private StudentDao dao = MyUtil.getMapper(StudentDao.class,true);

    //设计一个业务方法  删除学生
    public void delete(Integer sid){
        dao.delete(sid);
    }

    //设计一个业务方法  注册学生
//    public void regist(Student student){
//        dao.insert(student);
//    }
//    public void regist(Map map){
//        dao.insert(map);
//    }
    public void regist(Integer sid,String sname,String ssex,Integer sage){
        dao.insert(sid,sname,ssex,sage);
    }

    //设计一个业务方法  查询学生详情(单条)
    public Student selectOne(Integer sid){
        return dao.selectOne(sid);
    }

    //设计一个业务方法  查询多条学生信息
    public List<Student> selectAll(){
        return dao.selectAll();
    }

相关文章

网友评论

      本文标题:MyBatis基于注解开发

      本文链接:https://www.haomeiwen.com/subject/ulofbktx.html