MyBatis笔记一 同Spring的集成

来源:互联网 发布:mangos源码 编辑:程序博客网 时间:2024/04/30 14:16
Title:  MyBatis笔记一  同Spring的集成
Date: 2017-06-20
Author: kagula


Introduction:
  以代码的方式介绍如何集成,下次要用的时候直接copy paste modify就可以了。
  正文总共分为两部分,第一部分重点是代码自动生成器,第二部份重点是整合和测试。
  理论部分参考后面的资料[1]。  


Envrionment
[1]Eclipse Mars2, maven工程
[2]Spring 4.2.9.RELEASE
[3]MySQL 5.7


Content
第一部分:MyBatis-generator

Generator工具的作用是根据现有数据库表和你在xml中的配置信息生成MyBatis代码。

共有四个步骤:

第一步:MySQL中建立数据库das2017并插入数据

SQL语句如下

CREATE TABLE UserInfo (idUserInfo int(10) NOT NULL AUTO_INCREMENT, loginName varchar(64) NOT NULL UNIQUE, password varchar(64) NOT NULL, PRIMARY KEY (idUserInfo));INSERT INTO UserInfo(loginName, password) VALUES ('admin', '123');commit;


第二步:在你maven项目的pom.xml中加入下面的依赖

<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --><dependency>    <groupId>org.mybatis.generator</groupId>    <artifactId>mybatis-generator-core</artifactId>    <version>1.3.5</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><!-- 这个dependency是给Spring用的,generator依赖的MySQL驱动另外设置, --><dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>5.1.42</version></dependency>
...
    <plugin>          <groupId>org.mybatis.generator</groupId>          <artifactId>mybatis-generator-maven-plugin</artifactId>          <version>1.3.5</version>          <configuration>              <verbose>false</verbose>              <overwrite>false</overwrite>          </configuration>      </plugin> 


第三步:在项目src/main/resources 添加generatorConfig.xml文件
 tableName为对应的数据库表, domainObjectName是要生成的实体类, 
如果想要mapper配置文件加入sql的where条件查询, 可以将enableCountByExample等设为true, 
下面是generatorConfig.xml文件清单:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration>    <!--数据库驱动-->    <!-- 位置  D:\workspace_java\DAS2017\mysql-connector-java-5.1.42-bin.jar -->    <classPathEntry    location="mysql-connector-java-5.1.42-bin.jar"/>    <context id="DB2Tables"    targetRuntime="MyBatis3">        <commentGenerator>            <property name="suppressDate" value="true"/>            <property name="suppressAllComments" value="true"/>        </commentGenerator>                <!--数据库链接地址账号密码-->        <!-- das2017是schema(数据库)名称 -->        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/das2017" userId="root" password="kagula123456">        </jdbcConnection>        <javaTypeResolver>            <property name="forceBigDecimals" value="false"/>        </javaTypeResolver>                <!--生成Model类存放位置-->        <!-- 生成类的存放位置 ...\项目名称\src\main\java\com\nuoke\model -->        <javaModelGenerator targetPackage="com.nuoke.model" targetProject="src/main/java">            <property name="enableSubPackages" value="true"/>            <property name="trimStrings" value="true"/>        </javaModelGenerator>                <!--生成映射文件存放位置-->        <!-- ...\项目名称\src\main\resources\mapping -->        <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">            <property name="enableSubPackages" value="true"/>        </sqlMapGenerator>                <!--生成Dao类存放位置-->        <javaClientGenerator type="XMLMAPPER" targetPackage="com.nuoke.dao" targetProject="src/main/java">            <property name="enableSubPackages" value="true"/>        </javaClientGenerator>                <!--生成对应表及类名-->        <table tableName="UserInfo" domainObjectName="UserInfo" enableCountByExample="false"         enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>    </context></generatorConfiguration>

最后一步:

  选择项目名称节点, 右键run --》maven bulid... --》在对话框中的Goals 输入"mybatis-generator:generate"
自动生成文件,刷新下项目就可以看到自动生成的三组文件。


第二部分:同Spring的集成

第一步:spring-servlet.xml
这里列出了完整的文件,和本文相关部分从“数据库”注释开始。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mongo="http://www.springframework.org/schema/data/mongo"xmlns:cache="http://www.springframework.org/schema/cache"xmlns:c="http://www.springframework.org/schema/c"xmlns:amq="http://activemq.apache.org/schema/core"xmlns:websocket="http://www.springframework.org/schema/websocket"xmlns:jms="http://www.springframework.org/schema/jms"xmlns:util="http://www.springframework.org/schema/util"   xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/websockethttp://www.springframework.org/schema/websocket/spring-websocket.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.2.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/mongo       http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd   http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache.xsdhttp://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsdhttp://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsdhttp://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util.xsd">             <!-- Scan Controller Range -->  <context:component-scan base-package="com.nuoke.controller" /><!-- HandlerMapping -->      <bean          class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />        <!-- HandlerAdapter -->      <bean          class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />    <!-- enable spring mvc annotation driven--><mvc:annotation-driven/>    <bean id="jspViewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/view/" /><property name="suffix" value=".jsp" /></bean><websocket:handlers>    <!-- ws://localhost:8080/DAS2017/websocket.do映射到/websocket.do-->        <websocket:mapping path="/websocket.do" handler="demoWSHandler"/>     </websocket:handlers>    <bean id="demoWSHandler" class="com.nuoke.ws.WSHandler"/>    <bean id="wsClientManager" class="com.nuoke.ws.WSClientManager"/>        <!-- 数据库 -->    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://127.0.0.1/das2017"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--dataSource属性指定要用到的连接池--><property name="dataSource" ref="dataSource"/><!--configLocation属性指定mybatis的核心配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!-- 扫描 entity 包,使用别名 com.nuoke.model.UserInfo->UserInfo 有多个用;符号分隔-->        <property name="typeAliasesPackage" value="com.nuoke.model.UserInfo;"></property>                 <!-- 扫描 sql 配置文件: mapper 需要的 xml 文件 -->        <property name="mapperLocations" value="classpath:mapping/*.xml"></property></bean><!-- mapper bean --><bean id="userInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">      <property name="mapperInterface" value="com.nuoke.dao.UserInfoMapper" />      <property name="sqlSessionFactory" ref="sqlSessionFactory" />  </bean>   </beans>

参考资料[2],可以尝试DAO也采用自动扫描方式。


第二步: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>  </configuration>

这个文件是放在...\项目名称\src\main\resources路径下的,暂时没有内容。


最后一步:测试代码
在测试Controller中加入测试代码,并在浏览器中测试。
@Controller  @RequestMapping(value = "/test")  public class TestController {@Autowiredprivate UserInfoMapper userInfoMapper;//测试MyBatis的集成是否正确。//http://localhost:8080/DAS2017/test/testMyBatis.do@RequestMapping(value="/testMyBatis.do")@ResponseBodypublic Object testMyBatis(){ UserInfo entity = userInfoMapper.selectByPrimaryKey(1);   String strJSON = String.format("{\"name\":\"%s\"}", entity.getLoginname());  return strJSON;}//function}//class

上文源代码selectByPrimaryKey中的参数是数据库表结构中的idUserInfo参数值.


Reference
[1]《MyBatis简介与配置MyBatis+Spring+MySql》
http://limingnihao.iteye.com/blog/781671
[2]《Property 'mapperLocations' was not specified or no matching resources found》
http://www.imooc.com/qadetail/160149?t=222241
[3]《使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件》
http://www.cnblogs.com/smileberry/p/4145872.html