zoukankan      html  css  js  c++  java
  • 渚漪Day28——SSM【Mybatis05】

    8、使用注解

    底层主要应用反射UserMapper.class

    8.1、注解分析

    @Select("select * from mybatis.user")
    List<User> getUsers();
    
    @Test
    //查询全部
    public void test1(){
        try(SqlSession session = MybatisUtils.getSqlSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<User> users = mapper.getUsers();
            for (User user : users) {
                System.out.println(user);
            }
        }
    }
    

    等价于

    interface+xml

    List<User> getUsers();
    
    <select id="getUsers" resultType="com.ijuy.pojo.User">
        select * from mybatis.user;
    </select>
    

    8.2、注解完成增删改查

    • CRUD

    • @Param()的使用

      • 基本类型的参数或者String类型需要加上
      • 引用类型不需要加
      • 如果只有一个基本类型的话可以忽略,但是建议加上
      • 在SQL中引用的就是@parm中设定的属性名
    • 自动事务提交

      public static SqlSession getSqlSession(){
          return sqlSessionFactory.openSession(true);
      }
      

    9、Lombok

    1. idea是真的加载不出来这个插件(可能被抛弃了?)

    2. lombok简化了java操作,但是有缺点,改变人们的编程思维。

      综上不用

    10、多对一处理

    多对一复杂环境的搭建

    建立师生SQL语句

    CREATE TABLE `teacher` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    
    INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师'); 
    
    CREATE TABLE `student` (
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `tid` INT(10) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fktid` (`tid`),
    CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8;
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); 
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1'); 
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1'); 
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); 
    INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
    

    测试环境搭建

    按照查询嵌套处理

    <select id="getStudent" resultMap="TeacherStudent">
        select* from mybatis.student
    </select>
    
    <resultMap id="TeacherStudent" type="student">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <!--复杂的属性,单独处理
            对象:association
            集合:collection-->
        <association property="teacher" column="tid" javaType="teacher" select="getTeacher"/>
    </resultMap>
    
    <select id="getTeacher" resultType="teacher">
        select * from mybatis.teacher where id=#{id}
    </select>
    

    按照结果嵌套查询

    <select id="getStudent2" resultMap="TeacherStudent2">
            select s.id sId,s.name sName,t.id tId,t.name tName
            from mybatis.student as s,mybatis.teacher as t
    #         where s.tid=t.id
        </select>
    
        <resultMap id="TeacherStudent2" type="student">
            <result property="id" column="sId"/>
            <result property="name" column="sName"/>
            <association property="teacher" javaType="teacher">
                <result property="id" column="tId"/>
                <result property="name" column="tName"/>
            </association>
        </resultMap>
    

    结论:狂神查出的结果

    teacher id = 0 是应为查询当中没有在association 标签中查询对象中的id属性

    11、一对多处理

    原理和多对一类似

    代码

    <select id="getTeacher1" resultMap="TeacherStudent1">
        select s.id sId,s.name sName,t.name tName,t.id tId
        from mybatis.teacher as t,mybatis.student as s
        where s.tid = #{tid}
    </select>
    <resultMap id="TeacherStudent1" type="teacher">
        <result property="id" column="tId"/>
        <result property="name" column="tName"/>
        <collection property="students" ofType="student">
            <result property="id" column="sId"/>
            <result property="name" column="sName"/>
            <result property="tid" column="tId"/>
        </collection>
    </resultMap>
    
    
    
    
    
    
    <select id="getTeacher2" resultMap="TeacherStudent2">
        select id,name from mybatis.teacher where id = #{tid}
    </select>
    <select id="getStudentByTeacherId" resultType="student">
        select s.id,s.name,s.tid from mybatis.student as s where tid = #{tid}
    </select>
    <resultMap id="TeacherStudent2" type="teacher">
        <result column="id" property="id"/>
        <collection property="students" javaType="ArrayList" ofType="student" select="getStudentByTeacherId" column="id"/>
    </resultMap>
    

    遇到的问题

    此处加了“#” 报错

    删除第九行却不报错

    可能是两个#在转义的过程中形成了 ‘/注释’ where s.tid = ‘/注释’ {tid}这样的语句。导致去掉注释内容,还剩 {tid}。

    错误无法得到验证,人为去掉注释内容,idea自动检测语法格式错误。

  • 相关阅读:
    【乱侃】How do they look them ?
    【softeware】Messy code,some bug of Youdao notebook in EN win7
    【随谈】designing the login page of our project
    【web】Ad in security code, making good use of resource
    SQL数据库内存设置篇
    关系数据库的查询优化策略
    利用SQL未公开的存储过程实现分页
    sql语句总结
    sql中使用cmd命令注销登录用户
    SQLServer 分页存储过程
  • 原文地址:https://www.cnblogs.com/ijuysama/p/12907574.html
Copyright © 2011-2022 走看看