MyBatis
2021-05-31 08:46:59 1 举报
AI智能生成
mybatis
作者其他创作
大纲/内容
三层架构
界面层:
和用户打交道的,接受用户请求参数,显示处理结果的。(jsp,html,servlet)
对应的包:controller(servlet)
对应的框架:springMVC(框架)
业务逻辑层:
接受了界面层接受的数据,计算逻辑,调用数据库,获取数据
对应的包:service包(XXXservice类)
对应的框架:spring(框架)
数据访问层:
就是访问数据库,执行对数据查询,修改,删除等等。
对应的包:DAO包(XXXDAO类)
对应的框架:mybatis(框架)
mybatis实战
作用:增强的jdbc,访问数据库,执行增删改查
基本步骤
1、加入maven的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
2、创建Dao接口:定义了你操作数据的方法
3、创建mapper文件,也叫sql映射文件:写sql语句的,和接口中方法对应的sql语句
4、创建mybatis的一个主配置文件:1)连接数据库:2)指定mapper文件的位置
5、使用mybatis的对象Sqlsession,通过他的方法执行sql语句
使用mybatis的动态代理
什么是动态代理:mybatis帮忙创建dao接口实现类,在实现类中调用sqlsession的方法执行sql语句
使用动态代理方式:
1、获取SqlSession对象,SQLSessionFactory.openSession()
2、使用getMapper方法获取某个接口的对象,SQLSession。getMapper(接口.class)
3、使用dao接口的 方法,调用方法就执行mapper文件中的sql语句了
使用动态代理的方式的要求:
1、dao接口和Mapper文件放在同一个目录
2、dao接口和mapper文件的名称一致
3、mapper文件中的namespace的值是dao接口的全限定名称
4、mapper文件中的<select>,<update>,<insert>等的id是接口中方法的名称
5、dao接口中不要使用重载方法
理解参数
从java代码中把实际的值传入到mapper中
1、一个简单的参数:#{任意字符}
2、多个简单类型的参数:@Param(" 自定义名称")
3、使用一个java对象,对象的属性值作为mapper文件找到参数。#{java对象的属性名称}
4、使用参数的位置,语句#{arg0},#(arg1)mybatis3.4之前的
5、使用map的作为参数,#{map的key}
#和$的区别
1、#是占位符,表示列值得,放在等号右侧
2、$也是占位符,用来表示字符串连接的,吧sql语句连接成一个字符串
3、#占位符使用的jdbc指定PreparedStatement对象执行sql语句,效率高,没哟sql注入的风险
4、$使用的是Statement对象来执行sql,效率低,有sql注入的风险
mybatis返回结果
resultType
表示sql语句的执行结果转为的java对象类型
1、类型的全限定名称
2、别名
在mybatis主配置文件定义别名
1、使用<TypeAiles>
2、使用<package name="包名"/> 类名就是别名
resultMap
自定义列名和java 对象的属性名对应关系
列名和属性名不一样解决方式
1、使用列名
2、使用resultMap
Map
1、在java的代码中来指定like的内容
2、在mapper中拼接like
动态sql
根据一些条件得到不同的sql语句,使用mybatis的标签,例如 if where foreach等
if : 判断条件的,条件为true,就会把if之间的sql加入到主sql之后
where:<where>标签里面是多个if,如果有一个if判断为true,会在sql的后面加入一个where关键字,会去掉无用的and,or等字符
foreach:循环数组,list集合。
colllection 表示 接口中方法循环的参数类型
item 表示数组和集合的变量
open 循环开始的字符
close 循环结束的字符
separator 集合成员之间插入分隔符
<foreach collection=" " item=" " open=" " close=" " separator=" ">
#{xxx}
</foreach>
sql代码片段:复用部分sql语句的
mybatis主配置文件
1、数据库属性配置文件的使用
1)在resources目录中定义一个属性配置文件,xxxx.properties文件,在属性文件中,定义数据,格式是key和value
2)、key一般使用多级目录
3)在mysql主配置文件中,使用<property>指定properties文件的位置,从类路径根目录开始找文件,在需要的地方使用${key}
2、mapper文件的位置
<!--第二种方式:使用包名
name:xml文件(mapper文件)所在的包名,完整路径。
意思:所有包中的所有的xml文件一次都加载给mybatis
要求:
1、mapper文件名称,需要和接口名称一样,区分大小写的一样
2、mapper文件需要和接口在同一目录<package name="com.xinxian.dao"/>
pageHelper分页
功能:实现多种数据库的分页,mysql就是代替里面的limit语句的
使用步骤:
1、加入maven的依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
2、在mybatis主配置文件,加入plugin
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"/>
</plugins>
3、在查询之前,加入pageHelper的调用
加入PageHelper的方法,分页
pageNum:第几页,开始
pageSize页面中有多少行数据
PageHelper.startPage(1,3);
三层中类的交互 :用户使用界面层---->业务逻辑层---->数据访问层(持久层)---->数据库(mysql)
0 条评论
下一页