mybatis学习心得

来源:互联网 发布:星际老男孩淘宝店 整机 编辑:程序博客网 时间:2024/06/14 17:11
1.#{}表示一个占位符号  接收简单类型,#{}里面可以随便写
  ${}表示一个拼接符号:容易引起sql注入,不安全  接收简单类型,#{}里面只能写value


2.parameterType:传入参数类型,resultType:返回数据类型


3.自增主键返回 select LAST_INSERT_ID();(insert后)
<insert  id="save" parameterType="User">
insert into t_user(user_name,user_age) values(#{userName},#{age})
<selectKey keyProperty='id' order="AFTER" reultType="java.lang.String">
select LAST_INSERT_ID()
</selectKey>


</insert>
4.非自增主键返回 :(insert 之前)
<insert  id="save" parameterType="User">
insert into t_user(user_name,user_age) values(#{userName},#{age})
<selectKey keyProperty='id' order="AFTER" reultType="java.lang.String">
select uuid()
</selectKey>


</insert>


5.除了查询,别的都需要对数据库事务进行提交




<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 
namespace:必须与对应的接口全类名一致
id:必须与对应接口的某个对应的方法名一致

 -->
<mapper namespace="com.tgb.mapper.UserMapper">


</mapper>


6.mybatis 配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<configuration>   
    <!-- <environments default="mysql">  
        <environment id="mysql">  
            指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置  
            <transactionManager type="JDBC"/>  
            dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现                 
            <dataSource type="POOLED">  
                <property name="driver" value="com.mysql.jdbc.Driver"/>  
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>  
                <property name="username" value="root"/>  
                <property name="password" value="123"/>  
            </dataSource>  
        </environment>  
    </environments>  --> 
    
   <!-- 引用config.properties配置文件 -->
      <properties resource="config.properties"/>
      
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             配置数据库连接信息
             <dataSource type="POOLED">
                value属性值引用db.properties配置文件中配置的值
                 <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                 <property name="username" value="${name}" />
                 <property name="password" value="${password}" />
             </dataSource>
         </environment>
     </environments>
    
    <mappers>  
        <mapper resource="entity/UserMapper.xml"/>   
    </mappers>  
    
</configuration>  


7.mybatis配置文件:
properties 属性 (加载属性配置文件)
settings属性 (全局配置参数)
typeAlias 别名 type是类型路径 alias 别名(针对parameterType 和resultType)




8.resultMap(使用前先定义) 不同的mapper中需要加namespace
<resultMap type="user" id = "">
<id column="id_"  property="id"/>
<result column="id_"  property="id"/>
</resultMap>


9.sql片段定义(引用时 使用<where>)


<sql id="">
<if test="id!=null and id!= ''">


 and userid = #{userid}
</if>


</sql>


<include refid="sqlid"></include>


10. foreach
<foreach collection="ids" item="id"  open="and ("  close=")">


</foreach>


把数据库连接参数提取出去为db.properties


数据库连接参数只配置在db.properties,原因:方便对参数进行统一管理,其他xml也可以调用


不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中


11.联合查询返回值(需要通过继承联合查询字段值较多的一张表),添加相应的信息(resultType)
   
 定义resultMap  association 用于映射关联查询单个对象的信息,collection:对关联查询 多条记录映射到集合对象中


12、延迟加载通过association中的select 和 column 来进行(默认没有开启延迟加载)


13、mybatis提供一级缓存和二级缓存 


一级缓存是 sqlsession的缓存,二级缓存是mapper级别的缓存


二级缓存除了在核心配置文件打开之外,还要在具体的mapper.xml中开启二级缓存


调用pojo类实现序列化接口,为了将缓存数据取出执行反序列化,因为二级缓存数据存储介质多种多样


二级缓存是跨sqlSession的


useCache = "false"  禁用当前sql的二级缓存


flushCache = "true"  刷新缓存




<!-- 开启延迟加载 -->
    <settings>
        <!-- lazyLoadingEnabled:延迟加载启动,默认是false -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- aggressiveLazyLoading:积极的懒加载,false的话按需加载,默认是true -->
        <setting name="aggressiveLazyLoading" value="false"/>
         
        <!-- 开启二级缓存,默认是false -->
        <setting name="cacheEnabled" value="true"/>
    </settings>


分布式缓存:redis 、memcached 、ehcache




14 spring 和 mybatis 整合(mybatis3.2.7  spring3.2.0)


需要spring通过到哪里方式管理sqlSessionFactory


spring和mybatis整个生成代理对象,使用sqlseesionFactory 生成sqlsession
   
持久层的mapper都需要spring来进行管理




15. 实现类通过继承sqlSessionDaoSupport可以通过this.getSqlSession得到sqlsession




16、在applicationContext.xml中配置dao ,需要通过applicationContext.xml配置文件得到applicationcontext (原始dao开发)


17.spring mybatis mapper代理开发 (MapperFactoryBean 来创建代理对象)
   
applicationContext.getBean(""); 通过MapperScannerConfigurer 扫描mapper





































原创粉丝点击