欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

mybatis的详细介绍

程序员文章站 2022-05-11 11:54:18
...
mybatis
usermapper.xml<?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"><mapper namespace="com.easytopit.demo.mybatis.mapper.UserMapper"><insert id="insert" useGeneratedKeys="true" keyProperty="id" >INSERT INTO et_user (username, truename, login_time) VALUES(#{username}, #{truename}, #{loginTime});</insert>
<update id="update">UPDATE et_user SET username=#{username}, truename=#{truename}, login_time=#{loginTime} WHERE id=#{id}</update>
<delete id="delete" parameterType="int">delete from et_user where id=#{id}</delete>
<select id="queryAll" resultType="com.easytopit.demo.mybatis.bean.User">SELECT id, username, truename, login_time loginTime FROM et_user LIMIT 10</select><select id="queryAllByPage" parameterType="java.util.HashMap"  resultType="com.easytopit.demo.mybatis.bean.User"><!-- SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{param1}, #{param2} -->   SELECT id, username, truename, login_time loginTime FROM et_user LIMIT #{pageOffset}, #{pageSize}</select><select id="query" resultType="com.easytopit.demo.mybatis.bean.User">SELECT id, username, truename, login_time loginTime FROM et_user WHERE id = #{id}</select></mapper>

namespace:
是为了解决相同名字的sql操作问题,有标识的作用
例如如果访问的路径是/add.do,如果namespace为/user,则访问路径为/user/add.do
select id="selectid"
id是为了唯一标识sql语句
resultType=java.util.map
标识当行记录的类型
// 手工查询(根据命名空间 - 命名空间与Mapper接口一致) -> com/easytopit/demo/mybatis/mapper/persistent/UserMapperNS.xml
users = session.selectList("NS.queryAll");
参数的三种方法
1:使用#{0}索引
2:使用参数#{param1} 从1开始
3:注解 @param(“name”)
jdk1.8支持参数注解,其他的不支持 参数名字和param(“”)名字一致
注意事项
#{} 实际上使用的jdbc的?占位符,是安全的
11:41:56.728 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = ?
${} 底层实际上使用的替换,要记得加单引号,是不安全的
11:47:29.831 [http-bio-8080-exec-10] DEBUG c.e.c.m.AlbumMapper.deletelAlbum - ==> Preparing: delete from ab_album where id = 67
结果集映射
resulttype
映射一个具体的类
resultmap
先定义一个resultmap,然后映射
多对一映射
相当于先查询一个属性,然后自动使用属性作为参数调用其他的方法,再讲结果返回
column ''deptno ,property='dept',javaType=dept.class,one = @one(select = "命名空间.方法名")
一对多映射
懒加载
设置
需要的时候加载
出现的原因在于,应为一对多情况,有可能出现内存不足,所以当需要的时候,重新发起sql语句
insert selectkey标签
先通过sql语法,查询当前的列的最大值+1,放入到map中,然后insert into语句
<insert id="addRecord" parameterType="map" >
<!--取主键,通过取主键的最大值+1,适合单线程,不建议使用
然后将主键设置为key放到map中

-->
<selectKey keyColumn="mykey" keyProperty="scoreNo" order="BEFORE" resultType="int" >
select max(s_id)+1 as mykey from ex_score
</selectKey>
insert into ex_score (s_id,u_id,s_score,s_create_date,s_level) values(#{scoreNo},#{userId},#{userScore},#{createTime},#{level})
</insert>


sql和include标签
将相同的sql语句封装放到sql标签里面,然后使用include标签调用sql
sql里面的特殊符号
在xml转义
小写 &lt;
小于等于&lt;=
maven插件出故障

C:\Users\Administrator\.m2\repository\org\apache\maven\plugins\maven-resources-plugin

删除
导致的问题,在网路的情况下自动更新插件,如果中途网络出现故障,就会出现问题
动态sql
trim
prefix='where' prefixoverrides='and'
意思是如果前缀有and,将and覆盖成where
注意,要在每个条件前面加上and
trim转set
trim prifix = 'set' prefixoverrides='' suffix='' suffixoverride=','
意思是将前面空格替换成set,将后面的,替换成空格
set
开头添加set,结尾去掉逗号
where
作用:如果有条件满足,自动添加上where,并且会自动去掉满足第一个条件的and
foreach
大部分用于循环in里面的数据
foreach collection='传进来对象的属性' close=') item=''变量' open='(' separator='每个数据之前用逗号分开'
不建议在where1=1 ,因为会读取所有的表,有性能问题
缓存
缓存的意思是,所有查询的过一次的数据临时存储在内存中,第二次则判断内存是否存在,不存在就去读取数据库
要考虑的问题,当内存不足 时,考虑将某些数据踢出去
一级缓存
是session级别的缓存,必须是session相同,取出来的缓存数据才相同
不然你每次插叙查询一次都会去数据库查找
效果:同一个session操作数据时,第二次操作直接去缓存里面去,无需重新去数据库操作
对增差改查
二级缓存
是sessionfactory级别
效果,使用同一个sesseionfactory,当第一个sesseion的数据存入到sesseion中,然后session关闭,如果有启用了二级缓存,数据会被推送到二级缓存里面,然后下次使用新的sesseion时,会直接从二级缓存里面读取
启动二级缓存
在mapper里面,使用<cache></cache>
子主题 4
不建议使用二级缓存
相当于之前的全局变量
对查询安全
算法
fifo
将队列最右端的数据踢出去
lfu:least frequently used
使用次数最少的踢出去
也就是数据存到数据库到删除使用次数最少的
LRU:least recently userd
最近使用次数最少的
在指定时间内使用次数最少的
实现缓存
缓存的每行数据必须有唯一标识符(表中的主键),也就是map
如果有就从map中取,没有就添加
子主题 1

以上就是mybatis的详细介绍的详细内容,更多请关注其它相关文章!

相关标签: mybatis