spring mybatis 整合
1.第一步导包,创建maven项目需要导入以下包
- spring-webmvc
- spring-jdbc
- spring-aspects
- mybatis
- mybatis-spring
- c3p0
- jstl
- javax.servlet-api
- mysql-connector-java(注意这里要导入6.0以下的版本,第一次导入6.0版本 的导致连接不上)
下面是pom.xml代码
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc
springmvc jar包
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.11.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0-b01</version>
<scope>provided</scope><!-- 添加<scope>provided</scope>,
因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat服务器的时候,服务器上如果有该包就不会冲突了 -->
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
关于mybatis与spring的整合有好几种方法,这篇文档写的是其中一种比较简单的仅仅用来入门学习
第一种,项目结构如下:
1.在pojo包下新建一个User.java
package pojo;
public class User {
private int id;
private String name;
private String password;
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.在dao包下创建一个方法接口
package dao;
import java.util.List;
import pojo.User;
public interface UserDao {
public List<User> selectUser();
}
3.在implement下创建UserDao的实现类
package imp;
import java.util.List;
import org.mybatis.spring.SqlSessionTemplate;
import dao.UserDao;
import pojo.User;
public class UserImp implements UserDao {
private SqlSessionTemplate sqlsessiont;/*SqlSessionTemplate 实现了SqlSession接口,可以使用selectOne等方法*/
public List<User> selectUser() {
// TODO Auto-generated method stub
return sqlsessiont.selectList("dao.UserDao.selectUser");//这里就调用了命名空间为UserDao的id为selectUser方法,下面代码可以看见
}
public SqlSessionTemplate getSqlsessiont() {
return sqlsessiont;
}
public void setSqlsessiont(SqlSessionTemplate sqlsessiont) {
this.sqlsessiont = sqlsessiont;
}
}
4.UserMap.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接口代理实现编写规则
1.映射文件中namespace要等于接口的全路径名
2.映射文件中sql语句id要等于接口的方法名称
3.映射文件中传入参数类型要等于接口方法的传入参数类型
4.映射文件中返回结果集类型等于接口方法的返回值类型-->
<mapper namespace="dao.UserDao">
<select id="selectUser" resultType="pojo.User">
select * from Users
</select>
</mapper>
5.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!--配置数据源 ,也就是连接jdbc -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"></property>
<property name="username" value="abc"></property>
<property name="password" value="1614"></property>
</bean>
<!--创建sqlsessionFactoryBean,注意看其名称为mybatis.spring,
这是mybatis-spring包下的类,代替了mybatis的SqlSessionFactoryBuilder来创建SqlSession,
SqlSessionFactoryBean有一个必须属性dataSource,
另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--引入上面的数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定mybatis-config.xml总配置文件-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!--SqlSessionTemplate对象可以使用SqlSessionFactory作为构造方法的参数来创建-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!---class=UserImp为UserDao的实现方法,看上面的代码可知道UserImp类有个sqlSessionTemplate类对象sqlsessiont,根据set方法注入-->
<bean id="UserDao" class="imp.UserImp">
<property name="sqlsessiont" ref="sqlSessionTemplate"></property>
</bean>
</beans>
6.mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<!-- 注册userMapper.xml文件-->
<mapper resource="pojo/UserMap.xml"/>
</mappers>
</configuration>
7.测试
package ssmTest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.UserDao;
public class Test {
public static void main(String[] args)
{
<!--由spring替我们创建userdao对象->
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userdao=context.getBean("UserDao",UserDao.class);
System.out.println(userdao.selectUser().get(0).getName());
}
}
*总结:捋一下思路先是创建实体类,然后写方法接口并实现他,然后写接口映射文件,接口映射文件要满足4个条件,上面注释里有提到,然后是在spring applicationContext配置文件里,配置,这也是最重要的,这种方法是最简单的也就是一步步从数据源开始,然后sqlSessionFactory,这里代替了mybatis里面的SqlSessionFactoryBuilder来创建SqlSession,实现了spring,mybatis整合,然后创建出sqlSessionTemplate,为dao接口实现类参数赋值,最后在测试类取出这个类就可以调用其方法了。