java之mybatis整合spring

java

这篇讲解spring+mybatis的整合。

目录结构:

一. 整合spring的第一种方法

1. 新建 java 项目 : spring_mybatis

2.导入jar 包-----spring和mybatis的整合包,然后build

aopalliance.jar

aspectjweaver.jar

commons-logging.jar

mybatis-3.2.7.jar

mybatis-spring-1.2.3.jar

mysql-connector-java-5.1.20-bin.jar

spring-aop-4.1.6.RELEASE.jar

spring-aspects-4.1.6.RELEASE.jar

spring-beans-4.1.6.RELEASE.jar

spring-context-4.1.6.RELEASE.jar

spring-core-4.1.6.RELEASE.jar

spring-expression-4.1.6.RELEASE.jar

spring-jdbc-4.1.6.RELEASE.jar

spring-orm-4.1.6.RELEASE.jar

spring-tx-4.1.6.RELEASE.jar

spring-web-4.1.6.RELEASE.jar

spring-webmvc-4.1.6.RELEASE.jar

3.编写 vo 类

在cn.vincent.vo下 User.java

 1 package cn.vincent.vo;

2

3 import java.io.Serializable;

4

5 public class User implements Serializable {

6

7 private int id;

8 private String name;

9 private int age;

10 private int rileId;

11 public int getId() {

12 return id;

13 }

14 public void setId(int id) {

15 this.id = id;

16 }

17 public String getName() {

18 return name;

19 }

20 public void setName(String name) {

21 this.name = name;

22 }

23 public int getAge() {

24 return age;

25 }

26 public void setAge(int age) {

27 this.age = age;

28 }

29 public int getRileId() {

30 return rileId;

31 }

32 public void setRileId(int rileId) {

33 this.rileId = rileId;

34 }

35 @Override

36 public String toString() {

37 return "User [> age

38 + ", rileId=" + rileId + "]";

39 }

40

41

42 }

View Code

4.编写 映射文件

在cn.vincent.mapper下 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.vincent.mapper.UserMapper">

<select >

select * from t_user

</select>

</mapper>

5.编写 dao

在cn.vincent.mapper下 UserMapper.java

package cn.vincent.mapper;

import java.util.List;

import cn.vincent.vo.User;

public interface UserMapper {

public List<User> findAll();

}

在cn.vincent.mapper.impl下 UserMapperImpl.java

package cn.vincent.mapper.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import cn.vincent.mapper.UserMapper;

import cn.vincent.vo.User;

@Repository("userMapper")

public class UserMapperImpl implements UserMapper {

@Autowired

private SqlSession sqlSession;

public void setSqlSession(SqlSession sqlSession){

this.sqlSession=sqlSession;

}

@Override

public List<User> findAll() {

return sqlSession.selectList("cn.vincent.mapper.UserMapper.findAll");

}

}

6.编写 service

在 cn.vincent.service下 UserService.java

package cn.vincent.service;

import java.util.List;

import cn.vincent.vo.User;

public interface UserService {

public List<User> findAll();

}

在 cn.vincent.service下 UserServiceImpl.java

package cn.vincent.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import cn.vincent.mapper.UserMapper;

import cn.vincent.service.UserService;

import cn.vincent.vo.User;

@Service("userService")

public class UserServiceImpl implements UserService {

@Autowired

private UserMapper userMapper;

public void setUserMapper(UserMapper userMapper) {

this.userMapper = userMapper;

}

@Override

public List<User> findAll() {

return userMapper.findAll();

}

}

7. 编写mybatis的配置文件

mybatis.cfg.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>

<typeAliases>

<package name="cn.vincent.vo"/>

</typeAliases>

<mappers>

<mapper resource="cn/vincent/mapper/UserMapper.xml"/>

</mappers>

</configuration>

8. 编写spring的配置文件

beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

<!--读取外部配置-->

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<property name="location" value="classpath:jdbc.properties"></property>

</bean>

<bean >

<property name="driverClassName" value="${driver}"/>

<property name="url" value="${url}"/>

<property name="username" value="${username}"/>

<property name="password" value="${password}"/>

</bean>

