是的,真的是那个不好用的ibatis,不是好用的mybatis。

由于工作需要用到ibatis需要自己搭建环境,遇到了不少的坑,做一下记录。

一、环境配置

  • Maven
  • JDK1.6 (非常重要,使用SimpleDataSource作为数据源会在JDK1.8 会触发 not suitable driver found 异常,具体原因另外博文进行解析)
  • MySQL 5.6

二、Maven依赖配置

   1.引入ibatis-sqlmap

        <dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency>

   2.引入spring (spring-orm 是spring集成ibatis的关键所在)

        <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>

  3.引入spring aop以对事务进行管理

        <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.0.5.RELEASE</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.5.4</version>
</dependency>

  完整的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.kwj</groupId>
<artifactId>firstibatis</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.4.726</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.14</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.0.5.RELEASE</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.5.4</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.5.4</version>
</dependency> </dependencies>
</project>

三.Spring 配置

application.xml 文件,注意SqlMapClient以及SqlMapClientTemplate

<?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: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"> <!-- 使用Spring提供的数据库连接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
</bean> <!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/> <!--注入DataSource以对事务进行管理-->
</bean> <!-- 使用Spring提供的SqlMapClient -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml"/> <!-- 指定ibatis的配置文件路径 -->
<property name="dataSource" ref="dataSource"/> <!-- 注入数据源 -->
</bean> <!-- SqlMapClientTemplate 将被注入到需要与数据库进行交互的地方 -->
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<constructor-arg ref="sqlMapClient" />
</bean> <!-- 定义事务管理器 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="delete*" rollback-for="Exception"
propagation="REQUIRED" isolation="READ_COMMITTED" />
<tx:method name="update*" rollback-for="Exception"
propagation="REQUIRED" isolation="READ_COMMITTED"/>
<tx:method name="remove*" rollback-for="Exception" isolation="READ_COMMITTED"/>
<tx:method name="count*" read-only="true"/>
</tx:attributes>
</tx:advice> <aop:config>
<!-- 定义切点,由于该包下皆为接口类,因此对于符合条件的类,Spring将采取JDK动态代理的方式实现AOP功能 -->
<!-- 对于未实现接口的类需要使用CGLib 如果未引入依赖则会抛出异常 -->
<aop:pointcut id="daoMethod" expression="execution(public * service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethod"/>
</aop:config> <!-- 开启包扫描 -->
<context:component-scan base-package="service.impl;dao"/>
</beans>

四.ibatis 配置

SqlMapConfig.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<!-- 指定SqlMap映射文件的路径 -->
<sqlMap resource="mapper/User.xml" />
</sqlMapConfig>

mapper/User.xml 文件 (users表的中就id和name字段,其中id为自增长字段)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="bean.User" type="bean.User" />
<select id="getAllUsers" resultClass="bean.User">
select * from users
</select> <select id="getUserListById" parameterClass="bean.User" resultClass="bean.User">
select * from users
</select> <update id="updateUser" parameterClass="bean.User">
update users set `name` = #name# where id = #id#
</update> <insert id="insertUser" parameterClass="bean.User">
insert users(name) values(#name#)
</insert>
</sqlMap>

五、代码

bean.User

package bean;

public class User {
private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "[id:"+id+",name:"+name+"]";
}
}

UserDaoImpl  (接口就不放了)

package dao.impl;

import bean.User;
import dao.UserDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Component; @Component
public class UserDAOImpl implements UserDAO { @Autowired
private SqlMapClientTemplate sqlMapClientTemplate; public int updateUser(User user){
return sqlMapClientTemplate.update("updateUser",user);
} }

UserServiceImpl (接口自行定义,该类的代码主要对Spring的事务回滚机制进行测试)

package service.impl;
import bean.User;
import dao.UserDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import service.UserService; @Service
public class UserServiceImpl implements UserService { @Autowired
private UserDAO userDAO; public int updateUser(User user){
if(user == null){
return 0;
}
return userDAO.updateUser(user);
} public int updateUser(User user, boolean triggerException) {
if(user == null){
return 0;
}
int result = userDAO.updateUser(user);
if(triggerException){
throw new RuntimeException("触发异常,检查是否回滚");
}
return result;
}
}

Main

import bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService; public class SpringMain { public static void main(String[] args){
ApplicationContext context =
new ClassPathXmlApplicationContext("classpath:application.xml");
UserService userService = (UserService) context.getBean(UserService.class);
User user = new User();
user.setId(1);
String newName = "NewData:"+System.currentTimeMillis();
user.setName(newName);
userService.updateUser(user);
}
}

 

