MyBatis是一个半自动ORM框架,优势如下:
1.不用考虑公共问题,框架帮我们完成。
2.可以专心于业务逻辑,保证核心业务逻辑的开发质量
3.结构统一,便与学习。
框架的概念:
框架(Framework)是一个提供可重用的公共结构半成品。它为我们构建新的应用程序提供了极大的便利。
如何搭建MyBatis:
1.下载需要的jar文件:(http://mybatis.org)
2.将jar文件放到项目下面的lib文件夹中并部署(如没有lib文件夹可创建一个Folder)
3.将MyBatis的核心配置文件放到源码文件夹中(source Folder)中,并进行配置
<?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>
<!--配置数据库连接--> <properties resource="mybatis.properties" /> <settings> <setting name="autoMappingBehavior" value="FULL"/> </settings> <typeAliases > <package name="cn.bdqn.pojo"/> </typeAliases> <!-- 配置数据源,事务 --> <environments default="deploy"> <environment id="deploy"> <!-- 事务:JDBC/MANAGED-自己管理去 --> <transactionManager type="JDBC" /> <!-- 数据源:POOLED/UNPOOLED/JNDI --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/bdqn/dao/IinvitationMapper.xml" /> <mapper resource="cn/bdqn/dao/IReply_detailMapper.xml" /> </mappers> </configuration>
------注意:MyBatis中核心配置文件的元素节点是有一定顺序的,若不按顺序排位,那么XML文件会报错。
创建实体类:
如图所示:cn.bdqn.pojo为实体类包
创建接口:
如图:cn.bdqn.dao包下是实体类对应的接口和xml映射文件
配置数据库连接文件:MyBatis.properties
如图resources源码文件夹中
在MyBatis中我们把sql语句放在每个实体类(接口)对应的xml文件中
MyBatis中有几个核心对象
SqlSessionFactoryBuilder:用于创建SqlSessionFactory对象,通过build方法
SqlSessionFactory:用于创建SqlSession对象没通过OpenSession()
SqlSession:用于进行数据库的增删改查
具体代码如图:(其中sqlMapCongif.xml就是我们配置的MyBatis核心配置文件)
MyBatis中的sql映射文件,前面提到过每个实体类会对应一个接口和一个xml文件。
我们在编写xml映射文件时,通常以...Mapper命名,下面我们看一下xml中的配置
如图:
在xml中有增删改查所对应的标签
<select id="对应接口中的方法名" parameterType="对应接口中的参数类型" resultType="对应接口中方法返回值类型">
对应的sql语句
</select>
<insert></insert>,<update></update>,<delete></delete>这些标签都类似于<selec>
当我们新创建接口和对应的xml文件口要在MyBatis核心配置文件中的<mappers>标签下加上
<mapper resource="新创建的xml文件地址,如:cn/bdqn/dao/IReply_detailMapper.xml" />
在写增删改查的时候,标签里还有一个属性:resultMap=“id名称”,这个标签的作用是,当实体类中有嵌套关系时,在MyBatis默认的映射关系下,当从数据库读取数据时
不会自动映射实体类对应的表中没有的字段的值,列如:有时为了方便我们会在实体类中自己添加其他的属性,而对应的表中没有此地段,如果我们没有配置MyBatis的映射级别为FUll (全部自动映射)默认为Partial(只映射表中有的字段名)
接着编写对应id:
<resultMap type="自定义属性的类型" id="上面自定义的id名">
<result column="表中字段名" property="对应实体类中的属性名" />
当嵌套的是集合时:
<collection property="嵌套的其他类的集合名" ofType="嵌套类的类型">
<id column="sql语句中的主键id" property="表中对应的主键id" />(可以不写,如sql语句中没写)
<result column="sql语句中查询列名" property="对应的属性" />
</collection>
当嵌套的不是集合而是单个的对象时,用:
<association property="嵌套的对象名" javaType="嵌套对象类型">
<id column="sql语句中的主键id" property="表中对应的主键id" />(可以不写,如sql语句中没写)
<result column="sql语句中查询列名" property="对应的属性" />
</association>
</resultMap>
当需要带参方法是我们通常用Map,或者对象,或者javaBean的基本数据类型,
单个传参通常在参数前加@param注解:如:public int DeleteProviderById(@Param("id") int id);
在对应的xml标签里可以用#{参数名}来引用参数如:delete from provider where id=#{id}