Spring 整合 MyBatis
-
1)在创建项目之前,首先在 MySQL 数据库中创建 mybatis 数据库和 student 表,sql 语句如下所示:
CREATE DATABASES mybatis; USE mybatis; DROP TABLE IF EXISTS `student` CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` char(4) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-
2)创建 Web 应用,并添加相关 JAR 包
在Eclipse中创建一个名为spring-mybatis-work的Web应用
将 Spring 整合 MyBatis 的核心 JAR 包、依赖 JAR 包以及 MySQL 数据库的驱动 JAR 包一起复制到 /WEB-INF/lib 目录下
-
3)创建持久化类
在src目录下创建一个名为 com.zhang.pojo 的包,在该包下创建持久化类 Student,注意在类中声明的属性与数据表 student 的字段一致。
package com.zhang.pojo; public class Student { private int id; private String name; private String sex; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]"; } }
-
4)创建映射文件
在src目录下创建一个名为 com.zhang.mapper 的包,在该包中创建映射文件 StudentMapper.xml 文件 和 StudentMapper 接口
-
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="com.zhang.mapper.StudentMapper"> <!-- 查询所有学生信息 --> <select id="selAllStudent" resultType="com.zhang.pojo.Student"> select * from student </select> <!-- 根据id查询学生所有信息 --> <select id="selStudentById" resultType="com.zhang.pojo.Student" parameterType="int"> select * from student where id=#{id} </select> <!-- 添加学生信息 --> <insert id="insertStudent" parameterType="com.zhang.pojo.Student"> insert into student(id,name,sex,age) values(default,#{name},#{sex},#{age}) </insert> </mapper>
-
StudentMapper 接口如下:
package com.zhang.mapper; import java.util.List; import com.zhang.pojo.Student; public interface StudentMapper { public List<Student> selAllStudent(); public Student selStudentById(int id); public int insertStudent(Student student); }
StudentMapper 接口里的方法名应与 StudentMapper.xml 里的 SQL 语句里的id相对应
-
-
5) 创建Service接口
在src目录下创建一个名为 com.zhang.service 的包,在其包下创建 StudentService 接口,其内容如下:
package com.zhang.service; import java.util.List; import com.zhang.pojo.Student; public interface StudentService { public List<Student> findAllStudent(); public Student findStudentById(int id); public int addStudent(Student student); }
-
6) 创建Service实现类
在src目录下创建一个名为 com.zhang.service.impl 的包,在其包下创建StudentServiceImp,其为 StudentService 的实现类,并且需要在实现类中声明 Mapper 接口对象,并生成 getter/setter 方法,交予Spring管理。具体内容如下:
package com.zhang.service.impl; import java.util.List; import com.zhang.mapper.StudentMapper; import com.zhang.pojo.Student; import com.zhang.service.StudentService; public class StudentServiceImpl implements StudentService{ //声明 Mapper 接口对象,并生成 getter/setter 方法 private StudentMapper studentMapper; public StudentMapper getStudentMapper() { return studentMapper; } public void setStudentMapper(StudentMapper studentMapper) { this.studentMapper = studentMapper; } @Override public List<Student> findAllStudent() { return studentMapper.selAllStudent(); } @Override public Student findStudentById(int id) { return studentMapper.selStudentById(id); } @Override public int addStudent(Student student) { return studentMapper.insertStudent(student); } }
-
7) 创建 Spring 的配置文件
在 src 目录下创建配置文件 applicationContext.xml,在配置文件中配置数据源、MyBatis 工厂以及 Mapper 代理开发等信息。
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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName"> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- MySQL数据库驱动 --> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <!-- 连接数据库的URL --> <property name="url" value="jdbc:mysql://localhost/mybatis?characterEncoding=UTF-8"></property> <!-- 连接数据库的用户名 --> <property name="username" value="root"></property> <!-- 连接数据库的密码 --> <property name="password" value="123456"></property> <!-- 最大连接数 --> <property name="maxTotal" value="30" /> <!-- 最大空闲连接数 --> <property name="maxIdle" value="10" /> <!-- 初始化连接数 --> <property name="initialSize" value="5" /> </bean> <!-- 创建SqlSessionFactory对象 --> <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接信息来源于dataSource --> <property name="dataSource" ref="dataSource"></property> </bean> <!--扫描器 相当于mybatis-config.xml中mappers下的package标签, 扫描com.zhang.mapper包后会给对应接口创建对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 要扫描哪个包 --> <property name="basePackage" value="com.zhang.mapper"/> <!-- 和factory产生关系 --> <property name="sqlSessionFactory" ref="factory"></property> </bean> <!-- 由Spring管理service实现类--> <bean id="studentService" class="com.zhang.service.impl.StudentServiceImpl"> <property name="studentMapper" ref="studentMapper"></property> </bean> </beans>
-
8) 创建测试类
在src目录下创建一个名为 com.zhang.work 的包,在该包下创建 MainApp 测试类,其内容如下:
package com.zhang.work; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.zhang.pojo.Student; import com.zhang.service.impl.StudentServiceImpl; public class MainApp { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); StudentServiceImpl studentService = applicationContext.getBean("studentService", StudentServiceImpl.class); //查询所有信息 List<Student> studentList = studentService.findAllStudent(); for(Student student:studentList) { System.out.println(student); } System.out.println("========================="); //添加信息 Student s1 = new Student(); s1.setId(4); s1.setName("小刚"); s1.setSex("男"); s1.setAge(22); int addStudent = studentService.addStudent(s1); System.out.println("添加了"+addStudent+"条数据"); System.out.println("========================="); studentList = studentService.findAllStudent(); for(Student student:studentList) { System.out.println(student); } } }
-
9) 运行结果