Mybatis
2021-09-18 09:31:20 48 举报
AI智能生成
登录查看完整内容
里面包含了有关MyBatis相关配置文件,和一些注意事项.环境搭建可能版本号不同会有差异,还包含了动态Sql等重点内容
作者其他创作
大纲/内容
概念
<sql id=\"baseSql\">字段名称 </sql>
<sql>
<where> 条件</where>
可以将sql语句中的where 1=1进行替换。
<where>
<set>语句<set>
替代修改语句中的关键字set 并且可以去除掉多余的 \
<set>
<trim prefix|suffix prefixOverrides |suffixOverrides >语句 </trim>
<trim>
代表传入的类型
collection
循环的当前对象
item
循环的次数
index
循环起始
open
中间的分隔符
separator
循环结束
close
<foreach collection=\"list\" item=\"item\" open=\"(\" separator=\
<foreach>
<if test=\"属性!=null\">拼接的条件语句</if>
判断传入的参数为null和 空字符串
<if>
<choose> <when test=\"shopName!=null and shopName!=''\"> and shop_name=#{shopName} </when> <when test=\"price!=null\"> and shop_price < #{price} </when> <otherwise> and shop_id = 1 </otherwise> </choose>
当任意条件 满足时,不再继续执行,只执行满足的条件拼接语句,如果<when>中的都不满足,则总会执行<otherwise>中的语句
<choose>
<insert id=\"insertAll\
批量增加
delete from tb_shop <where> shop_id in </where> <foreach collection=\"list\" item=\"item\" open=\"(\" separator=\
批量删除
批量修改
动态SQL
1.建表
定义CURD操作的实体类
2.定义实体类
package com. qf . mybatis.part1. basic;;public interface UserDao {public User selectUserById(Integer id) ;}}
3.定义Dao接口
<?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\" ><!--namespace =所需实现的接口全限定名--><mapper namespace= \" com . qf . mybatis . part1. basic .UserDao\"><!--id =所需重写的接口抽象方法,resultType =查询后所需返回的对象类型--><select id=\" selectUserById\" resultType= ”com . qf . mybatis . part1. basic .User\"><!--#{arg0} =方法的第一个形参-->SELECT * FROM t. _users WHERE id = #{arg0}</select></mapper>
在resource目录中创建Mapper.xml文件
4.编写Mapper.xml
<!--Mapper文件注册位置--><mappers><!--注册Mapper文件--><mapper resource=\"UserDaoMapper . xml\"/>< /mappers>
将Mapper.xml注册到mybatis-config.xml中
5.注册Mapper
String resource = \"mybatis-config.xml\";
1.获取当前配置文件的路径
InputStream inputStream = Resources.getResourceAsStream(resource);
2.将该路径读取为输入流
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
3.通过sqlsessionFacotryBulider生成sqlSessionFactory
SqlSession sqlSession = sqlSessionFactory.openSession();
4.通过sqlSessionFactory获取到sqlSession
XXXXMapper mapper = sqlSession.getMapper(XXXXMapper.class);
5.通过sqlSession获取到 接口
List<XXXX> all = mapper.findAll();
查询全部(List<>)
int i = mapper.insertXXXX(xxxx);
增加
通过ID查找
6.执行接口方法执行查询
MyBatis的API操作方式
public class HelloMyBatis {@Testpublic void test2() throws IOException {//1.获得读取MyBatis配置文件的流对象InputStream is = Resources . getResourceAsStream(”mybatis-config . xml\");//2.构建SqlSession连接对象的工厂SqlSessionFactory factory = new SqlSessionFactoryBuilder(). build(is);//3.通过工厂获得连接对象SqlSession sqlSession = factory . openSession();//4.通过连接对象直接调用接口中的方法object o = sqlSession. selectOne(“com . qf . mybatis . part1. basic .UserDao . selectUserById\
iBatis的传统操作方式
6.测试
开发步骤
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency>
MyBatis核心依赖
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
MySql驱动依赖
1.pom.xml文件中引入核心依赖
2.创建MyBatis配置文件
MyBatis环境搭建
<properties resource=\"\"></properties>
引入properties文件
<setting name=\"cacheEnabled\" value=\"true\"/>
一级缓存默认开启,开启二级缓存
<package name=\"\">
别名配置
1.概念
官方网站
下载地址
2.访问与下载
<dependency><grouprd>com.github .pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.10</version></dependency>
1.引入依赖
<configuration><typeAliases></ typeAliases><plugins><plugin interceptor= ”com . github . pagehelper . PageInterceptor\"></plugin></ plugins><environments>. .. </environments></configuration>
2.配置MyBatis-config.xml
3.PageHelper应用方式
3.开发步骤
pageInfo对象中包含了分页操作中所有相关数据
1.只有在PageHelper.startPage()方法之后的第一个查询会有执行分页
2.分页插件不支持带有\"for update\"的查询语句
3.分页插件不支持\"嵌套查询\
注意事项
4.pageInfo对象
<!-- pageHelp 分页插件-->
plugins
<property name=\"driver\" value=\"com.mysql.cj.jdbc.Driver\"/>
Druid:<property name=\"driverClassName\" value=\"${driver}\"></property>
驱动
<property name=\"url\" value=\"jdbc:mysql://localhost:3306/XXXX?serverTimezone=UTC\"/>
Druid:<property name=\"url\" value=\"${url}\"></property>
url
<property name=\"username\" value=\"XXXX\"/>
Druid:<property name=\"username\" value=\"${name}\"></property>
username
<property name=\"password\" value=\"XXXX\"/>
Druid:<property name=\"password\" value=\"${password}\"></property>
password
配置数据源
<mapper resource=\"mapper/*Mapper.xml\"></mapper>
sql映射文件路径地址
mybatis-config.xml
命名空间,通常使用接口的全限定类名
namespace
<mapper namespace=“”></mapper>
当前reslutMap的唯一标识
id
当前 对应的实体类的全限定类名/可以给别名
type
<resultMap id=\"\" type=\"\"></resultMap>
1.传入一个对象 通过#{属性名}
2.传入一个基本类型 如果只有一个,则#{}中可以任意定义,但是当传入多个参数时,需要通过下标 从0开始,或者param1... 来进行获取
3.传入一个map集合,#{}中填写的map中的key值
4.注解方式 通过接口中的@Param(\"key\") 来进行传参
5.传入基本类型 直接获取
传入参数的方式
当新增完成后,使用mybatis的 useGeneratedKeys获取到新增的主键
useGeneratedKeys
标识主键的列明
keyProperty
<insert id=“” paramterType=\"\" useGeneratedKeys=\"true\" keyProperty=\"id\" ></insert>
1.增
<delete id=\"\" paramterType=\"\"></delete>
2.删
对应接口中的方法名 注意:保持唯一性
传入的类型
paramaterType
说明数据库中的列明与实体类的属性名保持一致,直接赋值
resultType
数据库中的列明与属性名不一致,需要使用建立好的映射关系
resultMap
resultType|resultMap
<select id=\"\" paramaterType=“” resultType|resultMap=\"\" ></select>
3.查
<update id=\"\" paramterType=\"\"></update>
4.改
sql语句
*Mapper.xml
driver=com.mysql.cj.jdbc.Driver
driver
url=jdbc:mysql://localhost:3306/XXXX?characterEncoding=utf-8&serverTimezone=UTC&useUnicode=true
username=xxxx
password=xxxx
jdbc.properties
线上部署时使用
输出错误信息
1.ERROR
消息在粗粒度级别上突出强调应用程序的运行过程
输出提示信息
2.INFO
3.TRACE
指出细粒度信息事件对调试应用程序是非常有帮助的
输出调试信息
4.DEBUGGER
日志等级
log4j.logger.com.qf.dao=TRACE
日志配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
控制台输出
log4j.properties
配置文件
属性名
property
结果集的主键
column
<id property=\"\" column=\"\"></id>
主键进行关联映射
结果集的普通列
<result property=\"\" column=\"\"></result>
普通列结果集映射
普通关联
主键的类型
javaType
<idArg column=\"\" javaType=\"\"></idArg>
<arg column=\"\" javaType=\"\"></arg>
<constructor></constructor>
构造器关联
该类中的属性名
属性的全限定类名
<association property=\"\" javaType=\"\"></association>
一对一的关系映射
对应当前类中的属性名
ofType
<collection property=\"\" ofType=\"\"></collection>
一对多的关系映射
ORM映射
无缓存
有缓存
有无缓存的区别
一级缓存
在sqlSession.commit()中或者sqlSession.close()之后生效
开启全局缓存
指定Mapper缓存
缓存清空并重新缓存
二级缓存
分类
缓存(Cache)
Mybatis
0 条评论
回复 删除
下一页