<!-- 根据mybatis的配置文件 来创建sqlSessionFactory -->

<bean >

<property name="dataSource" ref="dataSource"></property>

<property name="configLocation" value="classpath:mybatis.cfg.xml"/>

</bean>

<bean >

<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>

</bean>

<!-- 事务管理器 -->

<bean >

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 事务通知 -->

<tx:advice >

<tx:attributes>

<!-- 表示以save开头的方法都需要事务

propagation 表示事务的传播特性

REQUIRED 查看当前是否有事务,如果有,使用当前事务,如果没有开启新事务

-->

<tx:method name="save*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="find*" read-only="true"/>

<tx:method name="*" propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

<aop:config>

<!--expression 指明事务在哪里起作用

第一个* 表示所有返回值

第二个* 表示所有类

第三个* 表示类中的所有方法

.. 表示所有参数

-->

<aop:pointcut expression="execution(* cn.vincent.service.impl.*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>

</aop:config>

<context:component-scan base-package="cn.vincent"></context:component-scan>

</beans>

jdbc.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/test

username=root

password=root

9.添加测试

在 test下的 cn.vincent.service下的 UserServiceTest.java

package cn.vincent.service;

import java.util.List;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.vincent.vo.User;

public class UserServiceTest {

@Test

public void testFindAll(){

ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");

UserService userService=ac.getBean(UserService.class);

List<User> list=userService.findAll();

for(User u:list){

System.out.println(u);

}

}

}

10. 运行测试

效果如下:

二. 第二种是去掉mybatis配置文件的配置方法

在beans.xml中修改 SqlSessionFactory的配置

    <!-- 根据mybatis的配置文件 来创建sqlSessionFactory -->

<bean >

<property name="dataSource" ref="dataSource"></property>

<property name="typeAliasesPackage" value="cn.vincent.vo"></property>

<property name="mapperLocations">

<list>

<value>classpath:cn/vincent/mapper/UserMapper.xml</value>

</list>

</property>

</bean>

三. 可以通过代理的方式来生成实现类的配置

beans.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

<bean >

<property name="driverClassName" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://localhost:3306/test"/>

<property name="username" value="root"/>

<property name="password" value="1111"/>

</bean>

<!-- 根据mybatis的配置文件 来创建sqlSessionFactory -->

<bean >

<property name="dataSource" ref="dataSource"></property>

<property name="typeAliasesPackage" value="cn.sxt.vo"></property>

<property name="mapperLocations">

<list>

<value>classpath:cn/sxt/mapper/UserMapper.xml</value>

</list>

</property>

</bean>

<!-- mapper的接口和mapper的映射文件在同一个包下,并且

mapper的接口名称和mapper的映射文件名相同

mapper接口中的方法名称和mapper映射文件中的id的名称一致

mapper映射文件中的namespace和mapper文件所在的包名+mapper文件名

该类将扫描指定的包 并且通过代理生成mapper接口的实现类 生成的类的id名称为

mapper接口首字母小写

-->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>

<property name="basePackage" value="cn.vincent.mapper"></property>

</bean>

<!-- 事务管理器 -->

<bean >

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 事务通知 -->

<tx:advice >

<tx:attributes>

<!-- 表示以save开头的方法都需要事务

propagation 表示事务的传播特性

REQUIRED 查看当前是否有事务,如果有,使用当前事务,如果没有开启新事务

-->

<tx:method name="save*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="find*" read-only="true"/>

<tx:method name="*" propagation="REQUIRED"/>

</tx:attributes>

</tx:advice>

<aop:config>

<!--expression 指明事务在哪里起作用

第一个* 表示所有返回值

第二个* 表示所有类

第三个* 表示类中的所有方法

.. 表示所有参数

-->

<aop:pointcut expression="execution(* cn.vincent.service.impl.*.*(..))" />

<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>

</aop:config>

<context:component-scan base-package="cn.vincent"></context:component-scan>

</beans>

github地址:https://github.com/Vincent-yuan/spring_mybatis

以上是 java之mybatis整合spring 的全部内容, 来源链接: utcz.com/z/389807.html

回到顶部