步骤:
1.导入jar包
mybatis-spring.jar、spring-tx.jar、spring-aop.jar
spring-core.jar、spring-jdbc.jar、spring-context.jar
spring-beans.jar、commons-logging.jar、spring-context-support.jar
spring-expression.jar、commons-dbcp.jar、commons-pool.jar
log4j.jar mysql-connector-java-5.1.40-bin.jar mybatis.jar
2.创建类-表
3.MyBatis配置文件
4.通过mapper.xml将类、表建立映射关系
5.spring配置文件applicationContext.xml
通过Spring管理MyBatis的SqlSessionFactory,产生SqlSessionFactory所需要的数据库信息
6.使用Spring-MyBatis整合产物开发程序
目标:通过Spring产生 MyBatis最终操作需要的动态mapper对象
Spring产生动态mapper对象的三种方法:
a.Dao层实现类(继承SqlSessionDaoSupport类)
b.省略a中的实现类
c.批量产生
代码
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!-- 加载dp.properties文件 -->
<bean id="config" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:dp.properties</value>
</array>
</property>
</bean>
<!-- 配置数据库信息(替代mybatis中的conf.xml) -->
<bean id="dataSource2" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 在springIOC容器中创建MyBatis的核心类sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource2"/>
<!-- 加载mapper.xml路径 -->
<property name="mapperLocations" value="cn/test/mapper/*.xml"/>
</bean>
<!-- 开启注解扫描器 -->
<!-- <context:component-scan base-package="cn.test.daoImpl, cn.test.serviceImpl"/>-->
<!--
批量产生多个mapper
约定:批量产生的Mapper值在SpingIOC中的id值默认是接口名
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 指定批量产生哪个包中的mapper对象 -->
<property name="basePackage" value="cn.test.mapper"/>
</bean>
<bean id="studentService" class="cn.test.serviceImpl.StudentServiceImpl">
<property name="studentMapper" ref="studentMapper"/>
</bean>
</beans>
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisspring
username=root
password=password
log4j.properties
log4j.rootLogger=WARN,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout# Configure logging for testing: optionally with log file
Student.java
package cn.test.entity;
public class Student {
private int sid;
private String sname;
private int sage;
public Student(){}
public Student(int sid, String sname, int sage) {
this.sid = sid;
this.sname = sname;
this.sage = sage;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getSage() {
return sage;
}
public void setSage(int sage) {
this.sage = sage;
}
}
StudentMapper
public interface StudentMapper {
public void addStudent(Student student);
}
StudentMapper.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.test.mapper.StudentMapper">
<select id="addStudent" parameterType="cn.test.entity.Student">
insert into student values (#{sid}, #{sname}, #{sage})
</select>
</mapper>
StudentService
public interface StudentService {
public void addStudent(Student student);
}
StudentServiceImpl.java
public class StudentServiceImpl implements StudentService {
private StudentMapper studentMapper;
public void setStudentMapper(StudentMapper studentMapper) {
this.studentMapper = studentMapper;
}
@Override
public void addStudent(Student student) {
studentMapper.addStudent(student);
}
}
MyText.java
public class MyTest {
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentService studentService = (StudentService) context.getBean("studentService");
Student stu = new Student(4, "ww", 21);
studentService.addStudent(stu);
}
}