使用Mybatis实现点菜功能
使用的是idea软件,主要使用的是mybatis+java+mysql实现了点菜功能,查看已点菜单和结账。新手上路,往多多指教。
这是我的目录结构
IMenu接口
package org.example.dao;
import domin.Menu;
import java.util.List;
public interface IMenu {
int insertMenu(Menu menu);
List
Menu.java
package domin;
public class Menu {
public int number;
public String name;
public double price;
public void setNumber(int number) {
this.number = number;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
mapper.xml
Utils.java
package utils;
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 org.example.dao.IMenu;
import java.io.IOException;
import java.io.InputStream;
public class Utils {
private static SqlSessionFactory factory = null;
static {
String config = "SqlMapConfig.xml";
try {
InputStream inputStream=Resources.getResourceAsStream(config);
factory=new SqlSessionFactoryBuilder().build(inputStream);
// factory.getConfiguration().addMapper(IMenu.class);
}catch(IOException e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
SqlSession session = null;
if(factory !=null){
session=factory.openSession();
}
return session;
}
}
resources资源目录里的:log4j.properties
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=5 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
resources资源目录里的:SqlMapConfig.xml
主配置文件。我的数据库名是student,总共就两个表:menu和yimenu
MenuTest.java测试类
package org.example;
import domin.Menu;
import org.apache.ibatis.session.SqlSession;
import org.example.dao.IMenu;
import org.junit.Test;
import utils.Utils;
import java.util.List;
import java.util.Scanner;
public class MenuTest {
static double sum=0;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(true){
showDish();
int n = s.nextInt();
switch(n){
case 1:
showDishMenu();
break;
case 2:
showPersonDish();
break;//跳出switch循环
case 3:
buy();
return;//结束整个程序
}}
}
//展示菜单
public static void showDishMenu(){
while(true){
SqlSession session = Utils.getSqlSession();
IMenu imenu =session.getMapper(IMenu.class);
List m =imenu.selectMenu();
System.out.println("0:返回主菜单");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n!=0) {
//根据顾客点菜的菜品 number 查询出顾客点的菜的信息,放在一个List中
SqlSession session2 = Utils.getSqlSession();
IMenu imenu2 =session2.getMapper(IMenu.class);
List m2 =imenu2.selectYi(n);
System.out.println("查询到的已点菜品List:"+m2);
//根据查询到的已点菜品的 List中的信息,放在 已点 的数据库中
SqlSession session1 = Utils.getSqlSession();
IMenu iMenu1 = session1.getMapper(IMenu.class);
Menu menu1 = new Menu();
menu1.setNumber(m2.get(0).getNumber());
menu1.setName(m2.get(0).getName());
menu1.setPrice(m2.get(0).getPrice());
int Menu11 = iMenu1.insertYiMenu(menu1);
session1.commit();
System.out.println("您已点:"+menu1.getName());
session1.close();
session2.close();
session.close();
}
else{
return;
}}}
//已点菜品
public static void showPersonDish(){
SqlSession session = Utils.getSqlSession();
IMenu imenu = session.getMapper(IMenu.class);
List menu = imenu.OrderMenu();
session.close();
}
//结账
public static void buy(){
SqlSession session = Utils.getSqlSession();
IMenu imenu = session.getMapper(IMenu.class);
List menu = imenu.OrderMenu();
session.close();
for(int i=0;i< menu.size();i++){
sum=sum+menu.get(i).getPrice();
}
System.out.println(sum + "元");
//将已点菜单的数据库清空
SqlSession session1 = Utils.getSqlSession();
IMenu iMenu = session1.getMapper(IMenu.class);
int n = iMenu.deleteOrder();
System.out.println("已完成本次交易,欢迎下次光临!");
session1.commit();
session1.close();
}
//展示菜品
public static void showDish(){
System.out.println("----主菜单----");
System.out.println("***菜单*** ttt 1");
System.out.println("***已点菜单*** tt 2");
System.out.println("***结账*** ttt 3");
System.out.println("----请根据编号选择服务----");
}
//本次中未使用
//写一个函数 初始化 菜品,并且放入到集合中
// public static void insertMenu(){
// SqlSession session = Utils.getSqlSession();
// IMenu imenu =session.getMapper(IMenu.class);
// Menu menu = new Menu();
// menu.setNumber(1);
// menu.setName("红烧肉");
// menu.setPrice(12.0);
// int m =imenu.insertMenu(menu);
// session.commit();
// System.out.println("添加成功!");
// session.close();
// }
}
数据库结构:
第一个表menu:存放的是菜单
第二个表:yimenu:存放的是已点的菜品,每次结账后会清空



