索引在单表中建议不要创建的数量超过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。。。忘了
连接是一个稀有资源,当开了连接时要注意及时释放连接。
#{}默认使用的是perpared
预编译处理就是PERPARED,在一定程度上可以避免sql语句注入问题,sql语句是非过程语言。Perparedstatment。
dao接口是一个代理,典型的阳奉阴违。任何一个增删改(insert,delete,update)的标签都对应的是MapperStatement
一般建议使用map
<set> <if test = "username != null"> username = #{username.jdbcType = VARCHAR}, if> set>
重点注意foreach语句
表的关联有有三种方式1:1,1:N,N:M
多表的联合查询有三种方式:(1)交叉连接又称笛卡尔积
select * * from tbl_user;
(2)内连接:满足条件显示分为等值内连接,非等值连接
(3)外连接:左外,右外,全外(mysql不支持全外)
建议一般使用联合查询
方法一:
<!-- 获取用户信息的同时获取所有对应的角色信息 --> <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)是不会因人因时因地而发生变化的资源