时至今日,Mybatis已经成为我们持久层解决方案中的重要伴侣,如何优雅的使用它呢,我们一起讨论吧❤️
Mybatis初体验
- 本文以
SpringBoot中使用Mybatis为例,介绍一些本人使用过程中的方式方法 - 引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
- 添加mapper文件的配置
mybatis:
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/**/*.xml
- 添加包扫描
//在配置类上添加注解,basePackage为你的dao接口的包路径
@MapperScan(basePackages = {"com.xxx"})
- 这样配置就搞定了,接下来就是写我们的Dao接口 和对应的sql方法
@Repository
public interface HelloWord{
//方法的名字 对应xml中的id 返回值 对应xml中的resultType,参数类型对应 xml中的 parameterType
Person selectById(Long id);
}
<?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="注意这里是上面dao接口的全类名">
<select id="selectById" resultType="com.xxx.Person" parameterType="long">
xxx
</select>
</mapper>
- 到此 初体验搞定,下面介绍一些使用上的小方式
Mybatis使用
- 传入一个参数时可以直接取 :根据上面示例,取值:
#{id} - 传入一个参数时在if语句中取值:
<if test="_parameter != null and _parameter != '' ">
xxx
</if>
- 传入多个参数时 Mybatis会对参数进行封装成一个map
- 其中的key 是 param1...paramN value是传入的具体参数值
public void selectNameById(String id , String name) --> #{param1} #{param2}- 可以通过加注解的方式自定义key:
public void selectNameById(@param("aa")String id , String name) --> #{aa} #{param2}
- 可以通过bind标签绑定一些参数(模糊查询组装数据的时候 通常使用)
<bind name="_name" value=" '%' + name+ '%' " />
- 抽取sql片段 进行复用
<sql id="">
...
</sql>
<!--在sql语句中引用用标签,还可以在该标签中添加<propert> 可以在sql片段中引用-->
<sql id="">
...a,b,c,${name}
</sql>
<include id="">
<propert name="name" value="aaa"></propert>
</include>
- 单条数据映射成map
//其中 String 为单条记录对应的字段,Object为单条记录对应的值
dao:public map<String,Object> get(String id);
- 多条记录映射成map
//其中 String 是每条记录的主键,Object是每条记录映射的对象
//需要在dao的方法上面加一个注解 声明哪个字段映射成map的key(示例是主键id)
@MapKey("id")
dao:public map<String,Object> get(String id);
- 使用resultMap 自定义结果集时 遇到级联属性 可以使用(一条sql语句同时查询并映射)
<resultMap type="" id="">
<id column="" property=""/>
<result column="" property=""/>
<association property="" javaType="">
<id column="" property=""/>
<result column="" property=""/>
</association>
</resultMap>
- resultMap可以进行分步查询(适用场景 假如级联的属性查出多条,可以映射成集合)
<resultMap type="" id="">
<id column="id" property="lm_id"/>
<result column="" property="" />
<collection property="" select="Dao.TextDao.query2" column="villageid">
<id column="id" property="id" />
<result column="" property="s" />
</collection>
</resultMap>
- 如果返回的时间尾部有个.0,那么就用:
DATE_FORMAT(r.begin_time,'%Y-%m-%d %H:%i:%s')
Mybatis标签使用
where可以去除最前面的andset可以去除最后面的逗号trim主要功能是可以在Trim包含的内容前加上某些前缀(prefix),也可以在Trim包含的内容之后加上某些后缀(suffix)还可以把Trim包含内容的首部的某些内容忽略掉(prefixOverrides) ,也可以把Trim包含的内容的尾部的某些内容忽略掉(suffixOverrides)choose这一套组合类似 if-else if-else ,when相当于if,otherwise相当于else,就是说when只能进一个。
<choose>
<when test=""></when>
<otherwise></otherwise>
</choose>
以上就是我平时工作中用到的方法,其实配置啊方法啊有很多,但是常用的也就那么几个。欢迎讨论🔥