1)使用mybatis,必须有个全局配置文件configuration.xml,来配置mybatis的缓存,延迟加载等等一系列属性,该配置文件示例如下:
Java代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
<settings>
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
<!-- 查询时,关闭关联对象即时加载以提高性能 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->
<setting name="aggressiveLazyLoading" value="false" />
<!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
<setting name="multipleResultSetsEnabled" value="true" />
<!-- 允许使用列标签代替列名 -->
<setting name="useColumnLabel" value="true" />
<!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
<setting name="autoMappingBehavior" value="FULL" />
<!-- 对于批量更新 *** 作缓存SQL以提高性能 -->
<setting name="defaultExecutorType" value="BATCH" />
<!-- 数据库超过25000秒仍未响应则超时 -->
<setting name="defaultStatementTimeout" value="25000" />
</settings>
<!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->
<typeAliases>
<typeAlias alias="TestBean"
type="com.wotao.taotao.persist.test.dataobject.TestBean" />
</typeAliases>
<!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 -->
<mappers>
<mapper resource="persist/test/orm/test.xml" />
</mappers>
</configuration>
2)该文件放在资源文件的任意classpath目录下,假设这里就直接放在资源根目录,等会spring需要引用该文件。
查看ibatis-3-config.dtd发现除了settings和typeAliases还有其他众多元素,比如properties,objectFactory,environments等等,这些元素基本上都包含着一些环境配置,数据源定义,数据库事务等等,在单独使用mybatis的时候非常重要,比如通过以构造参数的形式去实例化一个sqlsessionFactory,就像这样:
Java代码
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader)
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, properties)
SqlSessionFactory factory = sqlSessionFactoryBuilder.build(reader, environment, properties)
而typeHandlers则用来自定义映射规则,如可以自定义将Character映射为varchar,plugins元素则放了一些拦截器接口。
2)在spring配置文件中指定c3p0数据源定义如下:
Java代码
<!-- c3p0 connection pool configuration -->
<bean id="testDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${db.driver.class}" />
<!-- 连接URL串 -->
<property name="jdbcUrl" value="${db.url}" />
<!-- 连接用户名 -->
<property name="user" value="${db.username}" />
<!-- 连接密码 -->
<property name="password" value="${db.password}" />
<!-- 初始化连接池时连接数量为5个 -->
<property name="initialPoolSize" value="5" />
<!-- 允许最小连接数量为5个 -->
<property name="minPoolSize" value="5" />
<!-- 允许最大连接数量为20个 -->
<property name="maxPoolSize" value="20" />
<!-- 允许连接池最大生成100个PreparedStatement对象 -->
<property name="maxStatements" value="100" />
<!-- 连接有效时间,连接超过3600秒未使用,则该连接丢弃 -->
<property name="maxIdleTime" value="3600" />
<!-- 连接用完时,一次产生的新连接步进值为2 -->
<property name="acquireIncrement" value="2" />
<!-- 获取连接失败后再尝试10次,再失败则返回DAOException异常 -->
<property name="acquireRetryAttempts" value="10" />
<!-- 获取下一次连接时最短间隔600毫秒,有助于提高性能 -->
<property name="acquireRetryDelay" value="600" />
<!-- 检查连接的有效性,此处小弟不是很懂什么意思 -->
<property name="testConnectionOnCheckin" value="true" />
<!-- 每个1200秒检查连接对象状态 -->
<property name="idleConnectionTestPeriod" value="1200" />
<!-- 获取新连接的超时时间为10000毫秒 -->
<property name="checkoutTimeout" value="10000" />
</bean>
配置中的${}都是占位符,在指定数据库驱动打war时会自动替换,替换的值在父pom中配置。
3)需要一个sessionFactory来生成session,sessionFactory配置如下:
Java代码
<bean id="testSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:configuration.xml" />
<property name="dataSource" ref="testDataSource" />
</bean>
4)配置一个映射器接口来对应sqlSessionTemplate,该映射器接口定义了接口方法:
Java代码
<!-- data OR mapping interface -->
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="testSqlSessionFactory" />
<property name="mapperInterface" value="com.wotao.taotao.persist.test.mapper.TestMapper" />
</bean>
5)至此,一个完整的myabtis整合spring的配置文件看起来应该如下所示:
Java代码
<?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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<!-- c3p0 connection pool configuration -->
<bean id="testDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${db.driver.class}" />
<property name="jdbcUrl" value="${db.url}" />
<property name="user" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="maxStatements" value="100" />
<property name="maxIdleTime" value="3600" />
<property name="acquireIncrement" value="2" />
<property name="acquireRetryAttempts" value="10" />
<property name="acquireRetryDelay" value="600" />
<property name="testConnectionOnCheckin" value="true" />
<property name="idleConnectionTestPeriod" value="1200" />
<property name="checkoutTimeout" value="10000" />
</bean>
<bean id="testSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:configuration.xml" />
<property name="dataSource" ref="testDataSource" />
</bean>
<!-- data OR mapping interface -->
<bean id="testMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="testSqlSessionFactory" />
<property name="mapperInterface" value="com.wotao.taotao.persist.test.mapper.TestMapper" />
</bean>
<!-- add your own Mapper here -->
<!-- comment here, using annotation -->
<!-- <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">-->
<!-- <constructor-arg index="0" ref="sqlSessionFactory" />-->
<!-- </bean>-->
<!-- base DAO class, for module business, extend this class in DAO -->
<!-- <bean id="testBaseDAO" class="com.test.dao.TestBaseDAO">-->
<!-- <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />-->
<!-- </bean>-->
<!-- <bean id="testDAO" class="com.test.dao.impl.TestDAOImpl" />-->
<!-- you can DI Bean if you don't like use annotation -->
</beans>
想必在利用Mybatis Generator生成代码之后,相比看着一堆鸡肋的注释很多人都和我一样很纠结,明明数据库中字段有注释,为什么生成的Bean没有呢?带着发现问题,一定要解决问题的决心,我进行了探索。先mark几篇Mybatis Generator的资料: Mybatis Generator中文API 一篇很详细的博客
要想生成中文注释,首先我们需要新建一个maven项目
然后新建一个类,名字随便啦。。。我这里叫QnloftCommentGenerator,上代码
package org.mybatis.generator
import org.mybatis.generator.api.IntrospectedColumn
import org.mybatis.generator.api.IntrospectedTable
import org.mybatis.generator.api.dom.java.Field
import org.mybatis.generator.internal.DefaultCommentGenerator
/**
* User: R&M www.rmworking.com/blog
* Date: 16/6/20
* Time: 00:56
* mybatis-generator-increase
* org.mybatis.generator
*/
public class QnloftCommentGenerator extends DefaultCommentGenerator {
@Override
public void addFieldComment(Field field, IntrospectedTable introspectedTable, IntrospectedColumn introspectedColumn) {
// 添加字段注释
StringBuffer sb = new StringBuffer()
field.addJavaDocLine("/**")
field.addJavaDocLine(" *")
if (introspectedColumn.getRemarks() != null)
field.addJavaDocLine(" * " + introspectedColumn.getRemarks())
sb.append(" * 表字段 : ")
sb.append(introspectedTable.getFullyQualifiedTable())
sb.append('.')
sb.append(introspectedColumn.getActualColumnName())
field.addJavaDocLine(sb.toString())
field.addJavaDocLine(" * ")
field.addJavaDocLine(" * ")
// addJavadocTag(field, false)
field.addJavaDocLine(" */")
}
}
主要就是继承DefaultCommentGenerator,重写addFieldComment方法。
在对应的.xml中添加insert标签,换掉中间的insert语句insertintouser(userName,userAge,userAddress)values(#{userName},#{userAge},#{userAddress})欢迎分享,转载请注明来源:内存溢出
评论列表(0条)