混合面试题

索引在单表中建议不要创建的数量超过6个,在大的字段上不要建立索引例如书的目录不要以文章的一个长句子为目录索引

mybatis是半自动的,是JDBC的浅封装,以sql语句的工作量换取了程序执行的高灵活性。

foreach标签:用于循环语句,它很好的支持了数据和 List、set 接口的集合,并对此提供遍历的功能。

3、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

最明显的就是sql语句的编写方式MyBatis 需要手动编写 SQL,Hibernate自动生成

4、Hibernate 和 MyBatis 的区别

相同,不同,选用方式这三个方面回答。mybatis在新兴项目中应用的比较多,Hibernate在老旧项目中应用的比较多

6、MyBatis编程步骤是什么样的?

SQLSessionFactoryBuilder是用于对xml文件的读取并解析

SqlSessionFactory线程安全的重量级对象,会采用单例模式进行创建

sqlsession充当了实体管理器的功能,是一个线程不安全的轻量级对象,是对connection对象的浅封装,以ORM方式进行数据库操作

(6)在web中以opensessionInviewFilter的方式进行编程,opensessionInviewFilter是一个过滤器,servlet三生命周期,默认是单实例多实例,如果要破坏则使用single。。。忘了

连接是一个稀有资源,当开了连接时要注意及时释放连接。

  1. #{}和${}的区别?

#{}默认使用的是perpared

预编译处理就是PERPARED,在一定程度上可以避免sql语句注入问题,sql语句是非过程语言。Perparedstatment。

  1. 通常一个Xml映射文件,都会写一个Dao接口与之对应,那么这个Dao接口的工作原理是什么?Dao接口里的方法、参数不同时,方法能重载吗?

dao接口是一个代理,典型的阳奉阴违。任何一个增删改(insert,delete,update)的标签都对应的是MapperStatement

  1. 在Mapper中如何传递多个参数?

一般建议使用map

  1. Mybatis动态sql有什么用?执行原理是什么?有哪些动态sql?
<!--动态sql语句-->
<set>
    <if test = "username != null">
        username = #{username.jdbcType = VARCHAR},
    </if>
</set>

重点注意foreach语句

  1. Mybatis实现一对一有几种方式?具体是怎么操作的?

表的关联有有三种方式1:1,1:N,N:M

多表的联合查询有三种方式:(1)交叉连接又称笛卡尔积

select * * from tbl_user;

(2)内连接:满足条件显示分为等值内连接,非等值连接

(3)外连接:左外,右外,全外(mysql不支持全外)

  1. Mybatis实现一对多有几种方式?具体是怎么操作的?

建议一般使用联合查询

方法一:

  <!-- 获取用户信息的同时获取所有对应的角色信息 -->
  <select id="selectUserAndRoles" parameterType="long" resultMap="extResultMap">
    select u.*,r.name,ur.* from tbl_users u left join tbl_user2role ur on u.id=ur.user_id
        left join tbl_roles r on ur.role_id=r.id where u.id=#{id,jdbcType=BIGINT}
  </select>
  <resultMap id="extResultMap" type="com.yan.entity.User" extends="BaseResultMap">
    <collection property="roleSet" ofType="com.yan.entity.Role">
      <id column="role_id" jdbcType="BIGINT" property="id" />
      <result column="name" jdbcType="VARCHAR" property="name" />
      <result column="descn" jdbcType="VARCHAR" property="descn" />
    </collection>
  </resultMap>

方法2:

  <resultMap id="extResultMap" type="com.yan.entity.User" extends="BaseResultMap">
    <collection property="roleSet" column="id" select="selectRoleByKey"/>
  </resultMap>
  <select id="selectRoleByKey" parameterType="long" resultMap="com.yan.mapper.RoleMapper.BaseResultMap">
    select r.*,ur.* from tbl_roles r left join tbl_user2role ur on ur.role_id=r.id where ur.user_id=#{id}
  </select>
  <!-- 获取用户信息的同时获取所有对应的角色信息 -->
  <select id="selectUserAndRoles" parameterType="long" resultMap="extResultMap">
    select * from tbl_users where id=#{id,jdbcType=BIGINT}
  </select>

优先使用联合查询,会提高性能,在分页查询时出现问题时则使用嵌套查询,但嵌套查询会导致1+N问题直播16:37

参数类型与结果映射搭配使用

linkedhashmap:底层是双向链表记录插入顺序。LinkedList 底层使用的是双向循环链表数据

spring中security体现了一般的权限管理方法,提供了更多的方法,shiro也是一种权限管理的方法基本使用这个方法,是一个轻量级的工作原理主要包括身份验证和授权两个方面

跟踪用户 4 大方法

  • 隐藏域

  • URL (统一资源管理器,网络连接地址即网址)重写 http://localhost:8080/dd.do?id=11

  • Cookie 用于实现客户端跟踪用户一种是文件cookie一种是内存cookie(内存cookie用来存储一个编号是UUID)

    cookie大小会有限制:一般范围在4KB到10KB之间

  • session 用于实现服务器端跟踪用户,但是需要客户端的内存 Cookie 的支持,每次提交时需要传递一个 Session的编号,用于区分不同用户,一个用户一个session 例如购物车。必须实现序列化接口

静态资源(static)是不会因人因时因地而发生变化的资源

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值