栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybiatis学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybiatis学习笔记

mybiatis学习笔记参考于尚硅谷mybatis文档

` 提示:这如果有错误的地方,请联系博主已更正,

文章目录
  • mybiatis学习笔记参考于尚硅谷mybatis文档
  • 前言
  • 一、Mybatits的特性
  • 二、搭建Mybatis
    • 1.在maven中引入依赖
    • 2.xml核心配置文件
    • 3.通过junit来测试
  • 三、创建log4j
    • 1.在maven中添加依赖
    • 2.创建配置文件
  • 四、核心配置详细
  • 五、Mybatis获取值的两种方式
    • 1.单个字面量类型的参数
    • 2.多个字面量类型的参数
    • 3.map集合类型参数
    • 4.实体类类型的参数
    • 5.使用@param标识参数
  • 六、特殊sql的执行
    • 1.模糊查询
    • 2.批量删除
    • 3.动态设置表名
    • 4.添加功能获取自增主键
  • 七、resultMap映射集
    • 1.多对一处理-》使用association处理映射关系
    • 2.一对多处理-》使用collection处理映射关系
  • 八、动态sql
    • 1.for
    • 2.where
    • 3.trim
    • 4.choose、when、otherwise
    • 5.foreach
    • 6.sql片段
  • 九、Mybatis的缓存
    • 1.Mybatis的一级缓存
    • 2.Mybatis的二级缓存
    • 3.二级缓存的相关配置
    • 4.Mybatis缓存查询顺序
  • 十、Mybatis逆向工程
    • 1.maven依赖
  • 十一、分页插件
    • 1.添加maven依赖
    • 2.配置分页插件
    • 3.分页插件的使用


前言

例如:Java的jdbc原生操作,有时候过于繁琐,所以就出现了这样一个基于Java的持久层框架Mybatis。它提供了sqlmap和DAO的框架。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mybatits的特性

1)它是支持定制化sql、存储过程以及高级映射的优秀持久层框架。

2)它避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。

3)它可以使用简单的xml或注解用于配置和原始映射,将接口和Java的实体类映射成数据库中的记录。

4)它是一个半自动的ORM(Object Relation Mapping)框架。

二、搭建Mybatis 1.在maven中引入依赖



org.mybatis
mybatis
3.5.7



junit
junit
4.12
test



mysql
mysql-connector-java
5.1.3



log4j
log4j
1.2.17


2.xml核心配置文件

一般命名为“mybatis-config.xml”,虽然并非强制要求命名这样,但是约定大于配置,所以建议这样命名。

代码如下(示例):




















3.通过junit来测试
//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new
SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//这个是自己创建的mapper
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配
映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//sqlSession.commit();
System.out.println("结果:"+result);
三、创建log4j 1.在maven中添加依赖

在第二模块中已添加

2.创建配置文件

命名规则和mybatis的一样,log4j的配置文件名为log4j.xml





















日志的级别

FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)

从左至右打印的内容越来越详细

四、核心配置详细

在核心配置文件中必须按照以下顺序进行创建,不然会导致错误。

properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?

详细配置













































五、Mybatis获取值的两种方式

MyBatis获取参数值的两种方式:${}和#{}

1)${}的本质就是字符串拼接,${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引 号;

2)#{}的本质就是占位符赋值,#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1.单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型, 此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号

2.多个字面量类型的参数

若mapper接口中的方法参数为多个时 此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1 ...为键,以参数为值;以param1,param2...为键,以参数为值;因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

3.map集合类型参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

4.实体类类型的参数

若mapper接口中的方法参数为实体类对象时此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

5.使用@param标识参数

可以通过@Param注解标识mapper接口中的方法参数

此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以param1,param2...为键,以参数为值;只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

六、特殊sql的执行 1.模糊查询

示例代码

List testMohu(@Param("mohu") String mohu);

select * from t_user where username like '%${mohu}%'
select * from t_user where username like concat('%',#{mohu},'%')
select * from t_user where username like "%"#{mohu}"%"

以上三种方式都可以,但是第二中个人最常用

2.批量删除
int deleteMore(@Param("ids") String ids);	

delete from t_user where id in (${ids})

3.动态设置表名
List getAllUser(@Param("tableName") String tableName);

select emp.*,dept.* from t_emp emp left join t_dept dept on emp.did =
dept.did where emp.eid = #{eid}

2.一对多处理-》使用collection处理映射关系













select * from t_emp where 1=1

and ename = #{ename}


and age = #{age}


and sex = #{sex}


2.where

where和if一般结合使用:

1)若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字

2)若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的 and去掉

注意:where标签不能去掉条件最后多余的and


select * from t_emp


ename = #{ename} and


age = #{age} and

sex = #{sex}



4.choose、when、otherwise

choose、when、otherwise相当于if...else if..else