要利用Mybatis首先是需要导入mybatis-x.x.x.jar,其次,要整合Spring和Mybatis需要导入mybatis-spring-x.x.x.jar。
JAR:mybatis-x.x.x
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency>JAR:mybatis-spring-x.x.x
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency>xml:POM
<!--DB--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-servlet-api</artifactId> <version>7.0.54</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>7.0.23</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency>xml:DataSource
<beanid="dataSource"class="org.apache.tomcat.jdbc.pool.DataSource"destroy-method="close"> <propertyname="poolProperties"> <beanclass="org.apache.tomcat.jdbc.pool.PoolProperties"> <propertyname="driverClassName"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="${jdbc.url}"/> <propertyname="username"value="${jdbc.user}"/> <propertyname="password"value="${jdbc.password}"/> <!--RegisterthepoolwithJMX.InorderfortheconnectionpoolobjecttocreatetheMBean.--> <propertyname="jmxEnabled"value="true"/> <!--Theindicationofwhetherobjectswillbevalidatedbytheidleobjectevictor.--> <propertyname="testWhileIdle"value="true"/> <!--Theindicationofwhetherobjectswillbevalidatedbeforebeingborrowedfromthepool.--> <propertyname="testOnBorrow"value="false"/> <propertyname="testOnReturn"value="false"/> <propertyname="initialSize"value="${jdbc.initialPoolSize}"/> <propertyname="maxActive"value="${jdbc.maxActive}"/> <propertyname="maxWait"value="${jdbc.maxWait}"/> <propertyname="minIdle"value="${jdbc.minIdle}"/> <propertyname="maxIdle"value="${jdbc.maxIdle}"/> <propertyname="maxAge"value="60000"/> <!--Thenumberofmillisecondstosleepbetweenrunsoftheidleconnectionvalidation/cleanerthread.--> <propertyname="timeBetweenEvictionRunsMillis"value="15000"/> <!--Theminimumamountoftimeanobjectmaysitidleinthepoolbeforeitiseligibleforeviction.--> <propertyname="minEvictableIdleTimeMillis"value="60000"/> <propertyname="removeAbandoned"value="true"/> <propertyname="removeAbandonedTimeout"value="30"/> <propertyname="validationQuery"value="SELECT1"/> <propertyname="validationInterval"value="30000"/> </bean> </property> </bean>常用配置:
(如果在mybatis-config.xml利用进行xml映射文件的配置,就可以不用配置下面的mapperLocation属性了)
<!--mybatis文件配置,扫描所有mapper文件--> <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml" p:mapperLocations="classpath:com/eliteams/quick4j/web/dao/*.xml"/> <!--spring与mybatis整合配置,扫描所有dao,在单数据源的情况下可以不写sqlSessionFactoryBeanName--> <beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.eliteams.quick4j.web.dao" p:sqlSessionFactoryBeanName="sqlSessionFactory"/>-------------------------阿弥陀佛----佛祖保佑----永无BUG--------------------------
SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
Spring的xml配置:
<!--创建SqlSessionFactory,同时指定数据源--> <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"> <propertyname="dataSource"ref="dataSource"/> <!--指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效--> <propertyname="configLocation"value="classpath:sqlMapConfig.xml"/> </bean>mybatis总配置文件sqlMapConfig.xml:
<configuration> <typeAliases> <typeAliastype="com.xxt.ibatis.dbcp.domain.User"alias="User"/> </typeAliases> <mappers> <mapperresource="com/xxt/ibatis/dbcp/domain/userMapper.xml"/> </mappers> </configuration>userMapper.xml:
<mappernamespace="com.xxt.ibatis.dbcp.dao.UserDao"> <resultMaptype="User"id="userMap"> <idproperty="id"column="id"/> <resultproperty="name"column="name"/> <resultproperty="password"column="password"/> <resultproperty="createTime"column="createtime"/> </resultMap> <selectid="getUserById"parameterType="int"resultMap="userMap"> select*fromuserwhereid=#{id} </select> <mapper/>DAO层接口类UserDao.java:注意此处定义的接口方法需要和UserMapper.xml映射的标签的id对应
publicinterfaceUserDao{ publicUsergetUserById(intid); }需要操作数据时调用的类UserService.java:
publicclassUserService{ //此处省略sqlSession的获取方法 privateSqlSessionsqlSession; privateUserDaouserDao; publicUsergetUserById(intid){ returnuserDao.getUserById(id); } } 二 SqlSessionFactoryBean来替代SqlSessionFactoryBuilder来创建SqlSession 采用数据映射器(MapperFactoryBean)的方式 不用写mybatis映射文件 采用注解方式提供相应的sql语句和输入参数。Spring的xml配置:
<!--引入jdbc配置文件--> <context:property-placeholderlocation="jdbc.properties"/> <!--创建jdbc数据源--> <beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"> <propertyname="driverClassName"value="${driver}"/> <propertyname="url"value="${url}"/> <propertyname="username"value="${username}"/> <propertyname="password"value="${password}"/> <propertyname="initialSize"value="${initialSize}"/> <propertyname="maxActive"value="${maxActive}"/> <propertyname="maxIdle"value="${maxIdle}"/> <propertyname="minIdle"value="${minIdle}"/> </bean> <!--创建SqlSessionFactory,同时指定数据源--> <beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"> <propertyname="dataSource"ref="dataSource"/> </bean> <!--创建数据映射器,数据映射器必须为接口--> <beanid="userMapper"class="org.mybatis.spring.mapper.MapperFactoryBean"> <propertyname="mapperInterface"value="com.xxt.ibatis.dbcp.dao.UserMapper"/> <propertyname="sqlSessionFactory"ref="sqlSessionFactory"/> </bean> <beanid="userDaoImpl"class="com.xxt.ibatis.dbcp.dao.impl.UserDaoImpl"> <propertyname="userMapper"ref="userMapper"/> </bean>数据映射器UserMapper.java:
publicinterfaceUserMapper{ @Select("SELECT*FROMuserWHEREid=#{userId}") UsergetUser(@Param("userId")longid); }DAO接口类UserDao.java:
publicinterfaceUserDao{ publicUsergetUserById(Useruser); }DAO接口实现类UserDaoImpl.java:
publicclassUserDaoImplimplementsUserDao{ privateUserMapperuserMapper; publicvoidsetUserMapper(UserMapperuserMapper){ this.userMapper=userMapper; } publicUsergetUserById(Useruser){ returnuserMapper.getUser(user.getId()); } } 三 SqlSessionFactoryBean来替代SqlSessionFactoryBuilder创建SqlSession 不采用采用数据映射器(MapperFactoryBean)的方式,改为MapperScannerConfigurer进行扫描 不用写mybatis映射文件 采用注解方式提供相应的sql语句和输入参数。 采用注解方式省去定义mapper的BeanMapperFactoryBean创建的代理类实现了UserMapper接口,并且注入到应用程序中。因为代理创建在运行时环境中(Runtime,译者注),那么指定的映射器必须是一个接口,而不是一个具体的实现类。
上面的MapperFactoryBean配置有一个很大的缺点,就是系统有很多的配置文件时全部需要手动编写,所以上述的方式已经不用了。
没有必要在Spring的XML配置文件中注册所有的映射器。相反,你可以使用一个MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
Spring的xml配置:
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propertyname="basePackage"value="org.mybatis.spring.sample.mapper"/> </bean>basePackage属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。
注意,没有必要去指定SqlSessionFactory或SqlSessionTemplate,因为MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。但是,如果你使用了一个以上的DataSource,那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性来设置正确的bean名称来使用。
啦啦啦
啦啦啦
啦啦啦
本文内容总结:1、Spring整合Mybatis的xml配置,2、Spring和Mybatis整合的三种方式,
原文链接:https://www.cnblogs.com/ClassNotFoundException/p/6425558.html