第一步:pom.xml创建环境,注入依赖
这里注入的是myBatis的所有依赖环境:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--myBatis的环境-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!--mySql的环境-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--Spring整合JDBC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--Spring整合myBatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!--Spring整合druid,作为数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--整合分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
下面配置SpringMVC的环境:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!--jackson相关坐标-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<!--servlet环境-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
至此,最关键的两个SpringMVC和MyBatis环境依赖就搭建完了,下面导入一些测试组件的环境:
<!--其他组件-->
<!--其他组件-->
<!--其他组件-->
<!--junit单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--spring整合junit-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
同时在< dependencies >外设置好Tomcat的插件:
<build>
<!--设置插件-->
<plugins>
<!--具体的插件配置-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
到这里,我们需要的依赖都已经注入了。接下来
第二步:我们要做Spring的配置文件。非常简单,就是开启扫描组件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启扫描组件-->
<context:component-scan base-package="com.itheima"/>
</beans>
第三步:配置Dao的映射文件,因为我们想要myBatis自动代理生成Dao的实现类嘛。所以与接口的方法一一对应写出配置文件。
<?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.itheima.dao.UserDao">
<!--添加-->
<insert id="save" parameterType="user">
insert into user(userName,password,realName,gender,birthday)values(#{userName},#{password},#{realName},#{gender},#{birthday})
</insert>
<!--删除-->
<delete id="delete" parameterType="int">
delete from user where uuid = #{uuid}
</delete>
<!--修改-->
<update id="update" parameterType="user">
update user set userName=#{userName},password=#{password},realName=#{realName},gender=#{gender},birthday=#{birthday} where uuid=#{uuid}
</update>
<!--查询单个-->
<select id="get" resultType="user" parameterType="int">
select * from user where uuid = #{uuid}
</select>
<!--分页查询-->
<select id="getAll" resultType="user">
select * from user
</select>
<!--登录-->
<select id="getByUserNameAndPassword" resultType="user" >
select * from user where userName=#{userName} and password=#{password}
</select>
</mapper>
同时注意最后一个getByUserNameAndPassword我们没有给参数,parametertype,因为我们在接口类中使用了@Param,确保String userName会被用到sql语句里面的#{userName}
public interface UserDao {
public boolean save(User user);
public boolean update(User user);
public boolean delete(Integer uuid);
public User get(Integer uuid);
public List<User> getAll();
public User getByUserNameAndPassword(@Param("userName") String userName, @Param("password") String password);
}
到这一步UserDao类的映射动态代理实现就已经全部做完了。接下来就是
第四步:填充Service的实现类的逻辑了。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public boolean save(User user) {
return userDao.save(user);
}
@Override
public boolean update(User user) {
return userDao.update(user);
}
@Override
public boolean delete(Integer uuid) {
return userDao.delete(uuid);
}
@Override
public User get(Integer uuid) {
return userDao.get(uuid);
}
@Override
public PageInfo<User> getAll(int page,int size) {
//这里我们使用了一个分页的插件
PageHelper.startPage(page, size);
List<User> all = userDao.getAll();
return new PageInfo<User>(all);
}
@Override
public User login(String userName, String password) {
return userDao.getByUserNameAndPassword(userName,password);
}
}
我们主要看三个地方:
- @Service,使该类变成一个Bean,交给Spring来管理。
- @AutoWired,我们已经配置好Dao的接口和映射文件了,所以Spring会为我们动态的生成Dao,这里直接自动匹配即可。
- 修改使用了
public PageInfo<User> getAll(int page,int size)
,使用了分页插件。
至此Service层的实现也完成了。
到了这一步,我们就需要明白Spring自动动态生成Dao是需要DataSource的,这个我们只是导入了,但是还没在配置文件里面写呢,没把他配为Bean,交给Spring,Spring是无法为我们动态生成Dao的。这个时候我们就知道我们要继续给Spring配置DataSource了。
第五步:配置自动生成Dao的DataSource
我们需要一个SqlSessionFactoryBean
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref=""/>
</bean>
而SqlSessionFactoryBean则需要DataSource,那么我们就需要配置DataSource。而DataSource又需要配置一系列的DriverClass,URL,username,password等参数,我们直接properties文件里面拿就好了,下面就是完整的配置流程,同时我们还要扫描映射配置文件进来。
<!--1.加载读取配置文件这样你才可以直接用${jdbc.xxxx}-->
<context:property-placeholder location="classpath*:jdbc.properties"/>
<!--2.配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--3.使用我们配置好的数据源来生成SqlSession,同时将这个作为Bean整合进Spring中-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--当你设置这个 ,那么在Mybatis的Mapper文件里面就可以直接写对应的类名 而不用写全路径名了-->
<!--你像我们<update id="update" parameterType="user">,这里面的parameterType都直接写类名的,而不是com.itheima.user-->
<property name="typeAliasesPackage" value="com.itheima.domain"/>
</bean>
<!--4.映射扫描,我们需要根据映射的配置文件来生成Dao呀,我们现在有工厂了,就差最后一个模板图纸就可以生产了,给他!-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--该包下面的映射配置都会被扫描到,如果我们需要某个接口的实现,该包下的配置文件就会被实现-->
<property name="basePackage" value="com.itheima.dao"/>
</bean>
到这里,其实myBatis就已经整合完毕了!