Spring整合MyBatis

本文详细介绍了如何使用Maven、Spring和MyBatis完成一个具备基本CRUD功能的项目,包括数据库操作、服务层设计和单元测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、新建Maven工程

​二、创建数据库与表

三、添加依赖包

四、新建POJO实体层

五、新建MyBatis SQL映射层,配置Mapper文件

六、完成Spring整合MyBatis配置

(1) mybatis的配置文件:在classpath下创建SqlMapConfig.xml

(2) spring的配置文件:applicationContext.xml 

(3) 数据源 c3po 配置db.properties

(4) 数据库连接池:在applicationContext配置数据源 

(5) 配置SqlSessionFactory(applicationContext.xml) 

(6) 配置mapper文件的扫描器(applicationContext.xml)

七、创建服务层

八、JUnit测试服务类小结:


        本文详细的通过Maven及Spring整合MyBatis的等技术完成一个简单删除、查询、编辑、新增功能,通过spring管理SqlSessionFactory、mapper接口 。 完整工程结构如下:

一、新建Maven工程

第一步:打开MyEclipse->File->New->Other或者按Ctrl+N的热键进入新建选项,

第二步:找到Maven文件夹或者在Wizards输入Maven会出现,选中Maven Project 点Next。

第三步:创建一个新的Maven project有3个选项,分别是

Create a simple project (skip archetype selection) :创建一个简单的项目(跳过对原型模板的选择)[手动选中]

User default Workspace location:使用本地默认的工作空间

--Loaction:本地工作空间目录

Add project(s) to working set :增加项目到工作集

第四步:填写Artifact

-------Group Id:组Id,针对一个项目的普遍唯一识别符。相当于我们日常使用的包名,例如:org.lxh

-------Artifact Id:要新建的项目的名字

-------Version:版本号,默认0.0.1-SNAPSHOT

Packing:要将该项目生成什么类型,模块化开发父项目选着为pom类型,web项目需要部署到应用服务器中运行就选着war,默认是jar

第五步:转换为spring(也就是自动添加spring相关配置文件,不用自己手动新建,比较方便)

第六步:选择对应的spring版本以及java版本,targer runtime选择自己的jdk,如果是web项目,就选择自己搭建的tomcat

第七步:选择class文件生成目录,默认下一步

第八步:选择spring配置文件生成位置:统一更改在生成在resources下

最后生成的项目(如图:生成后的maven项目)分别有以下几个目录

src/main/java:主要编码的目录

src/main/resource:资源目录.如:spring的xml.Java配置properties

src/test/java:测试的代码

src/test/resource:测试的资源.如:spring的xml.Java配置properties

JRE System Library:Java运行环境,默认JavaSE1.5,需要修改,如果要统一更改的话请更改maven配置文件setting.xml中的文件


二、创建数据库与表

使用本地mysql数据库test,新建表s_user

