MyBatis作为一种轻量级的ORM框架,使用起来比Hibernate更加的简便,通过使用"原生的"SQL语句操作数据,所以个人认为MyBatis更加需要有SQL的基础,那么MyBatis怎么集成Spring呢?
①,加入所需要的Jar包
②.创建实体类和数据表
package com.imooc.SpringAndMybatis.Entity;
import java.util.Date;
/*实体类*/
public class User {
private int id;
private String name;
private Date birthday;
private double salary;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", birthday=" + birthday + ", salary=" + salary + "]";
}
public User(int id, String name, Date birthday, double salary) {
super();
this.id = id;
this.name = name;
this.birthday = birthday;
this.salary = salary;
}
public User() {
super();
}
}
mysql> create table user(
-> user_id int primary key auto_increment,
-> user_name varchar(30),
-> user_birthday Date,
-> user_salary Double
-> );
Query OK, 0 rows affected (0.45 sec)
mysql> show tables;
+----------------------------+
| Tables_in_springandmybatis |
+----------------------------+
| user |
+----------------------------+
1 row in set (0.00 sec)
mysql> desc user;
+---------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| user_name | varchar(30) | YES | | NULL | |
| user_birthday | date | YES | | NULL | |
| user_salary | double | YES | | NULL | |
+---------------+-------------+------+-----+---------+----------------+
③.创建接口和实体类的SQL映射文件
|--建议:接口的名称和SQL映射文件的名称相同,.并且放在同一个包中
④.接口中方法的定义,以及在SQL映射文件中对方法的书写!
package com.imooc.SpringAndMybatis.Mapper;
import com.imooc.SpringAndMybatis.Entity.User;
public interface UserMapper
{
void save(User user);
}
<?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.imooc.SpringAndMybatis.Mapper.UserMapper">
<insert id="save" parameterType="User">
insert into user (user_name,user_birthday,user_salary) Values(#{name},#{birthday},#{salary})
</insert>
</mapper>
注意点:1). SQL映射文件的nameSpace的值必须是接口的全类名!
2). SQL映射文件中的方法名和接口中定义的方法一定要相同(不然呢?)
3). 如果数据表的字段名和实体类的属性名不一致,还需要使用<resultMap>解决
⑤. 配置Spring的配置文件
|--配置数据源:DriverManagerDataSource
|--配置MyBatis的SQLSessionFactory实例
|--配置datasource
|--配置typeAliasesPackage(别名)
|--即:配置实体类所在的位置
|--配置自动扫描MyBatis的SQL映射文件:MapperScannerConfigurer
|--sqlSessionFactory
|--basePackage:扫描指定SQL映射文件/接口所在的包(自动的)
|--即:配置sql映射文件所在位置
|--配置事务管理器
|--配置datasource
|--配置使用声明式事务
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<!-- 配置数据源以及连接数据库的一些信息 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/SpringAndMyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
<!-- 配置SQLSessionFactory
● 数据源
● 配置别名(实体类所在位置)
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="com.imooc.SpringAndMybatis.Entity"></property>
</bean>
<!-- 配置自动扫描加载SQL映射文件
● sqlSessionFactory
● 配置SQL映射文件所在的位置
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
<property name="basePackage" value="com.imooc.SpringAndMybatis.Mapper"></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置使用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
⑥. 最后就是测试啦
package com.imooc.SpringAndMybatis.Test;
import java.util.Date;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.imooc.SpringAndMybatis.Entity.User;
import com.imooc.SpringAndMybatis.Mapper.UserMapper;
public class SpringAndMyBatisTest2
{
private ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
private UserMapper userMapper=context.getBean(UserMapper.class);
@Test
public void Save()
{
User user=new User();
user.setName("AA");
user.setBirthday(new Date());
user.setSalary(2000);
userMapper.save(user);
}
}
查看数据库(因为之前插入过几条数据,所以这里不止一条...)
mysql> select * from user;
+---------+-----------+---------------+-------------+
| user_id | user_name | user_birthday | user_salary |
+---------+-----------+---------------+-------------+
| 1 | AA | 2017-02-08 | 2000 |
| 2 | AA | 2017-02-08 | 2000 |
| 3 | AA | 2017-02-08 | 2000 |
+---------+-----------+---------------+-------------+
3 rows in set (0.00 sec)