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
${}表示一个拼接符号:容易引起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
相关文章推荐
- Mybatis学习心得
- java学习心得——mybatis配置替换jdbc代码
- mybatis-spring官网学习心得
- Mybatis学习心得
- 关于Spring Boot的学习心得。安装,集成Spring Boot 与 mybatis
- mybatis学习心得
- MyBatis的一些学习心得
- 学习mybatis 的一点心得
- myBatis学习笔记(二)
- Android中Binder详细学习心得
- Java学习心得
- 学习心得(1) 形式参数为类名+变量,数组容器,流的见解
- 黑马程序员_类的加载器之学习心得
- jQuery学习心得
- Socket学习心得
- 学习VTK的心得
- mybatis学习笔记之基础复习(3)
- C++指针学习心得(一)
- MyBatis学习总结_06_调用存储过程
- 网络流学习心得