1. 程式人生 > >整合spring和mybatis

整合spring和mybatis

spring-mybatis-druid:整合spring和mybatis,使用阿里公司的druid資料庫的連線池&以下是apache基金會的dbcp連線池

<bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <!-- 配置4個屬性,訪問資料庫 -->
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>

spring整合mybatis的主要思路: 把mybatis的物件交給spring統一建立和管理。
哪些物件交給spring:
1.資料來源DataSource,表示資料庫的連線,訪問資料庫的。
2.SqlSessionFactory, 使用它建立SqlSession物件
3.Dao物件。 由spring使用mybatis的動態代理技術,建立Dao介面的實現類物件。

步驟:
1.新建mysql的資料庫springdb, 新建表student(id,name,age)
2.新建java project
3.匯入jar:
1)spring的核心:spring-core.jar,spring-beans.jar,spring-context.jar,spring-expression.jar
2)spring的aop:spring-aop.jar(支援環繞通知,使用事務處理)
3)spring訪問資料庫的相關jar:spring-jdbc.jar,spring-tx.jar
spring整合mybatis事務是自動提交的方式。
4)mybatis的核心:mybatis-3.4.5.jar
5)mybatis和spring的整合包: mybatis-spring-1.3.1.jar ,
整合包的作用:能夠在spring框架中建立mybatis的物件。 整合包來自mybatis的官網。
6)資料庫的驅動:mysql的驅動
7)資料庫的連線池: druid.1.1.9.jar
8)其他:日誌, 單元測試。
4.定義實體類:Student
5.定義Dao介面和sql對映檔案
6.定義MyBatis的主配置檔案
7.定義Service介面和實現類,在實現類中應該有一個Dao的屬性
8.定義spring的配置檔案:重點
1)宣告資料來源DataSource, 訪問資料庫
2)宣告SqlSessionFactoryBean, 建立SqlSessionFactory物件
3)宣告MyBatis的掃描器物件,建立Dao介面的實現類物件。
4)宣告Service物件,把Dao物件注入給Service的屬性
9.定義測試類, 訪問資料庫

/*applicationContext.xml/

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

<!-- 指定屬性配置檔案的位置 
     location:指定屬性配置檔案的位置,使用classpath:表示類路徑
-->
<context:property-placeholder location="classpath:jdbc.properties"/>
    
<!-- 宣告資料來源DataSource, 使用druid -->
<bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
   init-method="init" destroy-method="close" >
    <!-- 
                  使用屬性配置檔案中的資料, 語法格式: ${key}
     -->
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}" />
	<property name="password" value="${jdbc.password}" />
</bean>

<!-- 宣告SqlSessionFactoryBean ,建立SqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 指定資料來源DataSource -->
	<property name="dataSource" ref="myDataSource" />
	<!-- 指定mybatis的主配置檔案 
	     Resource型別,賦值使用value ,spring會讀取檔案,轉為Resource型別
	     classpath:指定到類路徑中找配置檔案  
	-->
	<property name="configLocation" value="classpath:mybatis.xml" />
</bean>

<!-- 宣告mybatis的掃描器物件,建立Dao介面的實現類物件 -->
<!-- 
    1.通過屬性sqlSessionFactoryBeanName,能獲取到SqlSessionFactory
    2.通過SqlSessionFactory.openSession(),得到SqlSession物件
    for(介面:com.bjpowernode.dao所有介面){
                     介面的實現類物件  = 使用sqlSession.getMapper(介面.class);
                     把建立好的物件放入到spring的容器中,springMap.put(介面的首字母小寫,介面的實現類物件)
    }

 -->
<bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 指定SqlSessionFactory物件 -->
	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	<!-- 指定Dao介面的包名 -->
	<property name="basePackage" value="com.bjpowernode.dao" />
</bean>

<!-- 宣告Service物件 -->
<bean id="studentService" class="com.bjpowernode.service.StudentServiceImpl">
	<property name="stuDao" ref="studentDao"/>
</bean>

/* jdbc.properties**/
jdbc.url=jdbc:mysql://localhost:3306/springdb
jdbc.username=root
jdbc.password=root

/** mybatis.xml**/

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 配置別名 -->
<typeAliases>
	<package name="com.bjpowernode.beans"/>
</typeAliases>

<!-- 配置sql對映檔案 -->
<mappers>
	<package name="com.bjpowernode.dao"/>
</mappers>

/*beans/
package com.bjpowernode.beans;

public class Student {

//定義屬性, 屬性名和列名一樣
private Integer id;
private String name;
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 Integer getAge() {
	return age;
}
public void setAge(Integer age) {
	this.age = age;
}
@Override
public String toString() {
	return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}

}
/*StudentDao/
package com.bjpowernode.dao;

import java.util.List;

import com.bjpowernode.beans.Student;

public interface StudentDao {

int insertStudent(Student student);
List<Student> selectStudents();

}

/StudentDao.xml*/

<?xml version="1.0" encoding="UTF-8" ?> insert into student(name,age) values(#{name},#{age})
<select id="selectStudents" resultType="Student">
	select id,name,age from student order by id desc
</select>

/StudentService/
package com.bjpowernode.service;

import java.util.List;

import com.bjpowernode.beans.Student;

public interface StudentService {

int addStudent(Student student);
List<Student> queryStudents();

}
/StudentServiceImpl****/
package com.bjpowernode.service;

import java.util.List;

import com.bjpowernode.beans.Student;
import com.bjpowernode.dao.StudentDao;

public class StudentServiceImpl implements StudentService {

//引用型別
private StudentDao stuDao;

//IoC的設值注入
public void setStuDao(StudentDao stuDao) {
	this.stuDao = stuDao;
}

@Override
public int addStudent(Student student) {
	int rows  = stuDao.insertStudent(student);
	return rows;
}

@Override
public List<Student> queryStudents() {
	List<Student> students = stuDao.selectStudents();
	return students;
}

}
/*Test/
package com.bjpowernode.test;

import java.util.List;

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

import com.bjpowernode.beans.Student;
import com.bjpowernode.service.StudentService;

public class MyTest {

private StudentService service;
//定義junit的初始化方法
@Before
public void myinit(){
	String config="applicationContext.xml";
	ApplicationContext ctx  = new ClassPathXmlApplicationContext(config);
	service  = (StudentService) ctx.getBean("studentService");
	
}

//測試新增功能
@Test
public void testAddStudent(){
	
	Student student = new Student();
	student.setAge(20);
	student.setName("周麗");
	int rows  = service.addStudent(student);
	System.out.println("新增的結果:"+rows);
}

@Test
public void testQueryStudents(){
	List<Student> students = service.queryStudents();
	for(Student stu : students){
		System.out.println(stu);
	}
}

@Test
public void testGetObjects(){
	String config="applicationContext.xml";
	ApplicationContext ctx  = new ClassPathXmlApplicationContext(config);
	String names [] = ctx.getBeanDefinitionNames();
	for(String name: names){
		System.out.println(name);
	}
}

}