资讯专栏INFORMATION COLUMN

【mybatis】(一)mybatis快速入门

MartinDai / 585人阅读

摘要:一定义是一款优秀的持久层框架,它支持定制化存储过程以及高级映射。别名与类中的属性名保持一致。接口的名字建议为,与文件保持一致编写文件,名字与接口名保持一致。

一、定义
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录

官网:http://www.mybatis.org/

二、搭建mybatis环境 1、导入mybatis依赖包

cglib-2.2.2.jar

cgilb代理,用来自动创建类、对象

commons-logging-1.1.1.jar

通用日志包,主要用于打印日志信息

javassist-3.17.1-GA.jar

字节码包,主要是操作类、对象的属性、方法(反射)

mybatis-3.2.7.jar

mybatis核心功能包

mysql-connector-java-5.1.30.jar

数据库连接包,连接数据库

2、便携mybatis的主配置文件。

主配置文件内容包括:配置连接数据库的参数:驱动、url、账号、密码

主配置文件的作用:管理连接

主配置文件示例:




  
  
  
  
      
  
  
  
  
      
    
    
      
  

  
    
      
      
      
      
        
        
        
        
      
    
  
  
  
  
    
    
    
  
3、准备数据库和数据 4、编写POJO类

要求:类名最好与表名一致,属性名最好与字段名一致

如果属性名与表中的字段名不一致,会造成查出来的结果无法被封装成对应的类,这个时候可以通过在sql语句中,给查询的字段取别名解决该问题。别名与类中的属性名保持一致。

5、编写mapper文件

作用

编写sql操作数据库

mapper文件的取名方式:POJO类名+Mapper.xml

6、在主配置文件中加载mapper文件

作用:让mapper的配置生效

二、mybatis:自动映射的原理

1、执行sql语句查询除结果即以及字段的名字

2、根据resultType的类型调用对应POJO类的无参构造方法创建对象

2.1 获取对应的pojo类的字节码对象

2.2 根据字节码对象调用newInstance()->无参构造创建对象

3、根据结果集中字段的名字,获取到setter方法,然后利用setter方法给对应的属性赋值

例如如果结果集中字段名叫做uid,那么mybatis会根据这个名字自动拼接出setter方法的名字,然后根据方法名找到对应的方法,再通过setter方法进行赋值。

==示例:==

