文章目录
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.sql数据列表
3.mybatis连接数据库
3.1mybatis核心配置文件
3.1.1(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.101/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>
3.1.2工具类读取配置文件(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()方法
3.3创建和映射文件和相应mapper接口
- 应在同一目录下
- bookdao.xml中namespace指定为bookdao接口的全限定名 - bookdao.xml中statement的id就是bookdao.java中方法名
- bookdao.xml中statement的parameterType和bookdao.java中方法输入参数类型一致
- bookdao.xml中statement的resultType和bookdao.java中方法返回值类型一致.
bookdao.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="Dao.Impl.Book.BookDao">
<select id="getBookByName" resultType="entity.TbBook" parameterType="string">
SELECT * FROM tb_book
WHERE book_name LIKE concat("%",#{name},"%");
</select>
<insert id="add" parameterType="entity.TbBook" >
insert into tb_book(book_name, price, store, des, book_type)
values (#{book_name}, #{price}, #{store}, #{des}, #{book_type})
</insert>
<update id="updateStoreById" parameterType="int">
update tb_book SET store=#{a} where book_id=#{b};
</update>
<insert id="addBuyRecord" parameterType="map">
insert into tb_buy(book_id, buy_date, buy_num, total_price)
values (#{a},#{b},#{c},#{d})
</insert>
<insert id="addBorrowRecord" parameterType="map">
insert into tb_borrow(book_id, borrow_date, back_date, delay_money)
values (#{a},#{b},#{c},#{d})
</insert>
<select id="getTypeById" parameterType="int" resultType="entity.TbBook">
select * from tb_type t
join tb_book b on t.type_id=b.book_type
where b.book_id=#{id};
</select>
</mapper>
BookDao.java
public interface BookDao {
//通过书名模糊查询书本信息
List<TbBook> getBookByName(String name);
//增加书
int add(TbBook book);
//改变库存
int updateStoreById(Map map);
//增加购买记录
int addBuyRecord(Map map);
//增加还书记录
int addBorrowRecord(Map map);
//获取书类型信息通过书本id
TbBook getTypeById(int id);
}
4.test完成逻辑,测试功能
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();
}
}