Mybatis
2020-08-18 17:59:17 123 举报
AI智能生成
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。MyBatis具有简单易用的API,可以很好地集成到Spring等框架中,并且提供了丰富的插件机制,可以方便地扩展其功能。总之,MyBatis是一个功能强大、灵活而又易于使用的持久层框架,适用于各种规模的项目开发。
作者其他创作
大纲/内容
三层架构
1.界面层(视图层)一完成和用户的交互 ,接收请求,显示请求的处理结果
2.业务逻辑层一计算数据 ,处理业务逻辑
3.数据访问层(持久层)一数据库操作
框架
1.界面层: SpringMVC
2.业务逻辑层: Spring
3.数据访问层: MyBatis
Mybatis
作用:增强的jdbc,访问数据库,执行增删改查
基本步骤
1.加入maven的依赖-
<dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactld>
<version> 3.5.1 </version>
</dependency>
<groupId> org.mybatis </groupId>
<artifactId> mybatis </artifactld>
<version> 3.5.1 </version>
</dependency>
2.创建Dao接口:定义了你操作数据的方法
3.创建mapper文件,也叫做sq|映射文件:写sql语句的,和接口中方法对应的sq|语句
4.创建mybatis的一个主配置文件: 1 )连接数据库; 2 )指定mapper文件的位置
5.使用mybatis的对象SqISession,通过他的方法执行sql语句
1.inputStream in= Resources.getResoursesAsStraem("mybatis.xml主配置文件路径”);
2.SqlsessionFactory factory = SqlsessionFactoryBuilder.build(in);
3.Sqlsession session =factory.openSession( );
4.session.commit( );
5.session.close( );
Mybatis的动态代理
什么动态代理: mybatis帮你创建dao接口的实现类,在实现类中调用SqlSession的方法执行sq|语句
使用动态代理的方式
1.获取SqISession对象, SqlSessionFactory.openSession(参数默认为false,关闭自动提交)
2.使用getMapper方法获取某个接口的对象,sqlSession.getMapper(接口.class)
3.使用dao接口的方法,调用方法就执行了mapper文件中的sql语句
使用动态代理方式的要求:
1.dao接口和mapper文件放在一 起,同-个目录
2.dao接口和mapper文件名称- 致
3.mapper文件中的namespace的值是dao接口的全限定名称
4.mapper文件中的<select>, <insert>. <update>, <delete>等的id是接口中方法名称
5.dao接口中不要使用重载方法,不要使用同名的,不同参数的方法
参数传递:
1.-个简单类型的参数: #{任意字符}
2.多个简单类型的参数,使用@Param(“自定义名称")
3.使用一个java对象 ,对象的属性值作为mapper文件找到参数,#{java对象的属性名称}
4.使用参数的位置,语法#{arg0}, #{arg1} . mybatis3.4之前的版本,使用的#{0}, #{1}
5.使用Map作为参数,#{map的key}
$和#的区别:
1.#是占位符,表示列值的,放在等号右侧
2.$占位符,表示字符串的连接,把sq|语句连接成- 个字符串
3.#占位符使用的jdbc指定PreparedStatement对象执行SQL语句,效率高,没有sq|注入的风险
4.$使用的是Statement对象执行sql,效率低,有sq|注入的风险
Mybatis返回结果:
resultType
表 示sq|语句的执行结果,转为java对象的类型
1.类型的全限定名称
2.别名
在mybatis主配置文件定义别名 <typeAliases>
1.使用 <typeAlias>
<typeAlias type="com.bjpowernode.vo.ViewStudent" alias="别名" />
2.使用<package name=“包名" /> : 类名就是别名
resultMap
自定义列名和java对象的属性名对应关系
<resultMap id="id的值,唯一标识" type="com.bjpowernode.domain.MyStudent">
<!--主键列,使用id。 culumn为数据库的列名,property为java实体类的属性名-->
<id column="id" property="stuid" />
<!--非主键列,使用result-->
<result column="name" property="stuname" />
<result column="age" property="stuage" />
</resultMap>
<!--主键列,使用id。 culumn为数据库的列名,property为java实体类的属性名-->
<id column="id" property="stuid" />
<!--非主键列,使用result-->
<result column="name" property="stuname" />
<result column="age" property="stuage" />
</resultMap>
列名和属性名不一样解决方式
1.使用列别名
select id as stuid
2.使用resultMap
like
1.在java代码中指定like的内容
where name like #{name}
2.在mapper中拼接like
where name like "%" #{name} "%"
动态SQL
根据条件,能够得到不同的sqi语句,使用mybatis的标签,例如if , where,foreach等
if:判断条件的,条件为true ,就会把if之间的sq|加入到主sq|之后
where : <where>标签里面是多个if,如果有一个if判断为true,会在sql的后面加入where关键字,会去掉无用的and,or等字符
foreach :循环数组,list集合。
<foreach collection="" item="" open=””close=””separator=”>
#({xxx}
</foreach>
collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list
item:自定义的,表示数组和集合成员的变量
open:循环开始是的字符
close:循环结束时的字符
separator:集合成员之间的分隔符
#({xxx}
</foreach>
collection:表示接口中的方法参数的类型,如果是数组使用array,如果是list集合使用list
item:自定义的,表示数组和集合成员的变量
open:循环开始是的字符
close:循环结束时的字符
separator:集合成员之间的分隔符
sq|代码片段:复用部分sqi语句的
1.先定义<sql id="自定义名称唯一"> sql语句,表名,字段等</sq|>
2.再使用,<include refid= "id的值" />
Mybatis主配置文件
数据库配置文件的使用
1 )在resources目录中定义一个属性配置文件 ,xxx.properties ,例如jdbc.properties,在属性配置文件中,定义数据,格式是key=value,key -般使用.做多级目录的
2)在mybatis的主配置文件,使用<propertites resource="">指定文件的位置在需要使用值的地方,${key}
mapper文件的位置
第一种方式:指定多个mapper文件
<!--<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
<mapper resource="com/bjpowernode/dao/OrderDao.xml" />-->
第二种方式: <!--使用包名
name: xml文件( mapper文件)所在的包名,这个包中所有xml文件-次都能加载给mybatis
使用package的要求: 1. mapper文件名称需要和接口名称-样,区分大小写的- -样
2. mapper文件和dao接口需要在同一目录
-- >
<package name="com.bjpowernode.dao"/>
<!--<mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
<mapper resource="com/bjpowernode/dao/OrderDao.xml" />-->
第二种方式: <!--使用包名
name: xml文件( mapper文件)所在的包名,这个包中所有xml文件-次都能加载给mybatis
使用package的要求: 1. mapper文件名称需要和接口名称-样,区分大小写的- -样
2. mapper文件和dao接口需要在同一目录
-- >
<package name="com.bjpowernode.dao"/>
pageHelper
功能:实现多种数据库的分页, mysql就是代替limit语句的
使用步骤:
1.加入Maven依赖:
<dependency>
<groupId> com.github.pagehelper</groupld>
<artifactld> pagehelper</artifactId>
<version> 5.1.10</version>
</dependency>
<groupId> com.github.pagehelper</groupld>
<artifactld> pagehelper</artifactId>
<version> 5.1.10</version>
</dependency>
2.在mybatis主配置文件,加入plugin
< plugins>
<plugin interceptor= "com.github.pagehelper.PageInterceptor" />
</plugins>
<plugin interceptor= "com.github.pagehelper.PageInterceptor" />
</plugins>
3.在你的查询方法之前,加入PageHelper方法调用
PageHelper.startPage(1,3);
List<Student> students = dao.selectAll0;
List<Student> students = dao.selectAll0;
0 条评论
下一页