MyBatis01--入门小案例

什么是框架?

框架就是软件的半成品,已经实现了很多功能,但是这些功能可以解决大部份软件的共性问题,现有的框架和你的产品业务无关,但是可以快速的帮你完成软件框架搭建,功能实现,部署。
好处:开发速度快,周期短,稳定(一个非常初级的工程师都可以使用框架开发出非常稳定,可靠的应用),给了开发者很大的灵活性。
常见的框架有:mybatis,spring,srpingmvc,springboot,springcloud,dubbo,mycat
目的:为了实现高可靠、高并发。

ORM框架

ORM:对象关系映射。简单来说就是数据库中一条数据对应软件中的一个对象。
ORM框架:解决如何将数据库中的数据读取出来,直接转换为对象,将Java中的对象直接保存到数据库中,有时候也会成为持久层框架,数据落地到数据库中,掉电不丢失。

java中常用的ORM

mybatis:非常常用,可以定制化sql语句。
hibernate:逐步淘汰。不需要写sql语句,但是性能相对较差。
jdbcTemplate:底层封装了hibernate

使用JDBC完成ORM的缺点

1.存在大量冗余的代码。
2.需要自己创建Connection、Statement
3.手动封装结果集为实体对象
4.查询效率低,没有对数据访问进行优化
所以mybatis出现,解决这些问题

Mybatis

简单来说,Mybatis就是一款持久层的框架,它可以定制SQL语句、存储过程以及高级映射。MyBatis避免了几乎所有JDBC的代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML注解来配置和映射原生信息,将接口和Java对象映射成数据库中的记录。

创建一个简单的mybatis工程

1.创建Mybatis Java工程
maven工程创建
2.引入依赖

    <dependencies>

        <!--
            mybatis jar 依赖
        -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--
            mysql驱动
        -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
      
        <!-- 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>


    </dependencies>

3.创建一个实体类(在数据库中创建student_tb表并与之相对应)

/**
 * 学生 与 student_tb 对应
 */
public class Student implements Serializable {

    private int id;

    private String name;

    private int age;

    private String sex;

    private float height;

    public Student() {
    }

    public Student(int id, String name, int age, String sex, float height) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.height = height;
    }

    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;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public float getHeight() {
        return height;
    }

    public void setHeight(float height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", height=" + height +
                '}';
    }
}

4.创建一个接口以及对应的映射


/**
 * 通过这个接口可以是实现相应的增删改查
 * 现在 不用自己实现这个接口 StudentDao
 *     只要需要通过配置xml,告诉mybatis 要实现这个接口
 *     还要告诉实现的接口中的方法执行 哪个sql
 *
 */
public interface StudentDao {


    /**
     * 查找所有学生
     *   select * from student_tb;
     * @return
     */
    List<Student> findAllStudent();


}


<?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 就是 映射 sql 和 接口的映射
                    表中列名 和实体类 属性的映射
    namespace 命名空间 和mybatis 二级缓存相关
-->
<mapper namespace="com.qfedu.dao.StudentDao">


    <!--
        select 代表执行 查询sql
               id="findAllStudent"  对应namespace="com.qfedu.dao.StudentDao" 的那个方法
                resultType="com.qfedu.entity.Student" 返回值类型 类 Student 并且存放到List 中
                                                       将每一行结果转化为 student 放到list
    -->
    <select id="findAllStudent" resultType="com.qfedu.entity.Student">
        select id,name,age,sex,height from student_tb
    </select>


</mapper>

xml文件要和接口对应
5.配置mybatis 配置文件
在resources 下创建 mybatisConfig.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">
<!--
    mybatis主配置
-->
<configuration >

    <!--配置mybatis环境
        default="mysql" 选择哪一个环境
    -->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源
               POOLED 连接池形式 
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/java2102"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>


    <!--
         <mappers> 配置
    -->
    <mappers>
        <!--
            告诉mybatis 要根据配置文件StudentDao.xml 的配置 生成 对应的接口实现类
        -->
        <mapper resource="com/qfedu/dao/StudentDao.xml"></mapper>
    </mappers>

</configuration>

6.创建测试类


public class TestMyBatis01 {


    private  SqlSession sqlSession;

    @Before // 初始化 sqlSession
    public void init() throws IOException {

        // 读取mybatis "mybatisConfig.xml"
        InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");

        // 工厂辅助类,帮助初始化 工厂   SqlSessionFactoryBuilder 建造者模式
        SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //SqlSessionFactory  SqlSession 工厂,工厂设计模式
        SqlSessionFactory sqlSessionFactory = sessionFactoryBuilder.build(inputStream);

        // 创建sql 连接 相当于 jdbc connection
         sqlSession =  sqlSessionFactory.openSession();

    }

    @Test
    public void finsAllStudentTest(){

       //第一种: 调用方法全限定名 不回用
//       List<Student> studentList =  sqlSession.selectList("com.qfedu.dao.StudentDao.findAllStudent");

        // 第二种
        // 获取mapper 就是获取 接口StudentDao.class 对应的实现 对象
        StudentDao studentDao  =    sqlSession.getMapper(StudentDao.class);
        List<Student> studentList =    studentDao.findAllStudent();

       for (Student student:studentList){
           System.out.println("student:"+student);
       }
    }

    @After // 释放连接
    public void destroy(){

        sqlSession.close();

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值