TZ_03_mybatis的xml开发
1.通过Student.xml编写sql来操作数据库
1>insert语句插入后返回主键
加入标签useGeneratedKeys=“true” keyProperty=“oid” 中 keyProperty为主键id名
2>基本的sql语法,和数据的封装
2.单条件查询和多条件查询
1>单条件查询
Student selectByCid(Integer id)
<select id="selectByCid" resultType="student">
SELECT * FROM Student WHERE cid=#{param1}
</select>
2>多条件查询
Student selectByIdAndName(Integer id,String name);
<select id="selectByIdAndName" resultType="student">
SELECT * FROM student WHERE id=#{param1} AND name=#{param2}
</select>
3.一对一查询和一对多查询
1>一对一查询
<resultMap id="orderMap" type="ClassBo">
<!--主键名-->
<id property="cid" column="cid"></id>
<result column="cname" property="cname"></result>
<result column="capacity" property="capacity"></result>
<!--property:一对一的对象名 必须是一个对象 不能是集合 javaType:对象的类型 -->
<association property="student" javaType="student">
<id property="id" column="id"></id>
<result column="name" property="name"></result>
<result column="hobby" property="hobby"></result>
<result column="gender" property="gender"></result>
<result column="cid" property="cid"></result>
</association>
</resultMap> <select id="findAll" resultMap="orderMap">
SELECT * FROM class c,student s WHERE c.cid = s.cid;
</select>
2>一对多查询
<resultMap id="selectAllClassAndStudent" type="ClassBo">
<id property="cid" column="cid"></id>
<result property="cname" column="cname"></result>
<result property="capacity" column="capacity"></result>
<!--property:一对多的对象名 必须是集合 javaType:集合的类型 select:每次查询都会执行select的语句 column:执行sql需要的参数 -->
<collection property="students" ofType="student" select="com.hdh.dao.StudentMapper.selectByCid"
column="cid"></collection>
</resultMap>
<select id="selectAllClassAndStudent" resultMap="selectAllClassAndStudent">
SELECT * FROM class
</select>
4.插入一条数据并返回插入数据的主键
keyProperty:主键名称
<insert id="insert" parameterType="com.hdh.domain.Student" useGeneratedKeys="true" keyProperty="id" >
insert into student (id, name, hobby,
gender, cid)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{hobby,jdbcType=VARCHAR},
#{gender,jdbcType=VARCHAR}, #{cid,jdbcType=INTEGER})
</insert>
5.mybatis的<Setting>配置
| 配置项 | 作用 | 配置选项 | 默认值 |
|---|---|---|---|
| cacheEnabled | 该配置影响所有映射器中配置缓存的全局开关(二级缓存) | true|false | true |
| lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态 | true|false | false |
| aggressiveLazyLoading | 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载 | true|felse | 版本3.4.1 (不包含) 之前 true,之后 false |
| multipleResultSetsEnabled | 是否允许单一语句返回多结果集(需要兼容驱动) | true|false | true |
| useColumnLabel | 使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果 | true|false | true |
| useGeneratedKeys | 允许JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby) | true|false | false |
| autoMappingBehavior |
指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射。 PARTIAL 表示只会自动映射,没有定义嵌套结果集和映射结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套) |
NONE、PARTIAL、FULL | PARTIAL |
| autoMappingUnkno wnColumnBehavior | 指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException 异常 | NONE、WARNING、FAILING | NONE |
| defaultExecutorType | 配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新 | SIMPLE、REUSE、BATCH | SIMPLE |
| defaultStatementTimeout | 设置超时时间,它决定驱动等待数据库响应的秒数 | 任何正整数 | Not Set (null) |
| defaultFetchSize | 设置数据库驱动程序默认返回的条数限制,此参数可以重新设置 | 任何正整数 | Not Set (null) |
| safeRowBoundsEnabled | 允许在嵌套语句中使用分页(RowBounds)。如果允许,设置 false | true|false | false |
| safeResultHandlerEnabled | 允许在嵌套语句中使用分页(ResultHandler)。如果允许,设置false | true|false | true |
| mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射 | true|false | false |
|
localCacheScope
|
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据 |
SESSION|STATEMENT | SESSION |
|
jdbcTypeForNull
|
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER | NULL、VARCHAR、OTHER | OTHER |
|
lazyLoadTriggerMethods
|
指定哪个对象的方法触发一次延迟加载 | — | equals、clone、hashCode、toString |
|
defaultScriptingLanguage
|
指定动态 SQL 生成的默认语言 | — |
org.apache.ibatis .script.ing.xmltags .XMLDynamicLanguageDriver |
|
callSettersOnNulls
|
指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null | true|false | false |
|
logPrefix
|
指定 MyBatis 增加到日志名称的前缀 | 任何字符串 | Not set |
|
loglmpl
|
指定 MyBatis 所用日志的具体实现,未指定时将自动査找 |
SLF4J|LOG4J|LOG4J2|JDK_LOGGING |COMMONS_LOGGING |ST DOUT_LOGGING|NO_LOGGING |
Not set |
| proxyFactory | 指定 MyBatis 创建具有延迟加栽能力的对象所用到的代理工具 | CGLIB|JAVASSIST | JAVASSIST (MyBatis 版本为 3.3 及以上的) |
| vfsImpl | 指定 VFS 的实现类 | 提供 VFS 类的全限定名,如果存在多个,可以使用逗号分隔 | Not set |
| useActualParamName | 允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用) | true|false | true |
6.Mybatis中的一级缓存和二级缓存
1> 一级缓存:
它指的是Mybatis中SqlSession对象的缓存。
当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
查询是否有,有的话直接拿出来用。
当SqlSession对象消失时,mybatis的一级缓存也就消失了。
2>二级缓存:
它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
二级缓存的使用步骤:
第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
<--默认是true不需要配置-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
<!--开启user支持二级缓存 -->
<cache></cache>
第三步:让当前的操作支持二级缓存(在select标签中配置)
<select id="testCheckById" resultType="user" parameterType="int" useCache="true">
TZ_03_mybatis的xml开发的更多相关文章
- Spring_IoC注解开发和AOP的XML开发(学习笔记2)
一:IoC注解开发 1,在applicationContext.xml中需要引入context约束 <beans xmlns="http://www.springframework.o ...
- TZ_05_Spring_事物的xml开发和annotation开发
1.Spring_事物的xml开发 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...
- 使用Kotlin&Anko, 扔掉XML开发Android应用
尝鲜使用Kotlin写了一段时间Android.说大幅度的减少了Java代码一点不夸张.用Java的时候动不动就new一个OnClickListener()匿名类,动不动就类型转换的地方都可以省下很多 ...
- 使用libxml2进行xml开发(一)
(一)Windows下使用MinGW和Code::Blocks环境配置libxml2 笔者此次是在windows 7下使用MinGW和Code::Blocks开发C程式的,手上的一个项目需要使用soc ...
- C#序列化xml,开发常用
序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...
- Spring中AOP的基于xml开发和配置
pom文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- android开发中eclipse里xml开发的自动提示和使用帮助快捷键提示
Eclipse Android 代码自动提示功能 Eclipse for android 设置代码提示功能 打 开 Eclipse 依次选择 Window > Preferences > ...
- MFC使用自带的MSXML6.dll解析xml(开发环境vc2010)
程序是win32控制台程序 // msxml.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> ...
- TZ_03_mybatis的注解开发
1.一对多的注解开发 1>需求通过查询所有的用户,并且找到该用户的所有账户(使用延迟加载模式) @Select("select * from user") //sql语句查询 ...
随机推荐
- QueryList 来做采集
示例代码 先来感受一下使用 QueryList 来做采集是什么样子. 1 采集百度搜索结果列表的标题和链接.大理石平台价格 采集代码: $data = QueryList::get('https:// ...
- JS 常用的两个客户端输出方法
document.write(str) 描述:在网页的<body>标记,输出str的内容. document意思“文档”,就是整个网页了. document是一个文档对象,代表 ...
- day 54 Django基础四之模板系统
Django基础四之模板系统 本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模 ...
- day3:python运算符及数据类型(str)(int)
运算符 算数运算 :a = 10 * 10赋值运算:a = a + 1 a+=1 比较运算:a = 1 > 5 逻辑运算: a = 1>6 or 1==1 a = 1 and b = ...
- JavaScript开发人员必知的10个关键习惯
还在一味没有目的的编写JavaScript代码吗?那么你就OUT了!让我们一起来看看小编为大家搜罗的JavaScript开发人员应该具备的十大关键习惯吧! 随着新技术的不断发展,JavaScript已 ...
- 模拟实现call、apply
1. 知识点补充: 首先在模拟实现前,先Mark一些我之前不知道的知识: a. eval(string)函数:可计算某个字符串,并执行其中的JavaScript代码 其中,string是必需传入的待计 ...
- Extjs & Ext.net中的一些属性
Extjs & Ext.Net 弹出整个浏览器对话框的方法 top.Ext.Msg.alert("值"); top.Ext.Msg.confirm("值" ...
- golang 获取当前可执行程序的当前路径
import ( "errors" // "fmt" "os" "os/exec" "path/filepat ...
- LoadRunner内部结构(2)
LoadRunner内部结构(2) 接着(1)的内容: 17.默认的LRReport文件夹创建在本地分析机器的My Documents文件夹下来存储分析会话文件. 18.可以使用HTML格式 19.格 ...
- 爬虫——python——百度地图经纬度查询——经纬度查看地点地名——利用百度API获取地名经纬度——爬取所有的中国地址
import requests address = '40.8587960,86.866991' url = 'http://api.map.baidu.com/geocoder?output=jso ...