您的位置:首页 > 编程语言 > Java开发

mybatis学习心得

2017-10-23 17:07 169 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java mybatis