欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

整合spring和mybatis

程序员文章站 2022-07-15 10:29:33
...

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

}

相关标签: Spring整合Mybatis