Mybatis 学习概念

作者: dillqq | 来源:发表于2019-11-02 21:01 被阅读0次

    遇到的问题:
    JDBC出现The server time zone value 'Öйú±ê׼ʱ¼ä' is unrec问题
    原因时区问题
    解决方案1
    1.修改MySQL的配置文件,MySQL配置文件是my.ini文件在你的安装目录下去找,我的是在C:\Program Files (x86)\MySQL\MySQL Server 5.5\my.ini

    找到这个文件之后用Notepad++打开它,搜索[mysqld]节点在节点下面加上下面这句话

    default-time-zone=’+08:00’

    然后记得重启MySQL的服务,打开cmd窗口登录MySQL执行show variables like ‘%time_zone%’;这句命令

    解决方案2
    set global time_zone='+8:00'

    用于持久层
    使用方法:
    第一步 :导入mybatis和mysql依赖
    第二步:创建数据库表现存储使其便显成javabean用于持久层对象结果
    第三步:持久层的功能接口
    第四步:在resource中建立对应的.xml写入约束头部信息
    配置环境<configuration>
    主配置文件

            <?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>
         <!--
        properties配置,用于加载外部的配置文件
        -->
               <properties resource="db.properties">
                </properties>
    
          <!--environments主要用与数据源的配置
        可以配置多个数据源,
        通过default=“数据源id”指定-->
    <environments default="development"><!--使用的是id为development的数据源-->
        <!--
        environment:用于配置一个具体的独立的数据源
        id属性用于给当前数据源定义一个名称,方便我们在上一级environments中指定
        -->
        <environment id="development">
            <!--
            transactionManager:用于配置事务管理,事务管理默认使用的jdbc管理
            -->
            <transactionManager type="JDBC"/>
            <!--
            dataSource:具体数据源的连接信息
            type:用于指定是否使用连接池
            这里type="POOLED"代表使用连接池
            -->
            <dataSource type="POOLED">
                <!--value是从properties中取到的-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <!--第二个数据源-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--
    mappers:只要用于配置我们外部的映射配置文件
    在主配置中需要引入加载映射配置文件
    -->
    <mappers>
        <!--
        mapper:主要配置引入某一个具体的映射文件,
        resource:进行路径方式引入
        -->
        <mapper resource="mapper/usersMapper.xml"></mapper>
    </mappers>
    </configuration>
    

    resource 中properties配置文件

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/test
      username=root
      password=123456
    

    第五步:在resource中创建映射的xml
    resource中usersMapper.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 用来配置命名空间,主要进行session级别的缓存配置
            通常情况,命名空间的值,就是当前操作实体类对象的全名称
           -->
        <mapper namespace="club.bagedate.users.user">
    <select id="userList" resultType="club.bagedate.users.user">
        select * from users
    </select>
        </mapper>
    

    第六步编写测试类

    1.读取配置文件

    InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
    在读取路径无论是绝对路径还是相对路径都有问题,所以只有两种方式,第一个是使用类加载器读取类配置文件,第二个是ServletContext.getRealPath可以读取到当前项目的绝对路径。

    2.创建mysql SessionFactory对象

        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = builder.build(in);
    

    mybatis使用了构建者模式,只需要把数据给他就行,隐藏对象创建的细节

    3.使用工厂类生产sqlSession对象

    SqlSession sqlSession = build.openSession();
    使用了我工厂模式,优势解耦

    4.使用sqlSession对象创建Dao代理类

    JDBCDao mapper = sqlSession.getMapper(JDBCDao.class);
    通过字节码建立代理对象
    proxy.newProxyIntence(类加载器,代理对象要实现接口字节码数据 , 如何代理)
    类加载器:它使用和被代理对象的同一个类加载器
    代理对象要实现接口字节码数据:实现相同的接口
    如何实现:他就是增强方法需要我们自己学一个接口实现这个实现类调用代理的对应方法比如selectList
    使用了代理模式

    5.使用代理对象执行方法

    List<User> users = mapper.findAll();

    6.释放资源

        sqlSession.close();
        in.close();
    

    使用注解

    主配置文件不动

    <mappers>

             <!--
          mapper:主要配置引入某一个具体的映射文件,
          resource:进行路径方式引入
          -->
    
          <mapper resource="mapper/usersMapper.xml"></mapper>
          </mappers>
    

    改为

                <mappers>
    
             <!--
          mapper:主要配置引入某一个具体的映射文件,
          resource:进行路径方式引入
          -->
    
          <mapper class=class="com.Dao.JDBCDao"></mapper>
          </mappers>
    

    并将D文件中方法

    @Select("select * from test1")
    List<User> findAll();
    

    分析mybtis

    mybatis代理对象只做了两件事
    1.代理创建对象
    2.调用selectList
    mybitis主配置文件配置两个信息
    1.连接信息

    1. 映射信息
      配置信息
      配置了全限定的方法
      使用的是dom4j解析xml技术
      将执行的SQL语句和封装结果的实体全限定类名封装到一起就是preparestatement。如果将sql作为参数则会导致指示不明,因为id可以重复从而迷惑。

    相关文章

      网友评论

        本文标题:Mybatis 学习概念

        本文链接:https://www.haomeiwen.com/subject/umnqbctx.html