mybatis连接数据库并查询

图书管理类项目

目的:展示所有图书

(一)数据库表结构分析和建表语句所用到的sql语句

表结构

图书表:bookId,bookName,prices,store,des,bookType
借出表:bookId,borrowId,borrowDate,backDate,delayMoney
归还表:bookId,borrowId,backDate,delayMone
购买记录表:bookId,buyId,buyDate,buyNum,totalPrices
用户表:userId,userName,grade,phone,userType
图书类型表:typeId,typeName,defaultDate,delayMoneyPerDay

mysql语句

创建数据库
CREATE DATABASE IF NOT EXISTS bookStore;
创建图书表并插入数据
#图书表:bookId,bookName,price,store,des,bookType
CREATE TABLE IF NOT EXISTS books(
bookId INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
bookName VARCHAR(20),
prices DOUBLE(10,2),
store INT(5),
des VARCHAR(200),
bookType VARCHAR(20)
)
#图书表插入数据
INSERT INTO books(bookName,prices,store,des,bookType)
VALUES ('西游记',19,8,'讲述师徒四人去西天取经的故事','科幻'),
('三国演义',20,8,'讲述东汉末年三国争锋的故事','历史');
创建借出表并插入数据
#借出表:bookId,borrowId,borrowDate,backDate,delayMoney
CREATE TABLE IF NOT EXISTS borrowBooks(
borrowId INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
bookId INT(5) NOT NULL,
borrowDate DATE,
backDate DATE,
delayMoney DOUBLE(10,2)
)
#借出表插入数据
INSERT INTO borrowBooks(bookId,borrowDate,backDate,delayMoney)
VALUES (2,'2020-6-10','2020-6-15',5);

创建购买数据表并插入数据
#购买记录表:bookId,buyId,buyDate,buyNum,totalPrices
CREATE TABLE IF NOT EXISTS buyBooks(
buyId INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
bookId INT(5) NOT NULL,
buyDate DATE,
buyNum INT(5),
totalPrices DOUBLE(10,2)
)
#购买表插入数据
INSERT INTO buyBooks(bookId,buyDate,buyNum,totalPrices)
VALUES (1,'2020-6-13',1,19);
创建用户数据表并插入数据
#用户表:userId,userName,grade,phone,userType
CREATE TABLE IF NOT EXISTS users(
userId INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
userName VARCHAR(20),
phone VARCHAR(11),
userType VARCHAR(20)
)
#用户表表插入数据
INSERT INTO users(userName,phone,userType)
VALUES ('xiaoming','11111111111','学生'),
('admin','2222222222','管理员');
创建图书类型数据表并插入数据
#图书类型表:typeId,typeName,defaultDate,delayMoneyPerDay
CREATE TABLE IF NOT EXISTS booksType(
typeId INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT,
typeName VARCHAR(20),
defaultDate VARCHAR(20),
delayMoneyPerDay DOUBLE(10,2)
)
#图书类型表插入数据
INSERT INTO booksType(typeName,defaultDate,delayMoneyPerDay)
VALUES ('科幻','30天',1),
('历史','30天',1);

(二)mybatis连接数据库,查询

1)导入相关jar包
2)将mysql数据库中的每个表建立对应的实体类(要求字段名和数据库中相同)
3)配置Tomcat
例子:

public class Books {
    private int bookId;//书编号
    private String bookName;//书名
    private double price;//售出单价
    private int store;//库存量
    private String des;//描述
    private String bookType;//图书类型

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getStore() {
        return store;
    }

    public void setStore(int store) {
        this.store = store;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public String getBookType() {
        return bookType;
    }

    public void setBookType(String bookType) {
        this.bookType = bookType;
    }
    //重写tostring方便打印
    @Override
    public String toString() {
        return "Books{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + '\'' +
                ", price=" + price +
                ", store=" + store +
                ", des='" + des + '\'' +
                ", bookType='" + bookType + '\'' +
                '}';
    }
    
}

4)编写相关配置文件(log4j.properties)
日志文件

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

5)编写一个工具类与数据库之间建立会话

package cn.util;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;

/**
 * @date 2020/6/15 12:06
 */
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() {
    }

}

编写mybatis的配置文件和mysql的路径(编写接口对应的xml文件,将该xml文件引入mybatis配置文件的映射中)

<?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 resource="db.properties"/>-->
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://192.168.56.101/bookStore"/>
        <property name="user" value="kb07-kb07"/>
        <property name="pwd" value="root"/>
    </properties>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
   <!-- 取别名-->
    <typeAliases>
      <!--  <typeAlias type="cn.kgc.entity.User" alias="user"/>-->
        <typeAlias type="cn.pojo.User" alias="user"></typeAlias>
    </typeAliases>
    <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>
    <mappers>
        <mapper resource="cn/dao/user/UserDao.xml"></mapper>

    </mappers>
</configuration>

6)新建dao层包,在该包下建一个图书表的dao接口和对应的映射文件–>需要注意的是映射文件中的命名空间为该类的全类名,每个子语句的id为方法名需要一一对应,然后在mybatis文件中引入该映射文件
接口:

import exam.pojo.Books;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BooksDao {
    List<Books> getBookByName(@Param("name") String name);
    List<Books> getBookByBorrowName(@Param("userName") String userName);
}

映射文件:

<?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="exam.dao.BooksDao">
    <select id="getBookByName" parameterType="STRING" resultType="exam.pojo.Books">
        select *
        from books b
        where b.bookName like concat('%',#{name},'%');
    </select>
    <select id="getBookByBorrowName" parameterType="string" resultType="exam.pojo.Books">
        select *
        from books b
        where b.bookId in (
              select br.bookId
              from borrow br
              where br.uid in
              (select u.userId
              from users u
              where u.userName like concat('%',#{userName},'%'))
        );
    </select>
</mappe>

7)建立图书表的测试类测试程序

import exam.pojo.Books;
import exam.pojo.Users;
import exam.utils.MapperConfig;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

import static org.junit.Assert.*;

public class BooksDaoTest {
//测试书名模糊查询
    @Test
    public void test(){
        SqlSession session = MapperConfig.getSession();
        List<Books> booksList = session.getMapper(BooksDao.class).getBookByName("我");
        System.out.println(booksList);
    }
    //测试借书人名模糊查询
    @Test
    public void test1(){
        SqlSession session = MapperConfig.getSession();
        List<Books> booksList = session.getMapper(BooksDao.class).getBookByBorrowName("小");
        System.out.println(booksList);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_47391932/article/details/106772316