现在的位置: 首页 > 操作系统 > 正文

Spring整合ibatis

2020年02月06日 操作系统 ⁄ 共 7403字 ⁄ 字号 评论关闭

是的,真的是那个不好用的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;

@Componentpublic 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;

@Servicepublic 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); }}

抱歉!评论已关闭.