mybatis入门笔记(一)

版权声明: https://blog.csdn.net/qq_41342776/article/details/84143065

mybatis入门笔记(一)

——2018年11月12日

导入mybatis的两种方式:

  1. maven依赖:

  1. 导入mybatis jar包:

下载地址:https://github.com/mybatis/mybatis-3/releases

对比JDBC编程出现的问题凸显mybatis的好处:

先来看看jdbc的编程步骤:

①.加载数据库驱动

②.创建并获取数据库连接

③.创建jdbc statement对象

④.设置sql语句

⑤.设置sql语句中的参数(使用preparedStatement)

⑥.通过statement执行sql并获取结果

⑦.解析sql执行结果

⑧.释放资源

问题总结:

①.数据库连接,使用时就创建,不使用时就释放,对数据库的连接进行频繁开启和关闭,造成数据库资源浪费,影响性能。

②.如果更改Dao层sql,就需要重新编译java代码,不利于系统的维护。

这些问题在后面的mybatis的介绍中都可以解决。

Mybatis介绍:

1.Mybatis是个持久性的框架,是apache的顶级项目

2.Mybatis可以将向preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。

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>
    <settings>
        <!--把数据中的下划线改为驼峰命名法-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 要使延迟加载生效必须配置下面两个属性 -->
        <!--全局性设置懒加载。如果设为'false',则所有相关联的都会被初始化加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--当设置为true的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载-->
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--指定日志记录-->
        <setting name="logImpl" value="LOG4J" />
        <!--开启二级缓存,二级缓存默认开启状态-->
        <setting name="cacheEnabled" value="true"></setting>
    </settings>
    <typeAliases>
        <package name="org.robert.entity"></package>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置-->
            <transactionManager type="JDBC"/>
            <!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"
                          value="jdbc:mysql://localhost:3306/test?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf8&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="ganhua0719"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="org.robert.mapper"></package>
    </mappers>
</configuration>

操作数据库的映射文件:

创建方法接口StudentMapper.java:

测试类(单元测试):

也可以写一个工具类:

总结:

1.#{}和${}

#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,#{}中可以写成value或其它名称。

#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

 

${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

${}接收输入参数,类型可以是简单类型,pojo、hashmap。

如果接收简单类型,${}中只能写成value。

${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性…的方式获取对象属性值。

2.SqlSession使用范围:

①.SqlSessionFactoryBuilder

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

②.SqlSessionFactory

通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

③.SqlSession

SqlSession是一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。

SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

猜你喜欢

转载自blog.csdn.net/qq_41342776/article/details/84143065