(一)Mybatis------简介与helloWorld示例

Mybatis

起始名ibatis。已迁移至github。
mybatis官网地址:http://mybatis.org/
mybatis的Github地址:https://github.com/mybatis/mybatis-3
点击mybatis-x.x.x.zip,下载全部资源。

Mybatis特性

  • mybatis支持定制化SQL,存储过程以及高级映射
  • mybatis避免了几乎所有的JDBC代码和手动设置参数以及结果集解析操作
  • mybatis可以使用简单的XML或注解实现配置和原始映射;将接口和java的POJO映射成数据库中的记录
  • mybatis是一个半自动的ORM(object relation mapping)框架

和其他持久化层比较

hibernate和JPA

  • 操作简单,开发效率高
  • 程序中长难复杂SQL与需要绕过框架
  • 内部自动生成的SQL,不容易做特殊优化
  • 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难
  • 反射操作太多导致数据库性能下降

注:个人感觉开发效率比mybatis高,在开发过程中,涉及到表字段的新增,mybatis需要进行大量修改,JPA需要修改的数量较少。但这只是肤浅的认识,深入肯定各有优劣。

根据IDEA中插件,连接数据库,并自动生成实体类。

1.点击Database。
2.点击+号
3.选择Mysql数据库。
4.输入IP、用户名、密码,测试连接,应用即可,即可。
在这里插入图片描述
在这里插入图片描述
之后可以通过,右键表,生成对应的实例类
在这里插入图片描述
注意:生成的实体类的属性,字段类型需要进行手动的修改。并且没有构造方法,需要自己创建。

mybatis相关jar包引入

<!--        Mybatis核心-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
<!--        Junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
<!--        Mysql驱动,连接数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
<!--        数据源,此次没有用到-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.25</version>
        </dependency>

准备配置文件(Mybatis全局配置文件、Mybatis映射文件)

Mybatis全局配置文件

总的配置文件。习惯性命名为mybatis-config.xml,将来整合Spring之后,这个配置文件可以省略。

<?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>
    <!-- 配置环境 -->
    <!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境,default
     属性的取值是environment标签中id的取值-->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型,Mybatis的内置的事务管理器,Spring中会配置,指定-->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <!--  驱动-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/itoah"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- Mapper的注册,指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
    <!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径 -->
    <!--不以/开头就是相对路径,以/开头就是绝对路径 -->
    <!-- Web应用部署到服务器上运行时,类路径其实是:WEB-INF目录下的classes目录,classes目录下放编译好的字节码文件 -->
        <mapper resource="mappers/ACicpTest1.xml"/>
    </mappers>
</configuration>


之后再创建对应表的xml文件。
在resources目录下创建mappers目录,并在该目录下创建ACicpTest1.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">
<!--Mybatis的映射文件-->
<!--mapper是根标签,namespace属性:在Mybatis全局范围内找到一个具体的Mapper配置文件-->
<!--引入接口后,为了方便通过接口全类名来找到mapper配置文件,所以通常将namespace属性设置为接口全类名-->
<mapper namespace="dao.ACicpTest1Dao">
    <!--配置查询一个值-->
    <!--resultType:Mybatis负责解析结果集,将解析得到的数据封装到JAVA类型中,resultType属性就是指定这个JAVA类-->
    <select id="findOneById" resultType="POJO.ACicpTest1" parameterType="String">
        <!--#{requestNo}这里是为了方便接受Java程序传过来的参数数据-->
        <!--将转换为“?”占位符-->
        select * from a_cicp_test_1 where requestNo = #{requestNo};
    </select>
</mapper>

测试类:

    @Test
    public void testHelloWorld() throws IOException {

//        1.使用Mybatis的Resources类读取Mybatis全局配置文件
        InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
//        2.使用InputStream创建sqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//        3.调用builder对象的build方法创建SqlSessionFactory对象
        SqlSessionFactory build = builder.build(stream);
//        4.通过SqlSessionFactory对象开启一个从Java程序到数据库的会话,与httpsession类似,HttpSession是浏览器到Java程序的会话。SqlSession是java程序servlet到数据库的会话
        SqlSession sqlSession = build.openSession();
        //5.在通过SqlSession对象找到Mapper配置文件中可以执行的sql语句
        //两个参数,分别是statement、parameter
        // statement参数格式:Mapper配置文件namespace属性.SQL标签的id属性
        //parameter参数;给SQL语句传入的参数
        //此时执行的查找操作已经不是到XML配置文件中取找了,因为XML配置文件中的信息已经被读取到内存中封装成对象
        Object one = sqlSession.selectOne("dao.ACicpTest1Dao.findOneById","978");
        //6.直接打印查询结果
        System.out.println(one);
        //7.提交事务
        sqlSession.commit();
        //8.关闭sqlsession
        sqlSession.close();
    }
}

配置文件都是在应用启动时就读取的。所以多个mapper文件IO也不影响性能。
build对象创建 Configuration对象。
Configuration对象 包含 MapperRegistry对象
查找SQL语句就 通过 MapperRegistry对象,在Java对象中查找而不是转到XML去执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值