samwellwang

samwellwang

coder
twitter

MyBatis学习

疫情期间为了充实自己(笑,学习一下 SSM 中的 M

2020-02-10

疫情期间为了充实自己(笑,学习一下 SSM 中的 M

MyBatis 简介#

根据 Github 上开源的 Repository 的 README 上的说明:
The MyBatis SQL mapper framework makes it easier to use a relational database with object-oriented applications. MyBatis couples objects with stored procedures or SQL statements using a XML descriptor or annotations. Simplicity is the biggest advantage of the MyBatis data mapper over object relational mapping tools.
MyBatis SQL 是一个当编写面对对象应用时使用关系型数据库更简单的一个映射框架,MyBatis 使用 XML 或者注释的方法结合对象和 sql 语句或存储过程,MyBatis 相比于对象关系映射工具,简答是他最大优势所在。
So, 很简单的说,MyBatis 就是一个在程序中方便我们使用数据库的工具,应该是和我们公司目前在用的自己封装一个东西叫 DE 的差不多。都是一个对 JDBC 进行封装的 ORM 持久层框架,据了解还有另外一款叫 Hebernate。他俩的区别主要是 Mybatis 用原生 sql,而 Hebernate 是自己封装了一套语句,叫 HQL。相比较我们公司的那玩意更像 Hebernata,但是做得更垃圾,自定义查询语句也就算了,竟然连取余功能都没有,记得前一阵要写一个接口查询身份证号中的年龄以及性别和数据库实际存的不符的,这个判断性别可真把我难坏,我不要求一个’%’搞定,你起码搞个 MOD () 之类的吧,最后还得我用 decode 把 0-9 枚举了一遍,自定义奇(男)偶数(女)可还行。鉴于我们公司那玩意太。。。了,所以了解一下这个东东还是很好地。

初识 Mybatis#

学习一个新的框架当然要从搭建框架开始喽,暂时接触到的都是为了方便直接通过 Maven 往工程里添加一个依赖就行了,会自动加载 jar 包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
     <version>3.2.8</version>
 </dependency>

Show me your code!#

接下来就是最令人兴奋的码码环节
首先需要编写一个简单的实体汽车 POJO

package com.MyBatis;
 
public class Car {
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
     
}

然后增加一个 map 的接口,通过注解将实体类和数据库对应起来

package com.Mybatis.mapper;
  
import java.util.List;
 
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
 
import com.how2java.Mybatis.Car;
  
public interface CarMapper {
  
    @Insert(" insert into car ( name ) values (#{name}) ") 
    public int add(Car Car); 
        
    @Delete(" delete from car where id= #{id} ") 
    public void delete(int id); 
        
    @Select("select * from car where id= #{id} ") 
    public Car get(int id); 
      
    @Update("update car set name=#{name} where id=#{id} ") 
    public int update(Car Car);  
        
    @Select(" select * from car ") 
    public List<Car> list(); 
}

添加 Mybatis 的总配置文件 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>
    <typeAliases>
      <package />
    </typeAliases>
    <environments default="development">
        <environment>
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property />
            <property />
            <property />
            <property />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/Mybatis/pojo/Car.xml"/>
        <mapper/> 
    </mappers>
</configuration>

编写一个测试 CURD 的测试类

package com.how2java;
   
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
 
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.Mybatis.mapper.CarMapper;
import com.how2java.pojo.Car;
   
public class TestMybatis {
   
    public static void main(String[] args) throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
  
//        add(mapper);
//        delete(mapper);
//        get(mapper);
//        update(mapper);
        listAll(mapper);
              
        session.commit();
        session.close();
   
    }
  
    private static void update(CarMapper mapper) {
        Car c= mapper.get(8);
        c.setName("修改了的Car名稱");
        mapper.update(c);
        listAll(mapper);
    }
  
    private static void get(CarMapper mapper) {
        Car c= mapper.get(8);
        System.out.println(c.getName());
    }
  
    private static void delete(CarMapper mapper) {
        mapper.delete(2);
        listAll(mapper);
    }
  
    private static void add(CarMapper mapper) {
        Car c = new Car();
        c.setName("新增加的Car");
        mapper.add(c);
        listAll(mapper);
    }
   
    private static void listAll(CarMapper mapper) {
        List<Car> cs = mapper.list();
        for (Car c : cs) {
            System.out.println(c.getName());
        }
    }
}

得,基础的 CURD 就大工告成了,其实不使用注解也可用 xml 的配置文件来做数据库和实体对象的中间层,太麻烦了。我估计正式开发也没人用那个吧,都是用注解应该,明天问问其他的朋友们。

感谢 how2j 站长!

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。