Mybatis的基本使用

关于ORM
ORM(对象关系映射,为了解决面向对象与关系数据库存在的互不匹配的现象的技术).
JPA就是一个ORM的规范,hibernate就是他的实现。
完成ORM,在市面上的框架:
hibernate(完整的ORM框架)、mybatis(半完整的ORM实现框架)

MyBatis也是一个ORM的框架,所以很多设计上和JPA是一样的。

hibernate和MyBatis都是ORM的关系映射

为什么不用原生的JDBC?
1、开发效率低,运行效率不高
2、不好修改

hibernate和Mybatis的区别:
hibernate的最大优点:开发速度快,是所有ORM里面最快的。但是它的运行速度比较慢,因为SQL我们无法控制,是它自己生成的,它为了能够兼容各种数据库,各种情况,无法选择最优方案。上手麻烦,学完之后就快了。

MyBatis:开发速度慢,但是比原生JDBC高,比hibernate慢,运行速度快,和原生JDBC差不多,因为是自己写的SQL。另外,MyBatis上手简单,学起来快。Mybatis有一个专门的代码生成器。

另外,Mybatis不能像JPA一样自动创建表。

使用Mybatis
创建一个普通的java项目

导入MyBatis需要的包:
新建一个lib文件夹,将核心包放进去,然后再导入资料里面的lib文件夹里面的依赖包。导入数据库驱动包,这里我们导入的是MySQL数据库驱动包。
在这里插入图片描述
所有操作数据库的框架,底层都是JDBC(java操作数据库的唯一技术,它只是一个规范,它的实现是由各大数据库厂商来实现),所以都必须要导入数据库驱动包。

创建一张表
新建一个包cn.itsource.domain
然后通过数据库来生成domain

domain

 private Long id;
  private String productName;
  private Double salePrice;
  private String supplier;
  private String brand;
  private Double cutoff;
  private Double costPrice;
  private Long dir_id;

建一个resources文件夹,改为资源文件夹类型,创建mybatis-config.xml文件

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties"/>

    <environments default="development">

        <environment id="development">
            <!--这里不能用<transactionManager type="JDBC"/>这种方法,会报错,以后都不要用的好,以防万一-->
            <transactionManager type="JDBC"></transactionManager>
            <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>
    <mappers>
        <mapper resource="cn/cxm/domain/ProductMapper.xml"/>
    </mappers>
</configuration>

我们以后开发肯定要用数据库:生产环境、测试环境。
environment:一个环境就代表我们一个数据库的连接信息

transactionManager 的type为JDBC
下面的配置连接池:type:POOLED
然后创建一个jdbc.properties 文件
里面配置驱动器、路径、数据库用户名,密码:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis
jdbc.username=root
jdbc.password=123456

写好了以后记得在mybatis-config.xml里面引入:

   <properties resource="jdbc.properties"/>
   ...
   <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>

映射SQL文件
SQL写在xml里面
创建一个ProductMapper.xml
意思是针对于Product.java这个文件的数据库映射文件。
namespace:命名空间
命名空间是什么?有什么作用?
以后我们会写很多的SQL,java代码需要精确的找到某一条SQL,怎么找到呢?就是通过命名空间,加上select的id,这个id很有可能就是一个方法名。

怎样才能保证命名空间绝对不重复呢?通过全限定名来给命名空间命名。
以后针对不同的增删改查操作,选择不同的标签
在这里插入图片描述
关于里面的参数类型(parameterType),可以写全限定名,也可以简写,long:映射关系表示Long;_long:表示long。
resultType:返回的每一条数据的结果类型。
写的是domain的全限定名。
在mybatis-config.xml里面读入,写在环境配置下面,mapper resource里面写的是映射SQL文件的路径
ProductMapper.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.cxm.domain.ProductMapper">
    <!--下面的id是这条SQL语句的唯一名称-->
    <select id="findOne" parameterType="long" resultType="cn.cxm.domain.Product">
        select * from Product where id = #{id}
    </select>
</mapper>

在mybatis-config.xml里面引用

 <mappers>
        <mapper resource="cn/cxm/domain/ProductMapper.xml"/>
    </mappers>
</configuration>

创建一个test包
测试代码步骤:
1、读取核心配置文件
2、创建SQLSessionFactory对象
3、创建SQLSession对象(可以做CRUD的对象)
4、完成相应的查询

public class TestMybatis {
    @Test
    public void myTest() throws Exception{
//    第一步读取核心配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
//        创建核心对象
        SqlSession sqlSession = factory.openSession();
       Product product = sqlSession.selectOne("cn.cxm.domain.ProductMapper.findOne", 1L);
        System.out.println(product);
        sqlSession.close();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值