MyBatis框架简述
MyBatis框架连接数据库操作简述
简介
MyBatis是一个开源的数据持久层框架,它内部封装了通过jdbc访问数据库的操作,支持普通的SQL查询,存储过程和高级映射。
MyBatis属于ORM,前身是Ibatis,Apache的一个开源项目,2010年这个项目从Apache迁移到Google Code改名为MyBatis之后将版本升到3.X,其官网http://blog.mybatis.org/,从3.2版本之后迁移到github,目前稳定版本为3.2.8。
ORM
ORM(Object/Relational Mapping) 即对象/关系映射,是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系。
MyBatis环境搭建
使用IDEA做例子
首先,新建maven项目,附上大佬链接 https://blog.csdn.net/atco/article/details/82872924
下载jar包文件 https://github.com/mybatis/mybatis-3/releases?after=mybatis-3.2.8
若是maven项目,则在xml文件中导入
https://mvnrepository.com/ 点击进入网址
在上方搜索框输入 mybatis
点击进入,选择版本后,在下方找到文本框复制
复制在maven的xml文件中的dependencies标签中
通过maven导入了mybatis所需要的jar包以后,就可以通过mybatis的xml文件进行配置
创建MyBatis核心配置文件
对配置文件的解析
-
configuration:配置文件的根元素节点
-
properties:通过resources属性从外部指定properties属性文件(database.properties),该属性文件描述数据库连接的相关配置(数据库驱动、连接数据库的url、数据库用户名、数据库密码),位置也是在/resources目录下。
-
settings:设置MyBatis运行中的行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用log4j实现日志功能。
-
environments:表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但必须指定其中一个默认运行环境。
-
environment:配置MyBatis的一套运行环境,需指定运行环境ID,事务管理,数据源配置等相关信息。
-
mappers:作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目可以有1个或多个SQL映射文件。
-
mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resources属性的值表述了SQL映射文件的路径(类资源路径)。
举例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias type="cn.easybuy.pojo.User" alias="User" /> <!--将实体类Product起别名 只要出现cn.easybuy.pojo.Product这一串的都可以用Product代替 可省略--> <typeAlias type="cn.easybuy.pojo.Product" alias="Product" /> </typeAliases> <!-- 环境,可以配置多个,default:指定采用哪个环境 --> <environments default="devel"> <!-- id:唯一标识 --> <environment id="devel"> <!-- 事务管理器,JDBC类型的事务管理器 --> <transactionManager type="JDBC" /> <!-- 数据源,池类型的数据源 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/easybuy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <!-- 导入SQL映射文件 注!‘.’要替换成‘/’ --> <mapper resource="cn/easybuy/mapper/user/UserMapper.xml"/> </mappers> </configuration>
创建持久化类(POJO)和SQL映射文件
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。
POJO从字面上来讲就是普通java对象,POJO类可以简单地理解为JavaBean规范的实体类,它不需要继承和实现任何特殊的Java基类和接口。
示例如下:
public class User { private Integer id; private String userName; private String password; private String realName; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRealName() { return realName; } public void setRealName(String realName) { this.realName = realName; } }
在配置好MyBatis核心配置文件以及用来对数据库进行映射的pojo类以后,就可以开始进行SQL的编写了
mybatis对于SQL语句也是通过xml文件的形式来进行编写的。
首先,我们需要了解SQL映射文件的元素
SQL映射文件元素
mappper:映射文件的根元素节点,只有一个属性namespace
namespace:用于区分不同的mapper,全局唯一
select:表示查询语句,是mybatis最常用的元素之一。
id属性:该命名空间下的唯一标识符。
resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回值类型,如int,string,类。
parameterType属性:表示查询语句传入参数的类型的完全限定名或别名。它支持基础数据类型和复杂数据类型。
resultMap元素:表示对外部resultMap定义的引用,对应外部resultMap的id,表示结果映射到哪一个resultMap上。
id属性:唯一标识,此id值用于servlet元素resultMap属性的引用。
type属性:表示该resultMap的映射结果类型。
results子节点:用于标识一些简单属性,其中column属性表示从数据库中查询的字段名,propetry则表示查询出来的 字段对应的值赋给实体对象的哪个属性。
示例如下:
<?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:命名空间,随便写,一般保证命名空间唯一 --> <mapper namespace="cn.easybuy.mapper.user.UserMapper"> <!-- statement,内容:sql语句。id:唯一标识,随便写,在同一个命名空间下保持唯一 resultType:sql语句查询结果集的封装类型,tb_user即为数据库中的表 --> <select id="getUserList" resultType="User" parameterType="User"> select * from easybuy_user </select> <insert id="add" parameterType="User"> INSERT INTO easybuy_user(loginName,userName,password,sex,identityCode,email,mobile,type) values (#{loginName},#{userName},#{password},#{sex},#{identityCode},#{email},#{mobile},#{type}) </insert> <!-- 更新语句 返回值为int --> <update id="update" parameterType="User"> UPDATE easybuy_user WHERE id = #{id} </update> <!-- 删除语句 返回值为int --> <delete id="deleteUserById" parameterType="Integer"> delete from easybuy_user where id = #{id} </delete> </mapper>
动态SQL
动态SQL是MyBatis的一个强大的特性。动态SQL基于OGNL的表达式,可使我们方便的在SQL语句中实现某些逻辑。
if:利用if实现简单的条件选择。
test属性:表示进入if内需要满足的条件。
choose:相当于Java中的switch语句,通常和when和othwise搭配。
when元素:当其test属性条件满足的时候,就会输出when元素中的内容。
otherwise元素:当所有when中的条件都不满足的时候,就会执行这个元素中的内容。
where:简化SQL语句中where的条件判断,where会智能的处理and和or,不必担心多余关键字导致的语法错误。
set:解决动态更新语句,主要是在包含的语句前输出一个set,若包含的语句是以逗号结束的,会自动把该逗号省略掉,再配合if元素可以动态的更新需要修改的字段,而不需修改的字段,则可以不再被更新。
trim:可以灵活的去除多余的关键字。
prefix:前缀,作用是通过自动识别是否有返回值后,在trim包含的内容上加上前缀。
suffix:后缀,作用是在trim上包含的内容上加上后缀。
prefixOverrides:对于trim包含内容的首部进行指定内容(如and、or)的忽略。
suffixOverrides:对于trim包含内容的首尾部进行指定内容的忽略。
foreach:迭代一个集合,通常用于in条件
item:表示集合中每一个元素进行迭代时的别名。
index:指定一个名称,用于表示在迭代过程中,每次迭代到的位置。
open:表示该语句以什么开始。
separator:表示在每次迭代之间以什么符号作为分隔符。
close:表示该语句以什么结束。
collection:最关键并容易出错的属性,需格外注意,该属性必须指定,不同情况下传入的值不一样。
若传入单参数且参数类型是一个list时,collection属性值为list
若传入单参数且参数类型是一个数组时,collection属性值为array
若传入多参数,就需要把他们封装成一个Map传入
接口映射
可以创建与mapperxml文件相同名称的接口class文件来达到映射的效果,但方法名称必须一致,以及参数一致
传参方法
- 只有单参数时可以不限定
- 多参数时,可以通过注解 方法名 (@Param(“xml文件中参数名称”) 数据类型 参数名称 )的方式导入
- 如果传入单个对象,也没有限定。
通常会使用新建工具类的方法来拿到所需要的对象。
工具类实例**
public class MyBatisUtil { private static SqlSessionFactory factory; static { try { //创建输入流引入mybatis配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //创建SqlSessionFactory对象 factory = new SqlSessionFactoryBuilder().build(is); }catch (IOException e){ e.printStackTrace(); } } public static SqlSession creatSqlSession(){ return factory.openSession(false); } public static void closeSqlSession(SqlSession sqlSession){ if (null != sqlSession){ //关闭SqlSessionFactory对象 sqlSession.close(); } } }
实现类
每个MyBatis应用程序都以一个SqlSessionFactory对象的实例为核心。
首先获取SqlSessionFactoryBuilder对象,可以根据XML文件配置文件或Configuration类的实例构建该对象。
然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得。
有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以前数据库为背景的所有执行SQL操作的方法。
由于参数environment和properties都可以为null,那么去除重复的,真正的重载方法都只有build()一种。
使用mybatis实现查询操作
public List<Product> getProductList(String proName, Integer categoryId, Integer level) { SqlSession sqlSession = MyBatisUtil.creatSqlSession(); //通过接口做映射,来调用xml文件中的查询 List<Product> product = sqlSession.getMapper(ProductMapper.class).getProductList(proName, categoryId); MyBatisUtil.closeSqlSession(sqlSession); return product; }
- 点赞
- 收藏
- 分享
- 文章举报
- 框架学习总结-----MyBatis--- 映射文件配置(简述)
- Mybatis(一)框架简述与工程示例
- 框架原理与源码解析: MyBatis_No4 面试简述
- SSM框架整合(Spring+SpringMVC+MyBatis)
- 【Java80小白建站系列】6.网站框架的搭建之SpringMvc和Mybatis框架
- spring+springMVC+mybatis框架
- springMVC+spring+mybatis整合框架
- tty系统框架简述
- 大话架构师之 大数据框架简述
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 构架、框架、设计模式之间的关系简述
- SSM框架之Mybatis动态sql配置
- Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架
- 【码歌】Mybatis框架源码解读
- 整合SpringMVC框架+Mybatis框架开发人力资源管理系统(八)
- Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
- java后台框架 springmvc mybatis oracle 和 mysql数据库
- Mybatis框架新增数据后返回ID(自增主键)。
- MyBatis框架中Mapper方法中的参数问题解决方案
- SSM框架:SpringMVC + Spring + MyBatis