mybatis01:通过mybatis访问mysql数据库

MyBatis概述

MyBatis是最近几年非常流行的数据访问层(DAO)框架,简化DAO层的代码编写

常见的数据层访问方式比较

JDBC

每次操作数据库都需要获取连接关闭连接,在大量访问数据库时,频繁的开关连接消耗性能。(性能不好)
需要手动编写sql,有学习成本
查询出的结果需要手动进行封装到bean(RowMapper)
没有缓存处理机制(可以通过创建HashMap实现缓存)
sql语句写死在程序中,需要修改sql必须修改源文件(代码和语句没有分开)

Hibernate

基于面向对象理念设计的DAO层框架。基本理念就是维护对象到表的映射关系,通过操作对象操作表中的数据,从而可以减少甚至杜绝sql的使用
操作对象的等于操作表。
相对比较沉重,效率不好
当涉及到比较复杂的查询时Hibernate的操作对象的方式用起来非常麻烦,甚至无法实现复杂的SQL查询,只能用sql操作
底层需要频繁的拼接sql,产生大量冗余的sql

MyBatis

简单,方便
最大特点是自动封装返回值,SQL分离,面向接口
是一种半自动对象-表映射关系的DAO层框架
可以自动的进行对象的封装,但是sql仍然需要自己来写。
结合了JDBC和Hibernate的优点,可以手写sql灵活实现数据访问,自动封装数据,减少冗余代码。

mybatis编程模型

在这里插入图片描述

通过mybatis访问查询数据库

1)根据数据库的表结构,定义model(javabean)
2)配置SqlMapConfig.xml
配置mybatis需要用到的基本信息,同时配置sql文件所在的地址

<?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="mysqldb">
        <!--environment代表一个数据库,可以配置多个数据库,切换default就是切换数据库-->
        <environment id="mysqldb">
            <transactionManager type="JDBC"/>
            <!--mybatis自带连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///houses?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 指定映射文件的位置 -->
    <mappers>
        <mapper resource="./mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3)编写SQL语句(UserMapper.xml)

<?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="cn.ruanwen.UserMapper">
    <select id="select01" resultType="cn.ruanwenfu.pojo.User">
      select * from user;
   </select>
</mapper>

4)编写测试类

package cn.ruanwenfu.dao;

import cn.ruanwenfu.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

public class MainApp {
    public static void main(String[] args) {
        //读取配置文件
        InputStream in = MainApp.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //创建sqlSession
        SqlSession sqlSession = factory.openSession();
        //执行查询
        List<User> objects = sqlSession.selectList("cn.ruanwen.UserMapper.select01");
        //处理结果
        System.out.println(objects);
        //关闭资源
        sqlSession.close();
    }
}

bean的属性名称和表的字段之间是不是有限制来着

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值