MyBatis与JDBC

       MyBatis中文官网:https://mybatis.org/mybatis-3/zh/getting-started.html

       MyBatis是支持普通SQL查询存储过程高级映射优秀持久层框架

       MyBatis封装了几乎所有的JDBC代码参数的手工设置以及结果集的检索MyBatis来做配置定义映射关系,将JavaPOJOS( Plain Old Java Objects)映射成数据库中的记录

 

MyBatis与JDBC比较:

     减少了62%的代码量,最简单的持久化框架,架构级性能增强,SQL代码从程序代码中彻底分离、可重用,增强了项目中的分工,增强了移植性。

MyBatis体系结构:

1.加载配置:

      配置有两种形式,一种是XML配置文件,另一种是Java代码的注解。MyBatis 将SQL的配置信息加载成为一个个的MappedStatement对象(包括了传入参数映射配置执行的SQL语句结果映射配置)并将其存储在内存中。

2.SQL解析: 

      当API接口层接收到调用请求时,会接收到传入SQL的ID传入对象(可以是 MapJavaBean或者基本数据类型),MyBatis会根据SQL的ID找到对应的 MappedStatement,根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数

3.SQL执行:

       将最终得到的SQL参数拿到数据库进行执行,得到操作数据库的结果。

4.结果映射: 

       将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap JavaBean或者基本数据类型,并将最终结果返回

 

MyBatis配置文件:

 MyBatis框架的XML配置文件包含下面两种类型

1. SqlMapConfig.xml: 主配置文件,用于指定数据库连接参数和框架参数。

2. SqlMap.xml: 映射定义文件,用于定义SQL语句和映射信息。

 

使用MyBatis框架时,主要涉及的API:

1.SqlSessionFactoryBuilder:

       该对象负责根据MyBatis配置文件SqlMapConfig.xml构建SqlSessionFactory实例

2.SqlSessionFactory:

       每一个MyBatis的应用程序都以一个SqlSessionFactory对象为核心,该对象负责创建SqlSession对象实例

3.SqlSession:

       该对象包含了所有执行SQL操作的方法,用于执行已映射的SQL语句

 

搭建MyBatis环境:

在使用MyBatis之前,需要将MyBatis添加到工程项目中,主要步骤如下:

1. 为工程添加MyBatis开发包数据库驱动包

2. 在src下添加MyBatis配置文件mybatis-config.xml;

3. 配置mybatis-config.xml数据库连接参数

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
        <property name="username" value="ZCY"/>
        <property name="password" value="ZCY"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <!-- <mapper resource="org/mybatis/example/BlogMapper.xml"/> -->
    <mapper resource="Mapper/AdminInfoMapper.xml"/>
  </mappers>
</configuration>

4. 利用MyBatis API编程,获取SqISession实例

public class Demo {
 public static void main(String[] args) {
	InputStream ips=Demo.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
    SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
    SqlSessionFactory factory=builder.build(ips);
    SqlSession session= factory.openSession();
    AdminInfoMapper mapper= session.getMapper(AdminInfoMapper.class);
     
    //分页
    List<AdminInfo> admins=mapper.selectByPage(new RowBounds(0,1));
    System.out.println(admins);
    session.close();
 }
}

 

通过SqlSession实现CRUD操作

获取SqISession对象后,就可以通过它对数据表执行增删改查操作,使用步骤如下:

1. 根据数据表编写实体类(JavaBean)

public class AdminInfo {
	private Long adminId;
	private String adminName;
	private String adminPwd;
	private Long adminStatus;
	private Date adminCtime;
        private Long roleId;

}

2. 编写AdminInfoMapper.xml映射文件,定义SQL操作和映射信息

public interface AdminInfoMapper {
  //查询一共有多少个用户数据
  Integer count();
  //查询所有的用户
  List<AdminInfo> selectAll();
  //将密码修改成654321
  Integer updatePwd();
  //将对应的用id的密码进行修改
  Integer updatePwd2(@Param("aaa") Long adminId,@Param("bbb") String pwd); 
  //按条件查询
  List<AdminInfo> selectByParam(@Param("aaa") String name,@Param("bbb") Integer state);
  //查询所有并且分页
  List<AdminInfo> selectByPage(RowBounds row);
}

映射文件:

<?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="Mapper.AdminInfoMapper">
  <!-- 常用标签:select,delete,update,update -->
  <!-- select默认属性:id,就是对应接口类的方法名称,resultType:返回值类型 -->
  <select id="count" resultType="int">
  <!-- 不要使用分号 -->
    select count(0) from admin_info
  </select>
  <!--  -->
  <resultMap type="bean.AdminInfo" id="AdminInfoMap">
  <id column="ADMIN_ID" property="adminId"/>
  <id column="ADMIN_NAME" property="adminName"/>
  <id column="ADMIN_PWD" property="adminPwd"/>
  <id column="ADMIN_STATUS" property="adminStatus"/>
  <id column="ADMIN_CTIME" property="adminCtime"/>
  <id column="ROLE_ID" property="roleId"/>
  </resultMap>
  <!-- 注意这里的返回值类型应该是resultMap,对应的值是resultMap标签的Id -->
  <select id="selectAll" resultMap="AdminInfoMap">
  <!-- 不要使用分号 -->
    select * from admin_info
  </select>
  <!-- 增删改不需要写返回值 -->
  <update id="updatePwd">
  </update>
  <!-- 按条件查询 -->
  <select id="selectByPage" resultMap="AdminInfoMap">
  select * from admin_info
  </select>
</mapper>

 3. 获取SqlSession对象,调用其API执行增删查改操作

4. 增删改要记得提交事务

5. 释放SqlSession对象资源

 

SqlSession的API:

1. 插入一条实体对象 :insert("SQL-ID" ,Bean); 

2. 通过条件删除一条数据 :delete("SQL-ID" ,删除条件); 

3. 通过条件查询返回一条数据 :selectOne("SQL-ID" ,查询条件); 

4. 更新数据 :update("SQL-ID" ,Bean); 

5. 查询多条数据返回集合对象:selectList("SQL-ID"); 

 

MyBatis实现分页查询:

1. MyBatis提供一个RowBounds类型,在查询时指定RowBounds参数对象可以控制抓取记录的起点和条数

2. RowBounds rb = new RowBounds(offset,limit)。

3. 配合selectByPage重写方法进行分页查询。

  //查询所有并且分页
  List<AdminInfo> selectByPage(RowBounds row);
//分页
    List<AdminInfo> admins=mapper.selectByPage(new RowBounds(0,1));
    System.out.println(admins);
    session.close();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章