本次后端系统选用IDEA进行开发,相关jar包通过Maven坐标导入
本章先单个配置Mybatis以及spring框架并进行运作,过程中思考mbatis的哪些对象可以交给spring来控制以便后期三位一体后进行注入。
一、 IDEA创建工程
1.首先打开IDEA,已有的工程是我学习时用的工程,请忽视。
2.新建一个module。
3.点击Maven,选择我们的jdk,再勾选使用模板创建,最后选择maven-xxx-webapp这一项。
4.输入项目名,点击下一步,进入此页面 需要将maven从默认选项改为我们自己的本地仓库,点击完成。
5.这时候发现明明选了模板也BUILD SUCCESS了却只有个pom文件,这种情况需要点击红框所示的import Changes来导入改动。
6.导入之后就是如图所示的连个java文件夹都没有的工程结构,到这里咱们的进度就一样了,继续右键main,新建java与resources文件夹。
7.新建时点击Directory之后,IDEA会推荐出这两个文件夹,直接点击就可以自动生成,如下图。
8.最终,我们的目录结构就是这样的:
二、单独搭建Mybatis框架
1.在pom.xml中导入Mybatis所需坐标并点击import changes。
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>4.2.2</version>
</dependency>
2.在Resources文件夹中新建并配置SqlMapConfig.xml文件,各项作用请参考注释,其中mappers中若我们的sql用xml来写就是注册package,若是我们用注解的话注册的就是类,本次我们采用xml所以需要把dao所在的包路径进行注册。
<?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>
<!-- 配置数据库信息 我的数据库是mysql-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/tmsystem"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射配置文件 -->
<mappers>
<package name="com.lx.dao"/>
</mappers>
</configuration>
3.这时右键java创建package,输入com.lx.dao,当然就算只输个a也行,不过第二步的name要记得改成a,项目结构此时如下图。
4.这时创建一个dao接口userDao,就写一个查询总数的方法,主要目的是为了测试框架有没有运作。
package com.lx.dao;
/**
* 用户
*/
public interface UserDao {
/*
查询user表总数
*/
public int userCount();
}
5.创建完接口之后就需要配置xml文件,此时java代码侧从java文件夹开始的UserDao.java的路径,xml侧从resources文件夹开始到UserDao.xml的路径,一定要相同。此处的sql根据我们自身的表改变,id就是我们dao的方法名。
6.现在我们有了dao,有了mapper,就差让框架帮我们做事了,右键src文件夹来创建一个test文件夹,并在test文件夹中创建Demo01入口程序,因为test文件夹下的代码打包不会被编译,所以最好把和项目无关的代码放进这里。
7.每一句的作用在注释里,如此我们运行测试就可以得到结果,没有log的配置先无视,这样Mybatis就先配置成功了,如下图。
图中代码如下:
import com.lx.dao.UserDao;
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.junit.Test;
import java.io.IOException;
/**
* Mybatis测试类
*/
public class Demo01 {
@Test
public void test() throws IOException {
//读取配置文件 并 创建SqlSessionFactory
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("SqlMapCinfig.xml"));
//获取会话对象
SqlSession sqlSession = sessionFactory.openSession();
//强化Dao
UserDao userDao = sqlSession.getMapper(UserDao.class);
//执行方法
System.out.println(userDao.userCount());
}
}
8.之后,我们进行三合一之后就利用spring来帮我们控制需要的factory以及session等对象,再将dao注入到service中,再将service注入到controller中,如此我们就可以不用再手动弄个测试类或者在controller中写像上面一样的代码了。
三、单个搭建spring框架
1.导入spring坐标。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
2.创建一个Student类,该生可以吃饭,一会通过spring来进行获取。
package com.lx;
/**
* 这是学生
*/
public class Student {
public void eat(){
System.out.println("吃吃吃");
}
}
3.在Resources文件夹中创建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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 将学生对象注册进容器 -->
<bean id="student" class="com.lx.Student"/>
</beans>
4.继续在test类中写测试方法,通过spring获取学生对象。
@Test
public void test2(){
//获取applicationContext对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//获取Student对象
Student student = applicationContext.getBean("student",Student.class);
//吃饭
student.eat();
}
小结:到这我们就把mybatis和spring各自单独的运作起来了,我们发现了mybatis的工厂对象,会话对象以及我们自己写的dao对象其实可以想办法交给spring来控制,而sqlSessionFactory所需的driver、username等属性可以通过spring来属性注入,有了这些概念我们就可以大概想来为什么说spring是润滑剂了,下章我们开始三位一体。(其实可以说是两位一体,毕竟spring和springmvc本来就是无缝衔接的)