Spring 整合 ibatis的更多相关文章

  1. Spring整合Ibatis

    Spring整合Ibatis javaibatisspring 所需jar清单           ibatis-2.*.jar    *为任意版本,下同,ibatis工作包           sp ...

  2. Spring整合Ibatis之SqlMapClientDaoSupport

    前言 HibernateDaoSupport   SqlMapClientDaoSupport . 其实就作用而言两者是一样的,都是为提供DAO支持,为访问数据库提供支持. 只不过HibernateD ...

  3. Spring2.5整合Ibatis入门级开发实例

      分类: SPRING IBATIS2010-11-22 20:19 1170人阅读 评论(0) 收藏 举报 ibatisspringstringpropertiesclassuser 最近一直在看 ...

  4. spring+struts2+ibatis 框架整合以及解析

    一. spring+struts2+ibatis 框架 搭建教程 参考:http://biancheng.dnbcw.net/linux/394565.html 二.分层 1.dao: 数据访问层(增 ...

  5. spring+springmvc+ibatis整合注解方式实例【转】

    源自-----> http://shaohan126448.iteye.com/blog/2033563 (1)web.xml文件(Tomcat使用) 服务器根据配置内容初始化spring框架, ...

  6. spring+springmvc+ibatis整合注解方式实例

    需求说明 实现用户通过数据库验证登录需求.採用 Myeclipse+Tomcat 6.0+Mysql 5.0+JDK 1.6 2.数据库表 开发所用是Mysql数据库,仅仅建立单张用户表T_USER, ...

  7. Intellij IDEA +MAVEN+Jetty实现Spring整合Mybatis

    1 pom.xml(这里出现transaction错误,是版本的问题) <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  8. Spring整合MyBatis

    前言:MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用 ...

  9. Spring学习总结(六)——Spring整合MyBatis完整示例

    为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...

随机推荐

  1. 30442数据操纵语言DML

    5.5 SQL的数据操纵功能 5.5.1 数据插入 使用CREATE语句创建的数据表还只是一个“空壳”,表中没有任何数据.利用SQL语言提供的INSERT语句可以完成向数据表插入数据的任务. INSE ...

  2. selenium工作原理详解

    selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...

  3. 移动端使用rem.js,解决rem.js 行内元素占位问题

    父级元素: letter-spacing: -0.5em;font-size: 0; 子级元素: letter-spacing: normal; display: inline-block; vert ...

  4. 使用burpsuite进行重放攻击

    原创博客,转载请注出处! 我的公众号,正在建设中,欢迎关注: 1.安装好burpsuite后打开程序,切换至proxy->intercipt,因为是重放攻击不用拦截数据包所以关闭intercep ...

  5. spring 5.x 系列第4篇 —— spring AOP (代码配置方式)

    文章目录 一.说明 1.1 项目结构说明 1.2 依赖说明 二.spring aop 2.1 创建待切入接口及其实现类 2.2 创建自定义切面类 2.3 配置切面 2.4 测试切面 2.5 切面执行顺 ...

  6. js避坑历险记

    代码改变世界,世界改变码农,码农改变代码! 我就是我,我就是一个码农的武林. 前方JS巨坑出没,请注意集中力! 巨坑1:js精度问题 前段时间去一家物流公司面试,做了一个js题,印象尤为深刻: var ...

  7. 数据库之MySQL的基本使用

    数据库简介 数据库 数据库就是一种特殊的文件,其中存储着需要的数据:关系型数据库核心元素: 数据行(记录) 数据列(字段) 数据表(数据行的集合) 数据库(数据表的集合) Ubuntu进入数据库: 1 ...

  8. k8s对象类资源格式

    k8s api仅接受及响应json格式的数据,同时,为了便于使用,它也允许用户提供yaml格式的post对象,但apiserver需要事先自行将其转换为json格式后方能提交.每个资源通常仅接受并返回 ...

  9. 一套简单的web即时通讯——第一版

    前言 我们之前已经实现了 WebSocket+Java 私聊.群聊实例,后面我们模仿layer弹窗,封装了一个自己的web弹窗 自定义web弹窗/层:简易风格的msg与可拖放的dialog,生成博客园 ...

  10. 下一代工业通信—TSN(时间敏感网络),工业物联网的助推器

    随着工业物联网(IIoT)的兴起和工业4.0的提出,越来越多的设计师.工程师和最终用户关注TSN(Time-Sensitive Networking,时间敏感网络).TSN为以太网提供确定性性能,本质 ...