简单的图书管理项目(mybatis)

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数据列表


图书管理项目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();
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值