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
${}表示一个拼接符号:容易引起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
阅读全文
0 0
- mybatis学习心得
- Mybatis学习心得
- Mybatis学习心得
- mybatis学习心得
- MyBatis的一些学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 学习心得
- 开源bacula9.0.4 基于ubuntu16.04安装
- Faster RCNN详解:从region proposal到bounding box回归
- day29
- Linux如何通过命令查看日志文件的某几行(中间几行或最后几行)
- 运算符
- mybatis学习心得
- day30
- Animation Starter Pack中动画蓝图事件添加的位置
- C#编写C/S端代码,Windows应用程序 --- 初接触(二)
- opencv-特征检测与描述
- 笨方法学习Python-习题24: 更多练习
- compileSdkVersion,minSdkVersion,targetSdkVersion还有buildToolsVersion的区别
- 洛谷 1250 种树
- HTML中有用的字符实体