MyBatis框架实现简单的增删改查

MyBatis框架实现简单的增删改查

一、MyBatis架构

在这里插入图片描述 1、MyBatis配置

​ 两大配置文件:核心配置文件SqlMapConfig.xml;映射配置文件Mapper.xml

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在
SqlMapConfig.xml中加载。

  1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
  2. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
  3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是
    缓存执行器。
  4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。
    mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
  5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped
    Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设
    置参数。
  6. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped
    Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

二、MyBatis配置文件

1、核心配置文件sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
  <settings>
      <!--    可以在控制台输出日志信息:sql语句和参数 -->
      <setting name="logImpl" value="STDOUT_LOGGING"/>
  </settings>


  <!-- 2.表示类型别名   -->
  <typeAliases>
      <!-- 2.1每一个类型的别名  type属性表示别名对应的类型地址 alias表示起的别名-->
      <typeAlias type="java.util.List" alias="list"/>
      <!--<typeAlias type="com.kgc.pojo.Emp" alias="emp"/>-->
      <!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 -->
      <package name="com.k9503.pojo"/>

  </typeAliases>

  <!-- 分页插件 -->
  <!-- <plugins>            
       <plugin interceptor="com.github.pagehelper.PageInterceptor">                           	3.3.0版本可用 - 分页参数合理化,默认false禁用         
         pageNum表示当前页  pages表示尾页         
        true启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页                     false禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据            
       <property name="reasonable"   value="true"/>    
     </plugin>        
   </plugins> -->
  <!-- 3.环境配置  作为连接数据库的环境 -->
  <environments default="mysql">
      <environment id="mysql">
          <!--事务 管理 (原子性)-->
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
              <property name="driver" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
          </dataSource>
      </environment>
      <environment id="oracle">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
              <property name="driver" value="${jdbc.driver}"/>
              <property name="url" value="${jdbc.url}"/>
              <property name="username" value="${jdbc.username}"/>
              <property name="password" value="${jdbc.password}"/>
          </dataSource>
      </environment>
  </environments>
  <!-- 4. 加载映射文件 mappers表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->
  <mappers>
      <mapper resource="mapper/EmpMapper.xml"/>
      <!--<package name="mapper"></package>-->
  </mappers>

2、映射配置文件Mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
  <select id="selectAll" resultType="emp">
      select * from emp
  </select>
  <insert id="add" parameterType="emp">
      insert into emp (name,age,sex) values (#{name},#{age},#{sex})
  </insert>
  <update id="update" parameterType="emp">
      update emp set name=#{name},age=#{age} where id=#{id}
  </update>
  <delete id="delete" parameterType="_int">
      delete from emp where id=#{id}
  </delete>

3、数据库配置文件db.properties

jdbc.driver=com.mysql.jdbc.Driver
  jdbc.url=jdbc:mysql://localhost:3306/k9503?zeroDateTimeBehavior=convertToNull
  jdbc.username=root
  jdbc.password=171009

三、MyBatis配置文件主要配置内容

properties(属性:连接数据库四大参数)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)

四、java测试类

public class AppTest {
    SqlSession session=null;
    @Before//执行每一个test之前都会执行该方法
    public void init(){
        try {
            //加载核心配置文件
            InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");
            //创建sqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //构建工厂
            SqlSessionFactory factory = builder.build(is);
            //产生SQLSession对象
            session= factory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void selectAll() {
        List<Emp> emps = session.getMapper(EmpMapper.class).selectAll();
        System.out.println(emps);
    }
    @Test
    public void add() {
        Emp emp = new Emp();
        emp.setName("鸿蒙");
        emp.setAge(23);
        emp.setSex("男");
        int i = session.getMapper(EmpMapper.class).add(emp);
        System.out.println(i);
    }
    @Test
    public void update() {
        Emp emp = new Emp();
        emp.setName("黎明");
        emp.setAge(23);
        emp.setId(43);
        int i = session.getMapper(EmpMapper.class).update(emp);
        System.out.println(i);
    }
    @Test
    public void delete() {
        int i = session.getMapper(EmpMapper.class).delete(43);
        System.out.println(i);
    }
    @After
    public void distory(){
        try{
            session.commit();//正常提交
        }catch (Exception e){
            session.rollback();//一旦出现异常 撤销 回滚
        }finally {
            session.close();//关闭资源
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值