xml文件





    
    
    
     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        insert into person values(#{id},#{name},#{age})
    
    
    
    
        delete from person where id = #{id}
    
    
    
    
        update person set name=#{name} where id=#{id}
    

测试函数‘

package com.woniu.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.woniu.pojo.Person;
import com.woniu.util.Page;

/*
 * mybatis 中的核心API类
 *     SqlSessionFactory:用于创建SqlSession对象
 *  SqlSession:用来操作数据库的对象
 *  
 *  mybatis 可以根据mapper文件中的配置将查询出来的数据自动映射
 *  
 *  $:用于获取静态资源
 *  #:用于sql语句中获取动态资源
 *
 */

public class Test1 {
    public static void main(String[] args) throws IOException {
        //1、加载主配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //2、创建工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //3、创建SqlSession
        SqlSession session = factory.openSession();
        
        //查询所有
        List persons = session.selectList("abc.selectAll");
        System.out.println(persons);
        
        //以ID查询
        Object obj = session.selectOne("abc.selectById", 1);
        System.out.println(obj);
        
        //以名字查询
        obj = session.selectOne("abc.selectByName", "zhangsan");
        System.out.println(obj);
        
        //mybatis只支持单参传递,如果想要传递多个参数,那么需要想办法通过一个参数来传递多个数据
        //常见方式有两种:map、pojo类
        //通过map方式
        Map map = new HashMap<>();
        map.put("aaa", "1");
        map.put("bbb","zhangsan");
        obj = session.selectOne("abc.selectByIdAndName", map);
        System.out.println(obj);
        
        //通过pojo类方式
        Person person = new Person();
        person.setId(1);
        person.setName("zhangsan");
        obj = session.selectOne("abc.selectByIdAndName2", person);
        System.out.println(obj);
        
        //插入数据
        person = new Person(6,"wangsiting",22);
        int row = session.insert("abc.addPerson",person);
        //mybatis默认将自动提交关闭了,在进行增删改时需要手动提交
        session.commit();
        System.out.println(row);
        
        //删除数据
        row = session.delete("abc.deletePersonById", 6);
        session.commit();
        System.out.println(row);//为什么删除一行数据时row为2,没有删除时,row为1?
        
        //模糊查询
        //like:模糊查询时通配符应该在Java程序中拼接好,传入sql语句中
        persons = session.selectList("abc.selectLike","%a%");
        System.out.println(persons);
        
        //分页查询
        Page page = new Page<>();
        page.setIndex(0);
        page.setCount(1);
        page.setData(session.selectList("abc.selectPage", page));
        System.out.println(page);
        //5、关闭
        session.close();
        
    }
}
三、接口映射

编写接口,编写操作数据库的方法。接口的名字建议为POJO+Mapper,与mapper文件保持一致

编写mapper文件,名字与接口名保持一致。mapper文件需要和接口在同一个包下面

mapper 文件中的namespace值必须是接口的全路径(包名+接口名)

在mapper文件中编写与接口中方法对应SQL语句,要求SQL的id与方法名保持一致。可以不用指定参数类型

在mybatis主配置文件中加载接口

在调用sql语句的地方通过sqlsession对象获取mapper对象

==示例==

接口

package com.woniu.mapper;

import java.util.List;

import com.woniu.pojo.Teacher;

public interface TeacherMapper {
    
    public List all(); 
    
    public Teacher findById(int tid);
    
    public Teacher findByIdAndName(int tid,String tname);
    
    public Teacher findByIdAndName2(Teacher teacher);
}

xml文件





    
    
    
    
    
    
    

测试类

package com.woniu.test;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.woniu.mapper.TeacherMapper;
import com.woniu.pojo.Teacher;

public class Test3 {
    public static void main(String[] args) throws IOException {
        //1、加载主配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //2、创建工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
        //3、创建SqlSession
        SqlSession session = factory.openSession();
        
        TeacherMapper mapper = session.getMapper(TeacherMapper.class);
        System.out.println(mapper.all());
        
        System.out.println(mapper.findById(2));
        
        System.out.println(mapper.findByIdAndName(1, "lisi"));
        
        System.out.println(mapper.findByIdAndName2(new Teacher(1,"lisi")));
        
        //5、关闭
        session.close();
    }
}
四、在mybatis中获取参数值方式

如果参数是基本类型、包装类、String类型,可以通过任意变量名获取

如果参数是map类型,应该使用key获取参数

如果参数是自定义类型,应该使用类的属性名获取参数

如果采用接口映射实现多参传递的话,在获取参数时应该采用{0,1,param1,param2}的方式获取参数

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75230.html

相关文章

  • MyBatis 框架之快速入门程序

    摘要:一使用快速创建项目关于如何快速创建项目,这个可以参考下面这篇文章项目管理工具基础入门系列一二快速配置依赖包打开文件,快速配置包,配置代码如下依赖包数据库驱动依赖包测试依赖包三快速创建实体类创建类,代码如下四 一、使用 IDEA 快速创建 Maven 项目 关于如何快速创建 Maven 项目,这个可以参考下面这篇文章: Maven 项目管理工具基础入门系列(一) 二、快速配置 MyBat...

    hosition 评论0 收藏0
  • 解密Mybatis,手写Mybatis框架(

    摘要:核心流程三大阶段缕清思路也就是核心流程之后,我们就开始写代码了,详见下节 Mybatis快速入门 步骤: 1.加入mybatis的依赖 2.添加Mybatis的配置文件 3.场景介绍 4.编写实体类丶mapper接口及mapper.xml文件 5.编写测试代码 demo: public class TUser { private Integer id; priva...

    SunZhaopeng 评论0 收藏0
  • Java深入-框架技巧

    摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...

    chengtao1633 评论0 收藏0
  • Spring Boot快速入门(五):使用MyBatis(注解形式)进行数据库操作

    摘要:添加依赖新建项目选择三个依赖对于已存在的项目可以在加入,将会帮你自动配置好配置基本信息然后在下添加基本配置数据库连接地址数据库账号数据库密码数据库驱动创建实体创建一个实体,包含姓名年龄属性创建数据访问接口创建一个 添加依赖 新建项目选择web,MyBatis,MySQL三个依赖 showImg(https://segmentfault.com/img/bV2l1L?w=1684&h=1...

    lentoo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<