mybatis----增删改查
转:
select使用 :
xml代码:
- <!-- 查询学生,根据id -->
- <select id="getStudent" parameterType="String" resultMap="studentResultMap">
- SELECT ST.STUDENT_ID,
- ST.STUDENT_NAME,
- ST.STUDENT_SEX,
- ST.STUDENT_BIRTHDAY,
- ST.CLASS_ID
- FROM STUDENT_TBL ST
- WHERE ST.STUDENT_ID = #{studentID}
- </select>
参数的标识:#{student}
属性:id 标识符,可能被其他语句引用
parameterType :传给此语句的参数的完整类名或别名
resultType:语句返回值类型的整类名或别名。注意,如果是集合,那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。(resultType 与resultMap 不能并用)
resultMap:引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用)
flushCache:如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为false
usecache:如果设为true,则语句的结果集将被缓存。select 语句默认设为false true|false false
timeout 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定
fetchSize:设置一个值后,驱动器会在结果集数目达到此数值后,激发返回,默认为不设值,由驱动器自己决定
statementType:statement,preparedstatement,callablestatement。
预准备语句、可调用语句
#########################################################
insert使用:
xml代码:
- <!-- 插入学生 -->
- <insert id="insertStudent" parameterType="StudentEntity">
- INSERT INTO STUDENT_TBL (STUDENT_ID,
- STUDENT_NAME,
- STUDENT_SEX,
- STUDENT_BIRTHDAY,
- CLASS_ID)
- VALUES (#{studentID},
- #{studentName},
- #{studentSex},
- #{studentBirthday},
- #{classEntity.classID})
- </insert>
insert可以使用数据库支持的自动生成主键策略,设置useGeneratedKeys=”true”,然后把keyProperty 设成对应的列,就搞定了。比如说上面的StudentEntity 使用auto-generated 为id 列生成主键.
还可以使用selectKey元素。下面例子,使用mysql数据库nextval('student')为自定义函数,用来生成一个
- <!-- 插入学生 自动主键-->
- <insert id="insertStudentAutoKey" parameterType="StudentEntity">
- <selectKey keyProperty="studentID" resultType="String" order="BEFORE">
- select nextval('student')
- </selectKey>
- INSERT INTO STUDENT_TBL (STUDENT_ID,
- STUDENT_NAME,
- STUDENT_SEX,
- STUDENT_BIRTHDAY,
- CLASS_ID)
- VALUES (#{studentID},
- #{studentName},
- #{studentSex},
- #{studentBirthday},
- #{classEntity.classID})
- </insert>
- 属性
- useGeneratedKeys:
告诉MyBatis 使用JDBC 的getGeneratedKeys 方法来获取数据库自己生成的主键(MySQL、SQLSERVER 等
关系型数据库会有自动生成的字段)。默认:false
- keyProperty:
标识一个将要被MyBatis 设置进getGeneratedKeys 的key 所返回的值,或者为insert 语句使用一个selectKey
子元素。
selectKey语句属性配置细节:
- keyProperty:selectKey 语句生成结果需要设置的属性。
- resultType:生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int类型。
- order:可以设成BEFORE 或者AFTER,如果设为BEFORE,那它会先选择主键,然后设置keyProperty,再执行insert语句;如果设为AFTER,它就先运行insert 语句再运行selectKey 语句,通常是insert 语句中内部调用数据库(像Oracle)内嵌的序列机制。
- statementType:像上面的那样, MyBatis 支持STATEMENT,PREPARED和CALLABLE 的语句形式, 对应Statement ,PreparedStatement 和CallableStatement 响应
#####################################################
update,delete
- <!-- 更新学生信息 -->
- <update id="updateStudent" parameterType="StudentEntity">
- UPDATE STUDENT_TBL
- SET STUDENT_TBL.STUDENT_NAME = #{studentName},
- STUDENT_TBL.STUDENT_SEX = #{studentSex},
- STUDENT_TBL.STUDENT_BIRTHDAY = #{studentBirthday},
- STUDENT_TBL.CLASS_ID = #{classEntity.classID}
- WHERE STUDENT_TBL.STUDENT_ID = #{studentID};
- </update>
一个简单的delete:
- <!-- 删除学生 -->
- <delete id="deleteStudent" parameterType="StudentEntity">
- DELETE FROM STUDENT_TBL WHERE STUDENT_ID = #{studentID}
- </delete>
########################################################################
sql:
Sql元素用来定义一个可以复用的SQL 语句段,供其它语句调用。比如:
- <!-- 复用sql语句 查询student表所有字段 -->
- <sql id="selectStudentAll">
- SELECT ST.STUDENT_ID,
- ST.STUDENT_NAME,
- ST.STUDENT_SEX,
- ST.STUDENT_BIRTHDAY,
- ST.CLASS_ID
- FROM STUDENT_TBL ST
- </sql>
这样,在select的语句中就可以直接引用使用了,将上面select语句改成:
- <!-- 查询学生,根据id -->
- <select id="getStudent" parameterType="String" resultMap="studentResultMap">
- <include refid="selectStudentAll"/>
- WHERE ST.STUDENT_ID = #{studentID}
- </select>
2.6.1基本类型参数
根据入学时间,检索学生列表:
- <!-- 查询学生list,根据入学时间 -->
- <select id="getStudentListByDate" parameterType="Date" resultMap="studentResultMap">
- SELECT *
- FROM STUDENT_TBL ST LEFT JOIN CLASS_TBL CT ON ST.CLASS_ID = CT.CLASS_ID
- WHERE CT.CLASS_YEAR = #{classYear};
- </select>
根据姓名和性别,检索学生列表。使用实体类做参数:
- <!-- 查询学生list,like姓名、=性别,参数entity类型 -->
- <select id="getStudentListWhereEntity" parameterType="StudentEntity" resultMap="studentResultMap">
- SELECT * from STUDENT_TBL ST
- WHERE ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{studentName}),'%')
- AND ST.STUDENT_SEX = #{studentSex}
- </select>
根据姓名和性别,检索学生列表。使用Map做参数:
- <!-- 查询学生list,=性别,参数map类型 -->
- <select id="getStudentListWhereMap" parameterType="Map" resultMap="studentResultMap">
- SELECT * from STUDENT_TBL ST
- WHERE ST.STUDENT_SEX = #{sex}
- AND ST.STUDENT_SEX = #{sex}
- </select>
2.6.4多参数的实现
如果想传入多个参数,则需要在接口的参数上添加@Param注解。给出一个实例:
接口写法:
- public List<StudentEntity> getStudentListWhereParam(@Param(value = "name") String name, @Param(value = "sex") String sex, @Param(value = "birthday") Date birthdar, @Param(value = "classEntity") ClassEntity classEntity);
SQL写法:
- <!-- 查询学生list,like姓名、=性别、=生日、=班级,多参数方式 -->
- <select id="getStudentListWhereParam" resultMap="studentResultMap">
- SELECT * from STUDENT_TBL ST
- <where>
- <if test="name!=null and name!='' ">
- ST.STUDENT_NAME LIKE CONCAT(CONCAT('%', #{name}),'%')
- </if>
- <if test="sex!= null and sex!= '' ">
- AND ST.STUDENT_SEX = #{sex}
- </if>
- <if test="birthday!=null">
- AND ST.STUDENT_BIRTHDAY = #{birthday}
- </if>
- <if test="classEntity!=null and classEntity.classID !=null and classEntity.classID!='' ">
- AND ST.CLASS_ID = #{classEntity.classID}
- </if>
- </where>
- </select>
cache缓存
MyBatis 包含一个强在的、可配置、可定制的缓存机制。MyBatis 3
的缓存实现有了许多改进,既强劲也更容易配置。默认的情况,缓存是没有开启,除了会话缓存以外,它可以提高性能,且能解决全局依赖。开启二级缓存,你只需要在SQL
映射文件中加入简单的一行:<cache/>
这句简单的语句的作用如下:
1. 所有在映射文件里的select 语句都将被缓存。
2. 所有在映射文件里insert,update 和delete 语句会清空缓存。
3. 缓存使用“最近很少使用”算法来回收
4. 缓存不会被设定的时间所清空。
5. 每个缓存可以存储1024 个列表或对象的引用(不管查询出来的结果是什么)。
6. 缓存将作为“读/写”缓存,意味着获取的对象不是共享的且对调用者是安全的。不会有其它的调用
7. 者或线程潜在修改。
例如,创建一个FIFO 缓存让60 秒就清空一次,存储512 个对象结果或列表引用,并且返回的结果是只读。因为在不用的线程里的两个调用者修改它们可能会导致引用冲突。
- <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true">
- </cache>
还可以在不同的命名空间里共享同一个缓存配置或者实例。在这种情况下,你就可以使用cache-ref 来引用另外一个缓存。
- <cache-ref namespace="com.liming.manager.data.StudentMapper"/>
Cache 语句属性配置细节:
属性 | 说明 | 取值 | 默认值 |
eviction | 缓存策略: LRU - 最近最少使用法:移出最近较长周期内都没有被使用的对象。 FIFI- 先进先出:移出队列里较早的对象 SOFT - 软引用:基于软引用规则,使用垃圾回收机制来移出对象 WEAK - 弱引用:基于弱引用规则,使用垃圾回收机制来强制性地移出对象 |
LRU FIFI SOFT WEAK |
LRU |
flushInterval | 代表一个合理的毫秒总计时间。默认是不设置,因此使用无间隔清空即只能调用语句来清空。 | 正整数 |
不设置 |
size | 缓存的对象的大小 | 正整数 | 1024 |
readOnly |
只读缓存将对所有调用者返回同一个实例。因此都不能被修改,这可以极大的提高性能。可写的缓存将通过序列 化来返回一个缓存对象的拷贝。这会比较慢,但是比较安全。所以默认值是false。 |
mybatis----增删改查的更多相关文章
- MyBatis增删改查
MyBatis的简介: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- 【Mybatis】简单的mybatis增删改查模板
简单的mybatis增删改查模板: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE map ...
- MyBatis增删改查模板
1. 首先,和Spring整合一下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...
- 最简单的mybatis增删改查样例
最简单的mybatis增删改查样例 Book.java package com.bookstore.app; import java.io.Serializable; public class Boo ...
- Mybatis增删改查,Demo整合
第一步:MyBatis的Jar包引入mybatis-3.2.7.jarmysql-connector-java-5.1.8.jar MyBatis的pom.xml依赖 <dependencies ...
- Mybatis增删改查(CURD)
前面的小节我们已经讲到用接口的方式编程.使用这种方式,需要注意的一个地方就是,在User.xml 配置文件中,mapper namespace="com.yiibai.mybatis.int ...
- springboot整合mybatis增删改查(四):完善增删改查及整合swgger2
接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善 application.preperties ...
- SpringBoot+Mybatis增删改查实战
简介 SpringBoot和Mybatis是啥请自行百度,作者这里也是花了几天时间入门了这个框架用来完成任务,并且也算符合要求的完成了任务,期间也各种百度但是没找到自己想要的那种简单易懂的教程,所以踩 ...
- springboot&mybatis 增删改查系列(二)
数据库篇 我的数据库名为data0525,数据表名为user,其中有五列uid,uname,upass,usex,umessage.uid为主键并且自动生成,由于是练习表,所以并没有考虑设计的合理性. ...
- springboot2之结合mybatis增删改查解析
1. 场景描述 本节结合springboot2.springmvc.mybatis.swagger2等,搭建一个完整的增删改查项目,希望通过这个基础项目,能帮忙朋友快速上手springboot2项目. ...
随机推荐
- put a favicon for github pages
put the picture "favicon.ico" in the root of your web page repo.then add the following lin ...
- win10 Incredibuild 兼容
电脑换了win10,所有的软件都需要重新安装. win10的体验还是很不错的.但是也有一堆的问题.原来的vs2010今天无法再使用分布式编译IncrediBuild. 现象是,虽然可以连上分布式编译的 ...
- c++字体对齐
字节对齐的细节和编译器实现相关,但一般而言,满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除. 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是 ...
- css的三大特性
1.继承性 作用:子元素可以继承父元素的样式text-,font-,line-这些元素开头的都可以继承,以及color属性特殊性: ①. a标签的颜色不能继承,必须对a标签本身进行设置 ②. h标签的 ...
- javascript 局部变量和全局变量
刚开始学js,遇到了一个奇怪的问题,查找之后知道了答案 需要记住两句话 1 Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是f ...
- Cron表达式的详细用法
字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN- ...
- 浅谈Objective-C对象初始化的三类程序猿
序 早上看了位仁兄写了<Swift:让人眼前一亮的初始化方式>的文章.什么?!初始化?Objective-C!好吧,吓哔哔~~~ 一.普通程序猿 普通程序员使用最常见路人姿势等场.普普通通 ...
- ThinkPHP批量添加数据和getField()示例
批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...
- 淘淘商城_day11_课堂笔记
今日大纲 发布前的准备 实施发布 一部分是由我来发布 一部分是由你们来发布 讲解分布式部署架构 测试 功能测试 压力测试 项目实战的准备以及分组 分组 抽取功能 讲解所需要开发的功能 项目部署上线流程 ...
- meta常用标签总结
meta元素共有三个可选属性(http-equiv.name和scheme)和一个必选属性(content),content定义与 http-equiv 或 name 属性相关的元信息 可选属性 属性 ...