配置开发MyBatis

Posted haibinggan-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置开发MyBatis相关的知识,希望对你有一定的参考价值。

  MyBatis是一款持久层(ORMapping)框架,支持定制化SQL,避免了几乎所有的JDBC代码和手动设置参数,以及获取结果集。将接口和Java的POJO映射成数据库中的记录。

  1、建立名为mybatis的maven父项目,同时配置依赖包

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

  2、建立mybatis-base的子模块并配置mybati依赖包

  3、建立数据表News,并在父pom和子pom中引入数据库依赖包

    <dependency>
      <groupId>org.wisdom-framework</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.34_1</version>
    </dependency>

  4、创建mybatis的配置文件:在src/main/resources/mybatis目录下创建mybatis.cfg.xml配置文件,在其里面编辑连接的数据库和连接方式

<environments default="development"> <!-- 配置数据源的相关信息 -->
  <environment id="development">
    <transactionManager type="jdbc" /> <!-- 使用JDBC方式管理 -->
    <dataSource type="POOLED"> <!-- 设置数据源类型,此时为POOLED -->
      <property name="driver" value="org.gjt.mm.mysql.Driver" />
      <property name="url" value="jdbc:mysql://localhost:3306/mldn" />
      <property name="username" value="root" />
      <property name="password" value="mysqladmin" />
    </dataSource>
  </environment>
</environments>

  5、创建与数据表相对应的vo类News,字段名称一样

  6、在src/main/resources源目录下创建mybatis.mapper.cn.lt.mapping包,在该包里创建News.xml文件,用来配置使用的SQL语句。

<!-- 设置命名空间,可以与不同表的同类型操作进行区分,使用时以“空间名称.id”的方式调用 ,相当于配置文件自己的名字-->
<mapper namespace="cn.mldn.mapping.NewsNS">
  <select id="getAllCount" resultType="Long" parameterType="map">
    SELECT COUNT(*) FROM news WHERE ${column} LIKE #{keyWord} ;
  </select>
  <select id="findSplit" resultType="News" parameterType="map">
    SELECT nid,title,pubdate FROM news WHERE ${column} LIKE #{keyWord} LIMIT #{start} , #{lineSize} ;
  </select>
  <select id="findAll" resultType="News">
    SELECT nid,title,pubdate FROM news ;
  </select>
  <select id="findById" resultType="News" parameterType="long">
    SELECT nid,title,pubdate FROM news WHERE nid=#{id} ;
  </select>
    <!-- 定义增加数据的操作配置,同时指定参数类型 -->
  <insert id="doCreate" parameterType="News" keyProperty="nid" useGeneratedKeys="true">
    INSERT INTO news(title,pubdate) VALUES (#{title},#{pubdate})
  </insert>
  <update id="doEdit" parameterType="News">
    UPDATE news SET title=#{title},pubdate=#{pubdate} WHERE nid=#{nid}
  </update>
  <delete id="doRemove" parameterType="Long"> <!-- 单个参数 -->
    DELETE FROM news WHERE nid=#{id}
  </delete>
</mapper>

  解释:<insert>中的id作为查询语句的唯一表示,parameterType为传入的数据类型,从vo类中传入,之所以只使用vo类名称而没有加上包,是因为在mybatis.cfg.xml中定义了别名:

    <typeAliases>
      <package name="cn.mldn.vo"/>  <--根据包名称自动映射-->
    </typeAliases> 

  resultType为从数据库返回的数据类型,keyProperty和useGeneratedKeys表示nid这个字段进行自动增长

    SQL语句中的#{字段}代替了传统PreparedStatement中的“?”,相当于直接从vo类中取得数据

  7、修改mybatis.cfg.xml文件,追加映射文件的路径

    <mappers>
      <mapper resource="mybatis/mapper/cn/mldn/mapping/News.xml"/>
    </mappers>

到此为止,mybatis的核心配置文件定义完成,接下来需要对mabatis.cfg.xml资源文件进行读取

  8、使用mybatis的Resources类进行配置文件加载,使用SqlSessionFactory类进行连接工厂定义,用来管理多个连接,使用SqlSession进行具体的CRUD数据操作。

  技术分享图片

 

 

番外篇:日志配置

  当我们测试SQL执行的时候,程序是没有任何信息返回的,为了能够容易的看到程序是否执行,可以使用日志组件

  1、父pom和子pom中引入三个日志的依赖包:

    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.11.0</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.8.0-beta2</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.8.0-beta2</version>
      <scope>test</scope>
    </dependency>

  2、在src/main/resources/目录里面配置log4j.properties配置文件,并写入

    <--这里的包是News.xml中定义的namespace,但不包括类名,只有包名-->

    log4j.logger.cn.lt.mapping=TRACE

  这样执行SQL语句的时候就会在控制台输出日志

 会发现,使用MyBatis之后,没有编写任何一行具体的JDBC操作,自动的根据配置文件将vo转换成了具体的参数

 

 

 

备注:

  <transactionManager type="jdbc" /> <!-- 使用JDBC方式管理 --> 

    采用JDBC的事务处理,提供有事务的创建,提交,回滚和关闭功能。也可以采用managed方式,表示什么都不做,没有提交回滚的事务连接。

  <dataSource type="POOLED"> <!-- 设置数据源类型,此时为POOLED -->

    配置数据库连接访问,其中POOLED表示采用数据库连接池进行连接

    也可以采用JNDI,表示使用Tomcat容器配置的数据库连接池访问

    也可以采用UNPOOLED,表示不使用连接池管理




























































以上是关于配置开发MyBatis的主要内容,如果未能解决你的问题,请参考以下文章

MyBatisMyBatis之配置讲解

MyBatisMyBatis Generator配置

MyBatisMyBatis 核心配置综述之 ResultSetHandler

MybatisMyBatis之配置自定义数据源

小峰mybatismybatis使用注解配置sql映射器--动态sql

MyBatisMyBatis 核心配置综述之 ParameterHandler