zoukankan      html  css  js  c++  java
  • 初始mybatis(二)

    跟hibernate一样,也是需要拥有两个配置文件,

              全局配置文件  和  映射文件,在编写这两个映射文件之前,必须创建mybatis环境(jar包等)

          创建java工程

          3.1、jar包

              mysql(1)

                

              Mybatis(1个核心包+9个依赖包)

                  

              总共11个jar

                     

          3.2、初始化数据库脚本

              暂时只需要一张表  id是自增的,为主键

                    

          3.3、添加log4j.properties

                    

                    

                该内容可以在mybatis的jar包中找到

                    

    复制代码
    1 # Global logging configuration
    2 log4j.rootLogger=DEBUG, stdout
    3 # MyBatis logging configuration...
    4 log4j.logger.org.mybatis.example.BlogMapper=TRACE
    5 # Console output...
    6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    8 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    复制代码

          3.4、全局配置文件

              建议使用sqlMapConfig.xml,内容如下

                

              此次的配置

                

     View Code

          3.5、映射文件和操作

                User.xml  暂时这样取。

     User.xml

                该映射文件是为了解决jdbc中statement的硬编码的问题,所以,在此映射文件中,只需要指定输入参数类型,返回结果参数类型,sql语句等就差不多了,也就是将原本jdbc所遇到的硬编码问题全部是使用xml配置文件来替代,有什么需要就修改配置文件即可,现在来看看该映射文件是如何编写的。

                通过增删改查这四个操作来讲解。

                3.6.1、查询 按id查询出user对象  注意看下面的注释

                    

    复制代码
     1     <!-- 
     2             使用id进行查询
     3         查询,使用select来表示一个查询的statement,相当于statement.executeQuery
     4         id:表示该statement唯一标识
     5         parameterType:输入参数类型
     6         resultType:输出参数类型,使用的是User类,则会将查询出来的记录封装到该类中
     7         #{id}:使用#{}接收输入的参数,其中的"id"属性名任意,可以为uid,也可以为别的。
     8       -->
     9     <select id="findUserById" parameterType="java.lang.Integer" resultType="com.wuhao.mybatis.domain.User">
    10         SELECT * FROM user WHERE id= #{id}
    11     </select>
    12     
    复制代码

                操作

                  

    复制代码
     1     //根据用户id进行查询。findUserById
     2     @Test
     3     public void test() throws IOException{
     4         //跟hibernate一样,需要获取一大堆东西
     5         // 1、读取配置文件
     6         String resource = "SqlMapConfig.xml";
     7         InputStream inputStream = Resources.getResourceAsStream(resource);
     8         // 2、根据配置文件创建SqlSessionFactory
     9         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    10         // 3、SqlSessionFactory创建SqlSession
    11         SqlSession sqlSession = sqlSessionFactory.openSession();
    12         // 4、SqlSession执行statement,并返回映射结果
    13         
    14         /*
    15          * test.findUserById:在映射配置文件中,mapper的namespace为test,
    16          *                     其中有一个select,也就代表查询的statement。
    17          * 1:输入参数为1
    18          * 返回的结果类型为User
    19          */
    20         User user = sqlSession.selectOne("test.findUserById", 1);
    21         System.out.println(user);
    22         
    23         //5、关闭sqlsession资源
    24         sqlSession.close();        
    25     }
    复制代码

              3.6.2、查询, 模糊查询,对username字段进行模糊查询

                  user.xml映射文件

                    

                   操作

                    

                3.6.3、增加User, insert

                   user.xml,insert操作,对主键id有几种不同的处理方式,具体看下图的解释

                        

                    操作

                      

                     3.6.4、删除 delete

                      映射文件

                        

                      操作

                          

                    3.6.5、更新 update

                      映射文件

                          

                      操作

                              

              小总结:编写了最基础的全局配置文件和映射文件。

                    全局配置文件:连接数据库所需要的帐号密码等属性,事务等操作

                    映射文件:通过对比原始jdbc连接数据库,其实mybatis中的映射文件就是对statement的硬编码进行改进,我们配置的都市statement需要的东西

                          sql语句、输入参数类型代替sql语句中的占位符,输出参数类型表示输出结果,都可以对应着statement的操作

                          parameterType:指定输入参数的java类型,可以填写别名或Java类的全限定名。别名的用法在详细讲解全局配置文件的时候会讲解到,在那边可以配置

                          resultType:指定输出结果的java类型,可以填写别名或Java类的全限定名。

                          #{}和${}的用法

                             #{}:相当于预处理中的占位符?

                                #{}里面的参数表示接收java输入参数的名称

                                #{}可以接受HashMap、简单类型、POJO类型的参数

                                  简单类型:#{}里面可以是value,可以是任意值

                                  POJO类型的参数:必须是POJO中的属性名

                                  hashmap:key值名                        

                             ${}:相当于拼接SQL串,对传入的值不做任何解释的原样输出。

                                ${}会引起SQL注入,所以要谨慎使用。

                                ${}可以接受HashMap、简单类型、POJO类型的参数。

                                  当接受简单类型的参数时,${}里面只能是value。

                    sqlSession操作时selectOne和selectList  

                        selectOne:只能查询0或1条记录,大于1条记录的话,会报错   

                              

                        selectList:可以查询0或N条记录

     

                    对于增删改操作,切记需要commmit操作才能够生效。

                  

    四、开发dao的方式

            上面我们就单纯测试了使用mybatis对数据库的增删改查操作,在开发中,我们都是开发dao接口和dao实现类,那么就在dao实现类中调用sqlsession的方法对数据库的增删改差操作即可。

            4.1、dao接口

                

            4.2、daoImpl 实现类

                  

            4.3、测试

                  

            小总结:

                这样开发有一个不好的地方,就是不能够直接使用dao接口中的方法,而是使用的sqlSession中的方法,这样让人不能一目了然,所以我们在开发中都不使用这种方式进行开发,而是使用Mapper代理的方式,什么意思呢?接下来讲讲。

    五、Mapper代理开发的方式

            Mapper代理开发方式就是开发mapper接口(相当于dao接口)

              1、mapper接口的全限定名要和mapper映射文件的namespace一致

              2、mapper接口的方法名称要和mapper映射文件的statement的id一致

              3、mapper接口的方法参数类型要和mapper映射文件的statement的parameterType一致

              4、mapper接口的方法返回值类型要和 mapper映射文件的statement的resultType一致

            这样直接看肯定不好理解,所以直接上代码。

            三样东西,mapper接口,两个配置文件,一个全局配置文件,一个映射文件,但是这个映射文件就有要求了,除了上面所说的四点之外,另外一点也最好遵循,这里用不到,但是后面会讲解为什么会这样使用,就是mapper接口的名称要和映射文件的名称相同,

                mapper接口,UserMapper.java

                      

                映射文件,UserMapper.xml

                                   

                全局配置文件。sqlMapConfig.xml

                   其他都跟上面一样,重点讲一下这个mappers加载映射文件的问题,为什么需要mapper接口和映射文件同名,并且放入同一目录下

                         

                   为了方便批量加载映射文件。而使用这种方式,前提条件就是接口和映射文件同名并且放入同一目录下。

                测试

                    

                    直接调用方法名即可

  • 相关阅读:
    深入理解原型
    这次彻底理解了Object这个属性
    彻底理解了call()方法,apply()方法和bind()方法
    理解JavaScript中函数方法
    js常用的数组方法
    H5的canvas绘图技术
    深度理解DOM拷贝clone()
    深入理解面向对象中的原始类型和引用类型
    深入理解JavaScript的this指向问题
    .NET/ASP.NET Routing路由(深入解析路由系统架构原理)
  • 原文地址:https://www.cnblogs.com/F017/p/11604105.html
Copyright © 2011-2022 走看看