Spring整合MyBatis
-
XMl配置结合注解整合
配置文件 :
MyBati配置文件(SqlMapConfig.xml) 设置 起别名 插件(分页)
mapper.xml DAO的实现
log4j.properties 日志配置
Spring配置文件(applicationContext.xml) 框架管理 :
配置数据源bean 事务管理器对象 aop SqlSessionFactoryBean mapper 开启相关注解扫描
注解:servicebean 业务层上的事务管理 单元测试
创建maven文件
在pom.xml 文件上的相关配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gem.demo</groupId>
<artifactId>spring-mybatis-xml-annotation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<!-- 坐标 -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- spring核心 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- spring整合mybatis jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
</project>
数据库的相关信息:db.properties文件上的配置
#配置数据库信息
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/homeworkonline?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root
#配置连接池信息
jdbc.initialSize=10
jdbc.maxTotal=5
jdbc.maxIdle=5
jdbc.maxWaitMillis=5000
打印日志的相关信息,log4j,properties文件上的配置
#打印日志级别
log4j.rootLogger=debug, stdout
# 控制台输出日志
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
在mybatis的文件上的相关信息,sqlMapConfig.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>
<settings>
<!-- 开启全局懒加载 -->
<setting name="lazyLoadingEnabled" value="true" />
<!-- 按需懒加载 -->
<setting name="aggressiveLazyLoading" value="false" />
<setting name="lazyLoadTriggerMethods" value="" />
<!-- 日志管理 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 起别名 -->
<typeAliases>
<package name="com.hadwinling.entity" />
</typeAliases>
<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<!-- 数据源信息交由Spring管理 -->
</configuration>
实体类:Book
package com.hadwinling.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
private int bid;
private String bno;
private String bname;
private String author;
private double price;
private String mark;
public Book(String bno, String bname, String author, double price, String mark) {
this.bno = bno;
this.bname = bname;
this.author = author;
this.price = price;
this.mark = mark;
}
}
在mapper包下的bookMapper.java的代码块:
package com.hadwinling.mapper;
import java.util.List;
import com.hadwinling.entity.Book;
public interface BookMapper {
//查询所有书籍
List<Book> findBooks();
// 删除书籍,通过书籍编号删除
int deleteBook(String bno);
//新增书籍
int addBook(Book book);
// 修改书籍信息
int updateBook(Book book);
//按照书名模糊查询
List<Book> findBookByBname(String bname);
}
bookMapper.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 namespace="com.hadwinling.mapper.BookMapper">
<!-- 查找所有书籍 -->
<select id="findBooks" resultType="Book">
select * from book
</select>
<!-- 删除书籍,通过编号删除 -->
<delete id="deleteBook" parameterType="String">
delete from book where bno
= #{bno}
</delete>
<!-- //增加书籍 -->
<!-- boolean addBook(Book book); -->
<insert id="addBook" parameterType="Book"
useGeneratedKeys="true" keyProperty="id">
insert into book
(bno,bname,author,price,mark) values
(#{bno},#{bname},#{author},#{price},#{mark})
</insert>
<!-- //修改书籍信息 -->
<!-- boolean updateBook(Book book); -->
<update id="updateBook" parameterType="Book">
update book set bno =
#{bno} ,bname = #{bname} ,author =#{author}, price =
#{price},mark =
#{mark} where bno = #{bno}
</update>
<!-- //按照书名查 -->
<select id="findBookByBname" resultType="Book"
parameterType="String">
select * from book where bname like '%${value}%'
</select>
</mapper>
在service包下的BookService
package com.hadwinling.service;
import java.util.List;
import com.hadwinling.entity.Book;
public interface BookService {
// 查找所有书籍
List<Book> findBooks();
// 删除书籍,通过书籍编号删除
int deleteBooks(String bno);
// 新增书籍
int addBook(Book book);
// 修改书籍信息
int updateBook(Book book);
// 按照书名模糊查询
List<Book> findBookByBname(String bname);
}
在service的实现类中/:bookServiceImpl 文件下
package com.hadwinling.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.hadwinling.entity.Book;
import com.hadwinling.mapper.BookMapper;
import com.hadwinling.service.BookService;
@Service
@Transactional
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
@Override
public List<Book> findBooks() {
// TODO Auto-generated method stub
return bookMapper.findBooks();
}
@Override
public int deleteBooks(String bno) {
// TODO Auto-generated method stub
return bookMapper.deleteBook(bno);
}
@Override
public int addBook(Book book) {
// TODO Auto-generated method stub
return bookMapper.addBook(book);
}
@Override
public int updateBook(Book book) {
// TODO Auto-generated method stub
return bookMapper.updateBook(book);
}
@Override
public List<Book> findBookByBname(String bname) {
// TODO Auto-generated method stub
return bookMapper.findBookByBname(bname);
}
}
测试类:这里使用单元测试类
BaseTest文件的配置:
package com.hadwinling;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.hadwinling.mapper.BookMapper;
import com.hadwinling.service.BookService;
@ContextConfiguration(locations = "classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseTest {
@Autowired
protected BookMapper bookMapper;
@Autowired
protected BookService bookService;
}
serviceTest文件的配置:
package com.hadwinling.service;
import java.util.List;
import java.util.Scanner;
import org.junit.Test;
import com.hadwinling.BaseTest;
import com.hadwinling.entity.Book;
public class ServiceTest extends BaseTest {
Scanner input = new Scanner(System.in);
// @Test
// public void findBook() {
// List<Book> books = bookMapper.findBooks();
// for (Book book : books) {
// System.out.println(book);
// }
// }
// @Test
// public void deleteBook() {
// System.out.println("请输入要删除的书籍编号");
// String bno= input.next();
// int result = bookMapper.deleteBook(bno);
// System.out.println(result);
// }
// @Test
// public void addBook() {
// System.out.println("请输入书籍编号");
// String bno = input.next();
// System.out.println("请输入书名");
// String bname = input.next();
// System.out.println("请输入作者");
// String author = input.next();
// System.out.println("请输入价格");
// int price = input.nextInt();
// System.out.println("请输入评价");
// String mark = input.next();
// Book book = new Book(bno, bname, author, price, mark);
// int result = bookMapper.addBook(book);
// System.out.println(result);
// }
// @Test
// public void updateBook() {
// System.out.println("请输入书籍编号");
// String bno = input.next();
// System.out.println("请输入书名");
// String bname = input.next();
// System.out.println("请输入作者");
// String author = input.next();
// System.out.println("请输入价格");
// int price = input.nextInt();
// System.out.println("请输入评价");
// String mark = input.next();
// Book book = new Book(bno, bname, author, price, mark);
// int result = bookMapper.updateBook(book);
// System.out.println(result);
// }
@Test
public void findBookByBname() {
System.out.println("输入书名");
String bname = input.next();
List<Book> books = bookMapper.findBookByBname(bname);
for (Book book : books) {
System.out.println(book);
}
}
}