mybatis
Mybatis是一个数据持久层框架(dao层),数据持久化,将数据从内存中存储到硬盘中。
1.功能实现
展示图书,通过书名模糊搜索,查询相关书列表
买书功能,买书信息插入购买记录表,total_price(总价)=price(书籍价格)*buy_num(购买数量),图书表中库存对应减少
借书功能,借出信息插入借出表,borrow_date(借出时间)插入为现在的时间,相应图书库存减少1
还书功能,还书信息插入归还表,borrow_date为借出时间,back_date插入为现在的时间,delay_money(滞纳金)=((back_date-borrow_date)default_date(此类书默认借出期限))*delay_per_day(超期每日应缴滞纳金)
2.建表
例表,整理表与表之间的关系。
2.1建表:
CREATE DATABASE IF NOT EXISTS Book ;
USE Book;
#图书表:
CREATE TABLE `Book` (
`book_id` INT(11) NOT NULL AUTO_INCREMENT,
`book_name` VARCHAR(20) NOT NULL,
`price` INT(5) NOT NULL,
`store` INT(100) NOT NULL,
`des` VARCHAR(50) NOT NULL,
`book_type` VARCHAR(50) NOT NULL,
PRIMARY KEY (`book_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
#借出表:
CREATE TABLE `Borrow` (
`book_id` INT(180) NOT NULL AUTO_INCREMENT,
`borrow_id` INT(180) NOT NULL,
`borrow_date` DATE DEFAULT NULL,
`delay_money` INT(180) NOT NULL,
PRIMARY KEY (`book_id`),
CONSTRAINT `Borrow_ibfk_1` FOREIGN KEY (`book_id`) REFERENCES `Book` (`book_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
#归还表:
CREATE TABLE `Back` (
`book_id` INT(180) NOT NULL AUTO_INCREMENT,
`borrow_id` INT(180) NOT NULL,
`back_date` DATE DEFAULT NULL,
`delay_money` INT(180) DEFAULT NULL,
PRIMARY KEY (`book_id`),
CONSTRAINT `Back_ibfk_1` FOREIGN KEY (`book_id`) REFERENCES `Book` (`book_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
#购买记录表:
CREATE TABLE `Buy_record` (
`book_id` INT(180) NOT NULL AUTO_INCREMENT,
`buy_id` INT(180) NOT NULL,
`buy_date` DATE DEFAULT NULL,
`buy_num` INT(100) DEFAULT NULL,
`total_price` INT(255) DEFAULT NULL,
PRIMARY KEY (`book_id`),
CONSTRAINT `Buy_record_ibfk_1` FOREIGN KEY (`book_id`) REFERENCES `Book` (`book_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
#用户表:
CREATE TABLE `User` (
`user_id` INT(180) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(50) DEFAULT NULL,
`grade` INT(255) DEFAULT NULL,
`phone` INT(11) DEFAULT NULL,
`user_type` INT(10) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
#图书类型表:
CREATE TABLE `User` (
`user_id` INT(180) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(50) DEFAULT NULL,
`grade` INT(255) DEFAULT NULL,
`phone` INT(11) DEFAULT NULL,
`user_type` INT(10) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
(表数据自己随便填一填)
3.数据库的连接
3.1配置文件(mybatis-cfg.xml、MapperConfig)
mybatis-cfg.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">
<!--是mybatis的标准根目录-->
<configuration>
<properties>
<!--连接数据的驱动,url,用户名,用户密码字段-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.56.123/Book"/>
<property name="user" value="kb07"/>
<property name="pwd" value="ok"/>
</properties>
<!--jdbc连接数据库环境配置,调用字段-->
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
</dataSource>
</environment>
</environments>
<!--mapper代理-->
<mappers>
<mapper resource="Dao/Impl/Book/BookDao.xml"></mapper>
<mapper resource="Dao/Impl/User/UserDao.xml"></mapper>
</mappers>
</configuration>
MapperConfig:
public class MapperConfig {
private static SqlSessionFactory factory;
static {
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
try {
InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
factory=builder.build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
//在非事务的情况下,自动提交开启
return factory.openSession(true);
}
public static void closeSession(SqlSession session){
if (session!=null){
session.close();
}
}
private MapperConfig() {
}
}
3.2实体类编辑
entity目录下创建book,borrow,buy,user,type实例
添加getter和setter方法
添加toString()方法
(这里就不做赘述了。)
4.功能测试
public class BookDaoTest {
//获取书列表
@Test
public void getBookByName() {
SqlSession session= MapperConfig.getSession();
List<TbBook> books=session.getMapper(BookDao.class).getBookByName("第");
System.out.println(books);
session.close();
}
//借书,还书
/*
增加借书表一条数据,库存对应减少
book_id, borrow_date, back_date, delay_money
id直接获取 第二本书
borrow_date默认现在时间前十天
back_date为现在时间
delay_money 1.通过书本信息,获取书本类型,获得归还期限
2.((back_date-borrow_date)-default_date)*delay_per_day
* */
@Test
public void borrow(){
SqlSession session=MapperConfig.getSession();
List<TbBook> books=session.getMapper(BookDao.class).getBookByName("第二");
TbBook book1=books.get(0);
int id=book1.getBook_Id();
TbBook book=session.getMapper(BookDao.class).getTypeById(id);
int store=book.getStore();
int day=book.getDefault_Date();
double perday=book.getDelay_Money_Per_Day();
java.sql.Date borrow_date = new java.sql.Date(System.currentTimeMillis()-10*24*60*60*1000);
long currentTimeMillis = System.currentTimeMillis();
Date back_date = new Date(currentTimeMillis);
double delay_money=(10-day)*perday;
Map map=new HashMap();//改变库存的map
map.put("b",id);
map.put("a",store);
int tmp=session.getMapper(BookDao.class).updateStoreById(map);
System.out.println(tmp>0?"改变成功":"改变失败");
Map map2=new HashMap();//增加购买记录的map
//book_id, borrow_date, back_date, delay_money
//a b c d
map2.put("a",id);
map2.put("b",borrow_date);
map2.put("c",back_date);
map2.put("d",delay_money);
int tem=session.getMapper(BookDao.class).addBorrowRecord(map2);
System.out.println(tem>0?"购买成功":"购买失败");
}
//用户登录
@Test
public void login(){
SqlSession session= MapperConfig.getSession();
List<TbUser> userList=session.getMapper(UserDao.class).getUserByGrade(1);
TbUser user=userList.get(0);
if (user.getUser_Name().equals("李四")){
System.out.println("登录成功");
}else {
System.out.println("登录失败");
}
session.close();
}
//买书
//购买第一本书,名字搜索获得第一本书库存,单价,
// 图书表库存减去购买数量,测试购买两本
//购买表获取总价
@Test
public void buyBook(){
SqlSession session= MapperConfig.getSession();
List<TbBook> books=session.getMapper(BookDao.class).getBookByName("第一");
TbBook book=books.get(0);
//book_id, buy_date, buy_num, total_price
// a b c d
int store=book.getStore();
double price=book.getPrice();
int id=book.getBook_Id();
Map map=new HashMap();//购买的map
price=price*=2;
store-=2;
long currentTimeMillis = System.currentTimeMillis();
Date date = new Date(currentTimeMillis);
map.put("a",id);
map.put("b",date);
map.put("c",2);
map.put("d",price);
Map map2=new HashMap();//改变库存的map
map2.put("b",id);
map2.put("a",store);
int tmp=session.getMapper(BookDao.class).updateStoreById(map2);
System.out.println(tmp>0?"改变成功":"改变失败");
int tem=session.getMapper(BookDao.class).addBuyRecord(map);
System.out.println(tem>0?"购买成功":"购买失败");
session.close();
}
}
版权声明:本文为Jimmy_izz原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。