mybatis自己容易忘记的东西1(仅适自己)

来源:互联网 发布:uvz for mac 编辑:程序博客网 时间:2024/05/22 13:58

注:该文章只是针对自己在其他地方加强复习,没有参考意义。
一、jdbc的缺点
1.preparedstatement防止sql的注入
2.对sql是预编译的,数据库对第二回发的同样的预编译时直接从缓存中取就不用编译。
3.sql语句是硬编码,改动需要改动java文件,不利于维护。
4.preparedstatement设置的参数也存在硬编码问题.

二、mybatis执行
1.sqlMapConfig.xml(配置文件)->(创建会话工厂)sqlSessionFactory->(创建会话)sqlSession(操作数据库)
2.底层的内部是Executor在干活,也是一个接口,有两个实现,(默认执行器,缓存执行器)
3.Executor(封装参数)->MappedStatement(封装,sql,占位符)
4.map的xml以statement为单位管理sql

sqlMapConfig.xml
三、xml的部分结构
xxxmapper.xml
命名规则:表面+mapper.xml

开发调试阶段用debug,别用info
log4j.rootLogger=DEBUG, stdout

map.xml结构(部分)

id为映射结果集唯一标识
column数据库中的表字段
在同一个文件可以直接引语,否则就是命名空间.resultMap的Id





也可以是全类名
·····
#是占位符 可以防止sql的注入
sql{}%

insert最好用#,可以不用考虑java和数据库类型<insert id=""  parameterMap="">    获取刚刚插入的自增主键值    <selectKey keyProperty="" order="before和after两个值" resultMap="int">          select last_insert_id()    </selectKey>        insert ....into...value...    keyProperty就是将主键设置到哪个属性    order相对于insert语句执行顺序,before和after    也可以通过uuid机制生成主键,可以防止数据库移植和其他表主键重复的问题    <selectKey keyProperty="" order="before和after两个值" resultMap="String">           select uuid()    </selectKey>    oracle没有自增主键,要通过序列实现自增主键    实现思路:先查询序列得到主键,将主键设置到user对象中,将user对象插入数据库    <selectKey keyProperty="id" order="before" resulrMap="">        select 序列.nextval() from dual    </selectKey>         insert ....into...value...</insert>

如果引resultMap的为位置和resultMap的定义在同一个resultMap。xml中,直接使用ID,否则就是 命名空间.id

@Before注解,每次致谢@Test注解时先执行@before中的代码

sqlMapConfig

<package name=""/><typAliases>    <typeAliase type="" aliase="">    <package name=""/></<typAliases>>

like %${userCustom.userName}%

使用resultType时sql查询的列名(字段取得别名)要和指定的pojo属性名相同,指定相同属性方可映射成功