這只是一個純碎的mybatis的只針對@Intercepts應用的小列子,沒有和spring做集成。
1.工作目錄
2.數據庫mysql,建立一個數據庫表、實體對象User、UserMapper.java、UserMapper.xml省略。
使用mybatis自動代碼生成工具生成:mybatis-generator-core-1.3.2。(此處略)
3.攔截器MyInterceptor.java
package com.tiantian.mybatis.interceptor; import java.sql.Connection; import java.util.Properties; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Plugin; import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; @Intercepts( { @Signature(method = "query", type = Executor.class, args = { MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class }), @Signature(method = "prepare", type = StatementHandler.class, args = { Connection.class }) }) public class MyInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { Object result = invocation.proceed(); System.out.println("Invocation.proceed()"); return result; } @Override public Object plugin(Object target) { // TODO Auto-generated method stub return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { String prop1 = properties.getProperty("prop1"); String prop2 = properties.getProperty("prop2"); System.out.println(prop1 + "------" + prop2); } }
4.配置文件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> <properties resource="jdbc.properties"></properties> <typeAliases> <package name="com.tiantian.mybatis.model"/> </typeAliases> <plugins> <plugin interceptor="com.tiantian.mybatis.interceptor.MyInterceptor"> <property name="prop1" value="prop1"/> <property name="prop2" value="prop2"/> </plugin> </plugins> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/tiantian/mybatis/mapper/UserMapper.xml"/> </mappers> </configuration>
5.配置文件jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/database_yxl
username=root
password=123456
#定義初始連接數
initialSize=0
#定義最大連接數
maxActive=20
#定義最大空閑
maxIdle=20
#定義最小空閑
minIdle=1
#定義最長等待時間
maxWait=60000
6.測試文件TestMyBatis.java
package com.tiantian.mybatis.service; import org.apache.ibatis.session.SqlSession; import com.tiantian.base.MyBatisUtil; import com.tiantian.mybatis.domain.User; public class TestMyBatis { public static void main(String[] args) { SqlSession session = MyBatisUtil.getSqlSession(); /** * 映射sql的標識字符串, * com.tiantian.mybatis.mapper.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值, * selectByPrimaryKey是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL */ String statement = "com.tiantian.mybatis.mapper.UserMapper.selectByPrimaryKey";//映射sql的標識字符串 //執行查詢返回一個唯一user對象的sql User user = session.selectOne(statement, 1); System.out.println(user); } }
輸出結果:
prop1------prop2
Invocation.proceed()
Invocation.proceed()
[id:1;username:測試;password:sfasgfaf]
7.工具類MyBatisUtil.java
package com.tiantian.base; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { public static SqlSessionFactory getSqlSessionFactory() { String resource = "mybatis-config.xml"; // 使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource); // 構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); return sessionFactory; } public static SqlSession getSqlSession() { return getSqlSessionFactory().openSession(); } public static SqlSession getSqlSession(boolean isAutoCommit) { return getSqlSessionFactory().openSession(isAutoCommit); } }
參考文章
http://www.tuicool.com/articles/7bYjUn
http://www.cnblogs.com/xdp-gacl/p/4262895.html
http://www.mybatis.org/mybatis-3/zh/index.html