DROP TABLE IF EXISTS `s_user`;
CREATE TABLE `s_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(30) DEFAULT NULL,
  `user_birthday` date DEFAULT NULL,
  `user_salary` double DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of s_user
-- ----------------------------
INSERT INTO `s_user` VALUES ('1', '姓名', '2019-03-29', '21');


三、添加依赖包


整合spring和mybatis需要的jar包: 

(1) mybatis的jar包 
(2) spring的jar包 
(3) spring和mybatis的整合包 
(4) mysql的数据库驱动 
(5) 数据库连接池

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.3.0.RELEASE</spring.version>
    </properties>
  
	<dependencies>
	       	<!-- 1.mybatis ORM框架 -->
		        <dependency>
		            <groupId>org.mybatis</groupId>
		            <artifactId>mybatis</artifactId>
		            <version>3.4.1</version>
	        	</dependency>	
        
			<!--2.Spring框架核心库 -->
		        <dependency>
		            <groupId>org.springframework</groupId>
		            <artifactId>spring-context</artifactId>
		            <version>${spring.version}</version>
		        </dependency>
		        <!-- aspectJ AOP 织入器 -->
		        <dependency>
		            <groupId>org.aspectj</groupId>
		            <artifactId>aspectjweaver</artifactId>
		            <version>1.8.9</version>
		        </dependency>
		        <!-- Spring Web -->
		        <dependency>
		            <groupId>org.springframework</groupId>
		            <artifactId>spring-web</artifactId>
		            <version>${spring.version}</version>
		        </dependency>
		        <!--Spring java数据库访问包,在本例中主要用于提供数据源 -->
		        <dependency>
		            <groupId>org.springframework</groupId>
		            <artifactId>spring-jdbc</artifactId>
		            <version>${spring.version}</version>
		        </dependency>
		        <!--Spring事物管理  -->
		        <dependency>
		            <groupId>org.springframework</groupId>
		            <artifactId>spring-tx</artifactId>
		            <version>${spring.version}</version>
		       	</dependency>
       		 <!--3.mybatis-spring适配器 -->
		        <dependency>
		            <groupId>org.mybatis</groupId>
		            <artifactId>mybatis-spring</artifactId>
		            <version>1.3.0</version>
		        </dependency>
			<!--3 数据库 -->
				<dependency>
				    <groupId>mysql</groupId>
				    <artifactId>mysql-connector-java</artifactId>
				    <version>6.0.6</version>
				</dependency>
			<!-- 4 c3p0 数据库连接池 -->
				<dependency>
				    <groupId>com.mchange</groupId>
				    <artifactId>c3p0</artifactId>
				    <version>0.9.5.2</version>
				</dependency>
				
		        <!--log4j日志包 -->
		        <dependency>
		            <groupId>org.apache.logging.log4j</groupId>
		            <artifactId>log4j-core</artifactId>
		            <version>2.6.1</version>
		        </dependency>
		
		        <!-- JUnit单元测试工具 -->
		        <dependency>
		            <groupId>junit</groupId>
		            <artifactId>junit</artifactId>
		            <version>4.10</version>
		        </dependency>
	</dependencies>

四、新建POJO实体层

package com.sm.po;

import java.util.Date;

public class User {

    private int id;

    private String name;

    private Date birthday;

    private double salary;

     //set,get 方法
}


五、新建MyBatis SQL映射层,配置Mapper文件

package com.sm.mapper;

import java.util.List;

import com.sm.po.User;

public interface UserMapper {
	//	保存用户
	public void save(User user);
	//	更新
	public void update(User user);
	//	根据id查询删除单个user信息
	public void delete(int id);
	//	根据id查询单个user信息
	public User findById(int id);
	//	查询全部
	public List<User> findAll();
}

为MyBatis接口创建的映射文件UserMapper.xml(命名尽量都遵循一个规则,便于扫描,这里约定以实体名+Mapper)如下:

<?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="com.sm.mapper.UserMapper">
	<resultMap type="User" id="userResult">
	<result column="user_id" property="id"/>
	<result column="user_name" property="name"/>
	<result column="user_birthday" property="birthday"/>
	<result column="user_salary" property="salary"/>
</resultMap>

	<!-- 取得插入数据后的 id -->
	<insert id="save" keyColumn="user_id" keyProperty="id" useGeneratedKeys="true">
	insert into s_user(user_name,user_birthday,user_salary)
	values(#{name},#{birthday},#{salary})
	</insert>
	
	<update id="update">
	update s_user
	set user_name = #{name},
	user_birthday = #{birthday},
	user_salary = #{salary}
	where user_id = #{id}
	</update>
	
	<delete id="delete">
	delete from s_user
	where user_id = #{id}
	</delete>
	
	<select id="findById" parameterType="int" resultMap="userResult">
	select *
	from s_user
	where user_id = #{id}
	</select>
	
	<select id="findAll" resultMap="userResult">
	select *from s_user
	</select>
	
</mapper>


六、完成Spring整合MyBatis配置



(1) mybatis的配置文件:在classpath下创建SqlMapConfig.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>

		<!-- 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)--> 
<typeAliases>
	<package name="com.sm.po"/>
</typeAliases>
		
		<!-- 批量加载mapper
		指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
		遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
		上边规范的前提是:使用的是mapper代理方法
		
		和spring整合后,使用mapper扫描器,这里不需要配置了
		 -->
		<!-- <package name="com.sm.mapper"/> -->
		
    <!-- 加载 映射文件 -->
<!-- 	<mappers>
		<mapper resource="mapper/UserMapper.xml" />
	</mappers> -->
	
</configuration>


(2) spring的配置文件:applicationContext.xml 

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
				        http://www.springframework.org/schema/beans/spring-beans.xsd
				        http://www.springframework.org/schema/context
				        http://www.springframework.org/schema/context/spring-context.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">
</beans>


(3) 数据源 c3po 配置db.properties

有问题参考:https://www.cnblogs.com/panchanggui/p/10401763.html

现在按照最新官方提示支持将com.mysql.jdbc.Driver  改为  com.mysql.cj.jdbc.Driver

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456

(4) 数据库连接池:在applicationContext配置数据源 

 						
 	<!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
	<!--2 配置C3P0数据源 -->
    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <!--驱动类名 -->
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <!-- url -->
        <property name="jdbcUrl" value="${jdbc.url}" />
        <!-- 用户名 -->
        <property name="user" value="${jdbc.username}" />
        <!-- 密码 -->
        <property name="password" value="${jdbc.password}" />
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数  -->
        <property name="acquireIncrement" value="5"></property>
        <!-- 初始连接池大小 -->
        <property name="initialPoolSize" value="10"></property>
        <!-- 连接池中连接最小个数 -->
        <property name="minPoolSize" value="5"></property>
        <!-- 连接池中连接最大个数 -->
        <property name="maxPoolSize" value="20"></property>
    </bean>


(5) 配置SqlSessionFactory(applicationContext.xml) 

    <!-- mapper配置 -->
    <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="datasource" />
         <!-- 加载mybatis的mapper接口映射文件 -->
        <property name="mapperLocations" value="classpath*:com/sm/mapper/*.xml" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml" />
    </bean>

注意:在定义sqlSessionFactory时指定数据源dataSource和mybatis的配置文件。


(6) 配置mapper文件的扫描器(applicationContext.xml)

    <!-- mapper批量扫描:从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 
			        遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中,不用在sqlMapConfig.xml中进行配置,
			        自动扫描出来的mapper的bean的id为mapper类名(首字母小写)-->
    <bean  id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    	<!-- value值为mapper接口包地址 ,扫描包路径,中间可以用逗号或分号分隔定义多个包-->
    	<property name="basePackage" value="com.sm.mapper"></property>
    </bean>

七、创建服务层

标准的mvc架构,service是接口加实现类,这里只是简单整合,就直接用类

package com.sm.service;

import java.util.List;
import com.sm.po.User;
public interface UserService {
	
	
	    
	    public List<User> findAll() ;
	    
	    public User findById(int id);
	    
	    public void save(User user) ;

	    public void delete(int id);
	    

	    public void update(User user) ;

}

 实现类

package com.sm.service.imp;

import java.util.List;

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

import com.sm.mapper.UserMapper;
import com.sm.po.User;
import com.sm.service.UserService;
@Service(value="userService")
public class impUserService implements UserService {
	
	@Autowired
	UserMapper userMapper;
	
	@Override
	public List<User> findAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public User findById(int id) {
        System.out.println("id" + id);
        if(("").equals(id)){
            System.out.println("id不能為空");
            return null;
        }
        User user = userMapper.findById(id);
        return user;
	}

	@Override
	public void save(User user) {
		

	}

	@Override
	public void delete(int id) {
		// TODO Auto-generated method stub

	}

	@Override
	public void update(User user) {
		// TODO Auto-generated method stub

	}

}

八、JUnit测试服务类

package com.sm.service;

import static org.junit.Assert.fail;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.sm.po.User;

public class UserServiceTest {

	private ApplicationContext applicationContext;


    @Before
    //在setUp中得到spring的容器
    public void setUp() throws Exception {
        applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }
	@Test
	public void testFindById() {
		UserService UserService = (UserService)applicationContext.getBean("userService");
		User user = UserService.findById(1);
		System.out.println(user);
	}

	@Test
	public void testSave() {
		fail("Not yet implemented");
	}

	@Test
	public void testDelete() {
		fail("Not yet implemented");
	}

	@Test
	public void testUpdate() {
		fail("Not yet implemented");
	}

}

运行结果:

小结:


mybatis整合之后,mybatis把一些事交给spring来完成。

1.mybatis和spring整合之后mapper代理开发把原来在mybatis配置文件SqlMapConfig.xml中完成的连接数据源、事务控制都交给spring来完成。

2.同时spring还配置了SqlSessionFactory的bean、

3.原来在mybatis配置文件批量扫描的mapper包也交给spring来扫描
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值