Spring整合Mybatis---使用註解

使用註解,更加簡單
在這裏插入圖片描述
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

實體類 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;
	}

}

核心:AppConfig.java文件

package com.hadwinling;
import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@ComponentScan
@EnableAspectJAutoProxy
@EnableTransactionManagement
@PropertySource("classpath:db.properties")
//mapper掃描器  爲Mapper接口生成實現類  
@MapperScan(basePackages="com.hadwinling.mapper")
public class AppConfig {
	@Autowired
	Environment env;
	@Bean
	public  DataSource dataSource() {
		BasicDataSource bds=new BasicDataSource();
		bds.setDriverClassName(env.getProperty("jdbc.driver"));
		bds.setUrl(env.getProperty("jdbc.url"));
		bds.setUsername(env.getProperty("jdbc.username"));
		bds.setPassword(env.getProperty("jdbc.password"));
		bds.setInitialSize(Integer.parseInt(env.getProperty("jdbc.initialSize")));
		bds.setMaxTotal(Integer.parseInt(env.getProperty("jdbc.maxTotal")));
		bds.setMaxIdle(Integer.parseInt(env.getProperty("jdbc.maxIdle")));
		bds.setMaxWaitMillis(Integer.parseInt(env.getProperty("jdbc.maxWaitMillis")));
		return bds;
	}
	@Bean
	public SqlSessionFactoryBean sqlSessionFactoryBean() {
		SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource());
		//加載MyBatis配置文件 
//		sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("SqlMapConfig.xml"));
		//Spring整合MyBatis[MyBatis配置文件不需要]
		sqlSessionFactoryBean.setTypeAliasesPackage("com.hadwinling.entity");
//		sqlSessionFactoryBean.setPlugins(plugins);//配置插件
		return sqlSessionFactoryBean;
	}
	@Bean
	public DataSourceTransactionManager  transactionManager() {
		DataSourceTransactionManager transactionManager=new DataSourceTransactionManager();
		transactionManager.setDataSource(dataSource());
		return transactionManager;
		
	}
}

BookMapper.java使用註解實現MyBatis

package com.hadwinling.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.annotations.Update;

import com.hadwinling.entity.Book;

public interface BookMapper {
	//查詢所有書籍
	@Select ("select * from book")
	List<Book> findBooks();
	// 刪除書籍,通過書籍編號刪除
	@Delete("delete from book where bno =#{bno}")
	int deleteBook(String bno);
	//新增書籍
	@Insert ("insert into book (bno,bname,author,price,mark) values (#{bno},#{bname},#{author},#{price},#{mark})")
	@SelectKey(keyColumn = "id", // 查詢列
	keyProperty = "id", // 實體屬性
	before = false, // 在新增之後
	resultType = Integer.class, // statement的查詢結果類型
	statement = { "select last_insert_id()" }// 新增記錄之後做的 sql語語句,查詢最後一個id值
			)
	int addBook(Book book);

	// 修改書籍信息
	@Update("update book set bno=#{bno},bname=#{bname},author=#{author},price=#{price},remark=#{remark} where id=#{id}")
	int updateBook(Book book);
	
	//按照書名模糊查詢
	@Select("select * from book where bname like '%${value}%'")
	List<Book> findBookByBname(String bname);
}

BookSevice

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);
}

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);
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章