(一)、搭建环境
<!-- 最新版本的 Bootstrap 核心 CSS 文件 --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> <!-- 可选的 Bootstrap 主题文件(一般不用引入) --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
https://www.layoutit.com/build?
https://www.bootcss.com/p/layoutit/
1.数据库语句
CREATE DATABASE `ssmbuild`; USE `ssmbuild`; DROP TABLE IF EXISTS `books`; CREATE TABLE `books` ( `bookID` INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id', `bookName` VARCHAR(100) NOT NULL COMMENT '书名', `bookCounts` INT(11) NOT NULL COMMENT '数量', `detail` VARCHAR(200) NOT NULL COMMENT '描述', KEY `bookID` (`bookID`) ) ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `books`(`bookID`,`bookName`,`bookCounts`,`detail`)VALUES (1,'Java',1,'从入门到放弃'), (2,'MySQL',10,'从删库到跑路'), (3,'Linux',5,'从进门到进牢');
2.导入需要的依赖
在这里插入代码片 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!-- Spring链接数据库需要用到spring-jdbc--> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <!-- 导入mybatis-spring依赖--> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <version>1.18.20</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl-api</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
(二)、配置文件
3.创建MyBatis的xml文件 mybais-config.xml
在MyBatis的核心配置文件中,我们主要进行的操作就是:添加实体类的别名,以及mappers的映射扫描(扫向dao层),并创建dao层的mapper.xml;
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <!--configuration核心配置文件--> <configuration> <mappers> <package name="com.Jsxs"/> </mappers> </configuration>
4.创建dao层接口以及dao层的 mapper.xml
在dao层设置dao层同名的xxxmapper.xml文件,在mapper.xml文件里面并设置工作空间namespace指向dao的接口类,在里面进行SQL语句的操作
BookMapper.java
package com.Jsxs.dao; import com.Jsxs.pojo.Books; import org.apache.ibatis.annotations.Param; import java.util.List; public interface BookMapper { // 增加业务 int addBook(Books book); // 删除 int deleteBook(@Param("bookID") int id); // 更新一本书 int updateBook(Books book); // 查询一本书 Books selectBookById(@Param("bookID") int id); // 查询全部书 List<Books> selectBook(); }
BookMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--configuration核心配置文件--> <mapper namespace="com.Jsxs.dao.BookMapper"> <!-- 增加--> <insert id="addBook" parameterType="com.Jsxs.pojo.Books"> insert into books values(#{bookID},#{bookName},#{bookCounts},#{detail}) </insert> <delete id="deleteBook" parameterType="int"> delete from books where bookID=#{bookID} </delete> <update id="updateBook" parameterType="com.Jsxs.pojo.Books"> update books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookID=#{bookID} </update> <select id="selectBookById" parameterType="int" resultType="com.Jsxs.pojo.Books"> select *from books where bookID=#{bookID} </select> <select id="selectBook" resultType="com.Jsxs.pojo.Books"> select *from books </select> </mapper>
5.创建数据库的资源 database.properties
这里一定要在属性名的前面加上 jdbc.xxx;因为我们在用spring配置factory的时候,驱动要求的就是这样。
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=false&useUnicode=true&charEncoding=UTF8" jdbc.username=root jdbc.password=121788
6.创建spring的配置文件 spring-dao.xml【】
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
这里我们主要负责四份工作: ①关联数据库配置文件(database.properties);②创建数据库连接池(主要工作就是链接驱动、用户名、URL、密码以及一些其他的私有属性);③创建SqlSessionFactory工厂主要工作就是(映射数据源databaseSource,以及绑定MyBatis的核心配置文件Mybatis.xml);④配置dao接口扫描包,然后创建各自接口的动态代理类(dao层实现类)。这样,Service就可以注入dao的实例了。
1.MyBatis的一大亮点就是可以不用dao层的实现类,而我们知道在开发中service 层需要调用dao层,如果没有dao的实现类,Spring如何为Service注入dao的实例呢? 2.在我们以前的操作中,我们创建完sqlSessionFactory之后,我们需要借助 sqlSessionFactory来生成sqlSession.然后创建Service接口的bean,如果我们 借助MapperScannerConfigurer 这段配置会扫描xxx包下的所有接口,然后创建 各自接口的动态代理类。这样,Service就可以注入dao的实例了。
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-- 1.关联数据库配置文件--> <context:property-placeholder location="classpath:database.properties"/> <!-- 2.数据库连接池 dbcp :半自动化操作,不能自动链接 c3p0 :自动化操作(自动化的加载配置文件,并且可以自动设置到对象中) 这里用c3p0 --> <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="password" value="${jdbc.password}"/> <property name="user" value="${jdbc.username}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <!-- c3p0连接池的私有属性 --> <property name="maxPoolSize" value="30"/> <property name="minPoolSize" value="10"/> <!-- 关闭链接后不自动commit --> <property name="autoCommitOnClose" value="false"/> <!-- 获取链接超时时间 --> <property name="checkoutTimeout" value="10000"/> <!-- 获取链接失败尝试次数--> <property name="acquireRetryAttempts" value="2"/> </bean> <!-- 3. sqlSessionFactory --> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <property name="dataSource" ref="dataSource"/> <!-- 绑定MyBatis的配置文件--> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- 4. 配置dao接口扫描包,动态实现了Dao接口可以注入到Spring容器中--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 要扫描的dao包 --> <property name="basePackage" value="com.Jsxs.dao"/> </bean> </beans>
7.创建service层的接口以及servcie的实现类
在这里我们主要创建XXXservice的接口(基于dao层的),然后我们并创建XXXServiceImpl的实现类。②切记在XXXServiceImpl的实现类中我们要以dao层的接口作为一个私有属性,目的是我们service层要实现dao层。①为什么属性我们要设置dao层的接口而不是dao层的具体实现类呢?因为接口的范围大与实现类或则说接口只能有一个然而实现类确是有很多,所以我们动态代理必须要用接口而不是实现类。③我们要对属性创建有参无参和set方法,目的是我们要使用DI注入。④在service创建@service的注解实现动态创建bean
BookService.java
package com.Jsxs.service; import com.Jsxs.pojo.Books; import org.apache.ibatis.annotations.Param; import java.util.List; public interface BookService { // 增加业务 int addBook(Books book); // 删除 int deleteBook(int id); // 更新一本书 int updateBook(Books book); // 查询一本书 Books selectBookById(int id); // 查询全部书 List<Books> selectBook(); }
BookServiceImpl.java
package com.Jsxs.service; import com.Jsxs.dao.BookMapper; import com.Jsxs.pojo.Books; import org.springframework.stereotype.Service; import java.util.List; @Service public class BookServiceImpl implements BookService{ private BookMapper bookMapper; public BookServiceImpl(BookMapper bookMapper) { this.bookMapper = bookMapper; } public BookServiceImpl() { } public void setBookMapper(BookMapper bookMapper) { this.bookMapper = bookMapper; } @Override public int addBook(Books book) { // 这个语句就是业务层调用 return bookMapper.addBook(book); } @Override public int deleteBook(int id) { return bookMapper.deleteBook(id); } @Override public int updateBook(Books book) { return bookMapper.updateBook(book); } @Override public Books selectBookById(int id) { return bookMapper.selectBookById(id); } @Override public List<Books> selectBook() { return bookMapper.selectBook(); } }