一、mybatis层,保证mybatis能够独立运行
1.导包,一次性全部导完需要的包
<dependencies> <!--Junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- 数据库连接池 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <!--Servlet - JSP --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> <!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> </dependencies> <!--Maven资源过滤设置--> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> </project>
2.前期mysql准备
create database ssm; use ssm; create table books( bookid int primary key auto_increment not null comment '书id', bookName varchar(100) not null comment '书名', bookCounts int(11) not null comment '书数量', detail varchar(200) not null comment '书描述' )engine = innodb default charset = utf8 insert into books(bookName,bookCounts,detail) VALUES ('Java',2,'从入门到放弃'), ('MySql',2,'从删库到跑路'), ('Linux',2,'从进门到进牢');
3.实体类
public class Books { private int bookid; private String bookName; private int bookCounts; private String detail; ... }
4.BooksMapper接口和映射文件
public interface BooksMapper { //查询所有 List<Books> queryAllBook(); //根据id查询 Books queryBookById(int id); //添加 int addBook(Books book); //修改 int updateBook(Books books); //删除 int deleteBook(@Param("bookId") int id); } <?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.cong.dao.BooksMapper"> <select id="queryAllBook" resultType="books"> select * from ssm.books; </select> <select id="queryBookById" resultType="books" parameterType="int"> select * from ssm.books where bookid = #{id}; </select> <insert id="addBook" parameterType="books"> insert into ssm.books(bookName, bookCounts, detail) VALUES (#{bookName},#{bookCounts},#{detail}); </insert> <update id="updateBook" parameterType="books"> update ssm.books set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail} where bookid = #{bookid}; </update> <delete id="deleteBook" parameterType="int"> delete from ssm.books where bookid = #{bookId} </delete> </mapper>
5.mybatis核心配置文件mybatis-config.xml
db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=true&useUnicode=true&characterEncoding=utf8 jdbc.username=root jdbc.password=123456 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> <properties resource="db.properties"/> <typeAliases> <package name="com.cong.pojo"/> </typeAliases> <!--整合spring之后将会数据源交给了spring配置--> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/cong/dao/BooksMapper.xml"/> </mappers> </configuration>
6.测试类
public class MybatisTest { @Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession(); BooksMapper booksMapper = sqlSession.getMapper(BooksMapper.class); List<Books> books = booksMapper.queryAllBook(); for (Books book : books) { System.out.println(book.toString()); } sqlSession.close(); inputStream.close(); } @Test public void test1() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession(); BooksMapper booksMapper = sqlSession.getMapper(BooksMapper.class); Books books = booksMapper.queryBookById(1); System.out.println(books.toString()); sqlSession.close(); inputStream.close(); } @Test public void test2() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession(); BooksMapper booksMapper = sqlSession.getMapper(BooksMapper.class); Books books = new Books(); books.setBookName("数据结构"); books.setBookCounts(20); books.setDetail("从入门到头秃"); booksMapper.addBook(books); sqlSession.commit(); sqlSession.close(); inputStream.close(); } @Test public void test3() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession(); BooksMapper booksMapper = sqlSession.getMapper(BooksMapper.class); Books books = new Books(); books.setBookName("算法设计"); books.setBookCounts(20); books.setDetail("从入门到头秃"); books.setBookid(5); booksMapper.updateBook(books); sqlSession.commit(); sqlSession.close(); inputStream.close(); } @Test public void test4() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = factory.openSession(); BooksMapper booksMapper = sqlSession.getMapper(BooksMapper.class); booksMapper.deleteBook(5); sqlSession.commit(); sqlSession.close(); inputStream.close(); } }
7.查询所有的结果,至此mybatis能够独立运行
二、整合spring
1.创建application.xml配置文件,这个主要就是将其它的配置import进来
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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 "> <import resource="spring-service.xml"/> <import resource="spring-dao.xml"/> </beans>
2.编写spring与mybatis的配置文件spring-dao.xml,这里使用的数据源是c3p0
<?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 https://www.springframework.org/schema/context/spring-context.xsd"> <!--1.关联数据库文件--> <!--这是装门导入数据库配置文件的,import只能导入spring的文件--> <context:property-placeholder location="classpath:db.properties"/> <!--2.连接池--> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--3.SqlSessionFactory--> <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory"> <property name="dataSource" ref="datasource"/> <!-- 绑定mybatis全局配置文件:mybatis-config.xml --> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 --> <!--解释 : https://www.cnblogs.com/jpfss/p/7799806.html--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 给出需要扫描Dao接口包 --> <property name="basePackage" value="com.cong.dao"/> </bean> </beans>
spring整合了dao层之后
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> <typeAliases> <package name="com.cong.pojo"/> </typeAliases> <mappers> <mapper resource="com/cong/dao/BooksMapper.xml"/> </mappers> </configuration>
3.spring整合service层
<?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 https://www.springframework.org/schema/context/spring-context.xsd"> <!--1.扫描service下的包--> <context:component-scan base-package="com.cong.service"/> <!--将所有的service类注入到spring--> <bean class="com.cong.service.BooksServiceImpl" id="booksService"> <property name="booksMapper" ref="booksMapper"/> </bean> <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"/> </bean> </beans>
测试
public class SpringTest { @Test public void test1(){ //加载配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //获取对象 BooksService booksService = (BooksService) context.getBean("booksService"); //执行方法 List<Books> books = booksService.queryAllBook(); for (Books book : books) { System.out.println(book.toString()); } } }
结果,可以查询
至此,spring整合mybatis完成