<!--下面玩一个增删改查--><insertid="add">
insert into t_user(username,password) values ('111','123111')
</insert><deleteid="delete">
delete from t_user where id=3
</delete><insertid="update">
update t_user set username='xxxx' where id=5
</insert><selectid="selectOne"resultType="xx.xx.pojo.User">
select * from t_user where id=6
</select>
@TestpublicvoidtestAdd1()throwsIOException{SqlSession sqlSession =getSqlSession();User user =newUser();
user.setUsername("小波波");
user.setPassword("110");Object o = sqlSession.insert("UserMapper1.add1", user);System.out.println("影响的行数是:"+o);close();}
7.3、传入map类型的参数
7.3.1、SQL描述
<!--传入map类型的参数
如果传入的是 map类型的数据 那么占位符中的值就要写 map中对应的key的名字
--><selectid="findUserByCondition"parameterType="map"resultType="com.qfedu.mybatis.pojo.User">
select * from t_user where username=#{username} and password=#{password}
</select>
7.3.2、编写测试
@TestpublicvoidtestSelectByCondition()throwsIOException{SqlSession sqlSession =getSqlSession();Map<String,Object> map =newHashMap<String,Object>();
map.put("password","110");Object o = sqlSession.selectList("UserMapper1.findUserByCondition",map);System.out.println("影响的行数是:"+o);close();}
8、返回参数的问题
8.1、传出简单参数
<!--返回单个值 通过id找用户名--><selectid="findUserNameById"parameterType="int"resultType="string">
select username from t_user where id=#{value }
</select>
8.2、传出一个对象参数
<!--通过id找用户--><selectid="selectUserById"parameterType="int"resultType="user">
select * from t_user where id=#{value }
</select>
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--
nameSpace命名空间 这个是可以随便写的的 但是一般见名之意 还要唯一
--><mappernamespace="UserMapper2"><!--这里面专门玩 动态SQL--><!--先玩一个条件组合查询的例子
现在情况是秦端可能传递 username 也有可能传递 id 还有可能传递 password
也可以是这其中两两组合 也可以是这三个的组合
具体有多少值我们是不知道的
select * from t_user where id=? and username=? and password=?
--><selectid="findUserByCondition"parameterType="user"resultType="user">
select * from t_user where 1=1
<iftest="username!=null and username!=''">
and username=#{username}
</if><iftest="id!=null">
and id=#{id}
</if><iftest="password!=null and password!=''">
and password=#{password}
</if></select><!--下面玩下第二种写法--><selectid="findUserByCondition1"parameterType="user"resultType="user">
select * from t_user
<where><iftest="username!=null and username!=''">
and username=#{username}
</if><iftest="id!=null">
and id=#{id}
</if><iftest="password!=null and password!=''">
and password=#{password}
</if></where></select><!--下面玩下第三种写法
prefixOverrides:去掉条件成立的第一个前面的某一个标签
suffixOverrides:去掉SQL语句末尾的一个什么东西
prefix="":在下面的SQL语句之前添加什么东西
suffix="":在SQL语句的后面添加什么东西
--><selectid="findUserByCondition3"parameterType="usercondition"resultType="user">
select * from t_user
<iftest="user!=null">
where
<trimprefixOverrides="and"><iftest="user.username!=null and user.username!=''">
and username=#{user.username}
</if><iftest="user.id!=null">
and id=#{user.id}
</if><iftest="user.password!=null and user.password!=''">
and password=#{user.password}
</if></trim></if></select></mapper>
10、mybatis下的动态sql的问题(下)
10.1、就是编写SQL描述
<!--第二个案例:
查询用户 这些用户id是指定id的这些用户
我可以传递一个id 也可以传递多个id 或者传递 n个id
这个案例主要的功能:传递集合 传递数组
SELECT * FROM t_user WHERE id IN(1,3,5,7)
collection:表示的是遍历的集合是啥?List集合的话 那么这里直接写 list
item :每一次遍历出来的数据是啥
open:以什么开始
close:以什么结束
separator:数据之间使用什么进行分割
--><selectid="findUserByIds"parameterType="list"resultType="user">
select * from t_user
<foreachcollection="list"item="id"open="WHERE id IN("close=")"separator=",">
#{id}
</foreach></select><!--下面玩的是传递数组
无论是传递集合 还是传递数组 parameterType的类型都是 list
如果传输的是数组 那么 collection 后面的名字 写 array
--><selectid="findUserByIds1"parameterType="list"resultType="user">
select * from t_user
<foreachcollection="array"item="id"open="WHERE id IN("close=")"separator=",">
#{id}
</foreach></select>
<?xml version="1.0" encoding="UTF-8"?><ehcacheupdateCheck="false"><!--
diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下:
user.home – 用户主目录
user.dir – 用户当前工作目录
java.io.tmpdir – 默认临时文件路径
--><!--这个是我们的数据在硬盘上的存储位置--><diskStorepath="G:\\mytemp"/><!--
name:缓存名称。
maxElementsInMemory:缓存最大数目
maxElementsOnDisk:硬盘最大缓存个数。
eternal:对象是否永久有效,一但设置了,timeout将不起作用。
overflowToDisk:是否保存到磁盘,当系统当机时
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
clearOnFlush:内存数量最大时是否清除。
memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。
FIFO,first in first out,这个是大家最熟的,先进先出。
LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
--><!-- 数据过期策略 --><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"/></ehcache>
<!--下面研究的是 Java实体的字段和数据库字段不一致的时候的解决方案--><selectid="selectList"resultType="user">
SELECT userId AS id,NAME AS username,pwd AS PASSWORD FROM t_user
</select>
18.2、定义结果集的映射关系
<!--定义一个结果集的映射关系--><resultMapid="selectList2ResultMap"type="user"><idproperty="id"column="userId"></id><resultproperty="username"column="name"></result><resultproperty="password"column="pwd"></result></resultMap><!--下面研究的是 Java实体的字段和数据库字段不一致的时候的解决方案--><selectid="selectList2"resultMap="selectList2ResultMap">
SELECT * FROM t_user
</select>