Spring回顾之三 —— MyBatis的加盟

阅读更多
    本篇将介绍如何引入帮助处理数据的MyBatis框架,对于普通的数据处理而言,MyBatis属于轻量级的数据持久层框架,使用起来简单上手,具体优缺点放下不说,我们先上手。
第一步:数据环境的准备和依赖的引入
    首先我们要准备下数据环境,当然这里不准备强调MySQL数据库怎么使用,前提假定我们已经安装好了数据库,并且也会做简单的操作,并能理解基本的SQL语言。我们需要创建一个数据库,作为对应起名为demo,然后创建一张作为测试的表,起名为d_user,创建代码如下
DROP TABLE IF EXISTS d_user;
CREATE TABLE d_user (
  u_id int(11) NOT NULL,
  u_name varchar(255) DEFAULT NULL,
  u_password varchar(255) DEFAULT NULL,
  u_age int(11) DEFAULT NULL,
  PRIMARY KEY (u_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    然后我们在这张表里边手动填充一下数据,看起来大概就是这个样子
   

    好了,数据环境OK之后,我们要引入相关的jar包资源。
    在之前的项目基础上,我们看看,集成MyBatis都需要添加什么,首先MyBatis是直接基于jdbc的,所以spring-jdbc这个包是少不了的,然后还有必须的dao模块啊、驱动啊等等,修改pom文件,这部分MyBatis所涉及到的依赖代码代码如下
		
		
			org.springframework
			spring-jdbc  
			${spring.version}  
		
		
			org.springframework
			spring-dao
			2.0.8
		
		
			mysql  
			mysql-connector-java  
			6.0.5  
		  
		
			com.alibaba  
			druid  
			1.0.28  
		  
		  
			org.mybatis  
			mybatis  
			3.4.1  
		
		
			org.mybatis  
			mybatis-spring  
			1.3.0  
		
		

    注意我们使用了阿里的druid数据连接池,这个在很多方面都表现了不错的性能优势,还可以配置资源监控等,具体以后再聊,由于考虑到maven会将一些所依赖的jar包自动引入,可能引起疑问,于是也将整个项目所需的重要jar包都在pom文件里显式的写出,顺便也再次熟悉下每个jar包大概的功能,这部分依赖就像下边的样子
		
		
			org.springframework
			spring-core
			${spring.version}
		
		
			org.springframework
			spring-beans
			${spring.version}
		
		
			org.springframework
			spring-aop
			${spring.version}
		
		
			org.springframework
			spring-expression
			${spring.version}
		
		
			org.springframework
			spring-context
			${spring.version}
		
		
		
		
			org.springframework
			spring-web
			${spring.version}
		
		
			org.springframework
			spring-webmvc
			${spring.version}
		
		

    这些MyBatis框架所依赖的jar包处理完之后,我们下一步来看如何整合起来。

第二步:整合装配
    使用MyBatis来帮助数据处理,必然少不了对事务的管理,我们先来配置一下web.xml,让项目以在启动容器时,可以加载Spring容器,这段代码如下
	
	
    
        contextConfigLocation
        classpath*:applicationContext.xml
    
    
    
        org.springframework.web.context.ContextLoaderListener
    

    然后我们去resource文件夹下创建applicationContext.xml文件,同时考虑到想解耦数据管理,顺带也创建一个名为jdbc.properties的文件,来存放数据方面的配置信息,jdbc.properties内容如下
#MySQL驱动
jdbc.driver=com.mysql.jdbc.Driver
#数据连接URL
jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&serverTimezone=UTC&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
#初始连接数
jdbc.initialSize=0
#定义最大连接数
jdbc.maxActive=20
#最大空闲
jdbc.maxIdle=20
#最小空闲
jdbc.minIdle=1
#最长等待时间
jdbc.maxWait=60000

    这里具体的用户名密码、链接地址要看自己的来配,但要注意一点,在使用连接mysql的jdbc驱动最新版时,会遇到数据库和系统时区差异引起的问题,这时候有两种解决方案,一种是降版本,这个我们知道就行了,适可而行,还有一种是在jdbc连接的url后面加上serverTimezone=UTC或GMT即可,如果需要使用gmt+8时区,需要写成GMT%2B8,否则可能会被解析为空。
    接下来看最重要的这块,就是applicationContext.xml文件,先看已经写好的代码



    
    
        
    
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
     
      
      
        
          
    
      
      
          
          
    
      
      
        
     
    



    来看内容,开头这段,说的是将数据相关的配置信息加载进来,接下来的先配置一个数据源,注意我们用的是com.alibaba.druid.pool.DruidDataSource,将使用德鲁伊的数据连接方式;接下来我们配置连接池sqlSessionFactory,同时指定数据源,这里边mapperLocations参数的设置,将使系统自动扫描与接口相匹配的mapper文件;然后配置demoDaoFactory,这个使用mybatis-spring提供了MapperScannerConfigurer类,避免一个个的去定义MapperFactoryBean,会自动去扫描指定路径下的所有接口,然后创建各自接口的动态代理类;最后还要说一下transactionManager的配置,由于Spring允许 MyBatis参与到事务管理中,所以MyBatis没有自己特定的事务管理器,直接利用了Spring中的 DataSourceTransactionManager。
    配置文件写好了,我们要写点代码配合测试下,看看效果怎么样。

第三步:测试代码
    首先,写一个用作数据传递的javaBean,User类,如下
package test.demo.data;

public class User {
	private Integer id;
	private String 	name;
	private String 	password;
	private Integer age;
	
	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;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
}

    然后写接口,我们试着从数据库读一条数据吧,写接口,定义接口方法getUserById,给添加个条件,userId,代码如下
package test.demo.dao;

import test.demo.data.User;

public interface UserDAO {
	public User getUserById(Integer userId);
}

    然后再回想下MyBatis的使用,我们还需要定义一个UserMapper.xml的文件,来添加对数据库操作的SQL内容,代码如下



	


    这里要注意路径和命名规则,必须跟applicationContext.xml这个配置文件里的指定路径对应起来,否则会因为找不到相关文件服务器启动的时候报错。
    本来想写个单元测试直接试试,但这样的话只能展示出MyBatis对数据的处理是否成功,并不能跟上一篇的SpringMVC联系起来,于是直接修改下原来代码,在Controller添加了一个方法,修改后的代码如下
package test.demo.controller;

import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import test.demo.dao.UserDAO;
import test.demo.data.User;

@Controller
public class TestSpringController {

	@Resource  
	private UserDAO userDao;
	
    @RequestMapping(value="/mvcIndex", method=RequestMethod.GET)
    public ModelAndView  mvcIndex() {
        return new ModelAndView("mvcIndex");
    }
    
    @ResponseBody
    @RequestMapping(value="/getHello", method=RequestMethod.GET)
    public String  getHello() {
        return "Hello Controller!";
    }
    
    @ResponseBody
    @RequestMapping(value="/getUser/{userId}", method=RequestMethod.GET)
    public String  getUser(@PathVariable Integer userId) {
    	User user = userDao.getUserById(userId);
        return user.getName() + " , Hello Controller!";
    }
}

    这里要注意@Resource的使用,这时候代码部分差不多已经完事儿了,整个项目结构基本是下图的样子,接下来我们可以尝试着打包部署,然后测试。
Spring回顾之三 —— MyBatis的加盟_第1张图片

    构建的时,我这里遇到一个问题,就是UserMapper.xml文件并不能够听话的被写进war文件,这个很恼火,原因是maven在构建打包的时候,全然不考虑文件路径中.xml结尾的文件,我们得去pom文件的build元素下,添加这样一段代码,如下
	
            
                src/main/java
                
                    **/*.xml
                    **/*.properties
                
                false
            
               
                src/main/resources  
                
                    **/*.xml
                    **/*.properties
                
                false
            
        

    这段代码的意思很显然是解决这个问题的,接着再构建,一切就OK了,然后我们愉快的打包部署,可以测试了。

第四步:运行结果
    服务器启动之后,我们在浏览器输入:http://localhost:8080/demo/getUser/1,回车
   

    然后把1改成2:http://localhost:8080/demo/getUser/2,回车
   

    看到这些内容,好了,我们已经成功的将MyBatis引入系统。




  • Spring回顾之三 —— MyBatis的加盟_第2张图片
  • 大小: 2.8 KB
  • Spring回顾之三 —— MyBatis的加盟_第3张图片
  • 大小: 26.5 KB
  • Spring回顾之三 —— MyBatis的加盟_第4张图片
  • 大小: 4.1 KB
  • Spring回顾之三 —— MyBatis的加盟_第5张图片
  • 大小: 4.2 KB
  • 查看图片附件

你可能感兴趣的:(spring,java,mysql,MyBatis,orm)