mybatis复习小项目

学完mybatis做的一个小项目,包含查看老师信息和添加老师信息的功能,整个项目结构有截图,每个文件代码下面都有,之外的相关就是数据库表了,在此没有做,懂数据库的很简单的一张表自己弄吧,不懂得暂时就犯不着了解mybatis了

Teacher.java

---------------------------------------代码开始-------------------------------------------

package com.entity;

public class Teacher {
            //javaBean是有默认构造函数的只含有set get tostring的java类
            private int teaId;
            private String teaName;
            private int teaAge;
            private int gradeId;
            public int getTeaId() {
                return teaId;
            }
            public void setTeaId(int teaId) {
                this.teaId = teaId;
            }
            public String getTeaName() {
                return teaName;
            }
            public void setTeaName(String teaName) {
                this.teaName = teaName;
            }
            public int getTeaAge() {
                return teaAge;
            }
            public void setTeaAge(int teaAge) {
                this.teaAge = teaAge;
            }
            
            public int getGradeId() {
                return gradeId;
            }
            public void setGrade(int gradeId) {
                this.gradeId = gradeId;
            }
            @Override
            public String toString() {
                return "Teacher [teaId=" + teaId + ", teaName=" + teaName + ", teaAge=" + teaAge + ", grade=" + gradeId
                        + "]";
            }
            
}

---------------------------------------代码结束-------------------------------------------

TeacherDAO.java

---------------------------------------代码开始-------------------------------------------

package com.dao;

import java.util.List;

import com.entity.Teacher;

public interface TeacherDAO {
    public List<Teacher> getAll();
    public int add(Teacher tea);
}

 

---------------------------------------代码结束-------------------------------------------

TeacherDAOImpl.java

---------------------------------------代码开始-------------------------------------------

package com.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.dao.TeacherDAO;
import com.entity.Teacher;

public class TeacherDAOImpl implements TeacherDAO{

    @Override
    public List<Teacher> getAll() {
        SqlSession session=BaseDAO.getSession();
        TeacherDAO dao=session.getMapper(TeacherDAO.class);
        List<Teacher> teaList=dao.getAll();
        session.close();
        return teaList;
    }

    @Override
    public int add(Teacher tea) {
        SqlSession session=BaseDAO.getSession();
        TeacherDAO dao=session.getMapper(TeacherDAO.class);
        int count=dao.add(tea);
        //数据库内容变动一定要加上commit()
        session.commit();
        session.close();
        return count;
    }

}

---------------------------------------代码结束-------------------------------------------

BaseDAO.java

---------------------------------------代码开始-------------------------------------------

package com.dao.impl;

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

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

public class BaseDAO {
    //这里涉及到try{}中的内容不管是定义还是赋值,在之后使用的时候因为考虑的是try{}中内容一定
    //报错的情况,编译的时候会按try{}之前的定义和赋值来使用,运行的时候才会使用try{}中的内容
    static final  String CONFIG_FILE="mybaits-config.xml";
    static SqlSessionFactory factory;
    static{
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        InputStream is;
        try {
            is = Resources.getResourceAsStream(CONFIG_FILE);
            factory=builder.build(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static SqlSession getSession(){
            return factory.openSession();
    }
}

---------------------------------------代码结束-------------------------------------------

TeacherMapper.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="com.dao.TeacherDAO">
    <select id="getAll" resultType="teacher">
        select * from teacher
    </select>
    <insert id="add">
        insert into teacher values(null,#{teaName},#{teaAge},#{gradeId})
    </insert>
</mapper>

---------------------------------------代码结束-------------------------------------------

AddServlet.java

---------------------------------------代码开始-------------------------------------------

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.TeacherDAO;
import com.dao.impl.TeacherDAOImpl;
import com.entity.Teacher;
import com.sun.org.apache.xalan.internal.xsltc.compiler.Parser;

//定义页面的时候要写反斜号
@WebServlet("/addTeacherServlet")
public class AddServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        TeacherDAO dao=new TeacherDAOImpl();
        Teacher tea=new Teacher();
        tea.setTeaName(request.getParameter("name"));
        tea.setTeaAge(Integer.parseInt(request.getParameter("age")));
        tea.setGrade(Integer.parseInt(request.getParameter("grade")));
        dao.add(tea);
        //先跳转到servlet页面的时候不写反斜号
        response.sendRedirect("listServlet");
    }
}

---------------------------------------代码结束-------------------------------------------

TeacherServlet.java

---------------------------------------代码开始-------------------------------------------

a

package com.servlet;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dao.TeacherDAO;
import com.dao.impl.TeacherDAOImpl;
import com.entity.Teacher;

//页面名字是定义在类上的,不是方法上
@WebServlet("/listServlet")
public class TeacherServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        TeacherDAO dao=new TeacherDAOImpl();
        List<Teacher> teaList=dao.getAll();
        request.setAttribute("teaList", teaList);
        request.setAttribute("date", new Date());
        //这个页面跳转会把request中的值带过去,区别于重定向,地址栏显示不发生改变
        //跳转到jsp页面的时候写反斜号
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }
}

---------------------------------------代码结束-------------------------------------------

TeacherTest.java

---------------------------------------代码开始-------------------------------------------

package com.test;

import java.util.List;

import org.junit.Assert;
import org.junit.Test;

import com.dao.TeacherDAO;
import com.dao.impl.TeacherDAOImpl;
import com.entity.Teacher;

public class TeacherTest {
    @Test
    public void getALLTest(){
        TeacherDAO dao=new TeacherDAOImpl();
        List<Teacher> teaList=dao.getAll();
        for(Teacher t:teaList){
            System.out.println(t);
        }
    }
    
    @Test
    public void addTest(){
        TeacherDAO dao=new TeacherDAOImpl();
        Teacher tea=new Teacher();
        tea.setTeaName("梁山伯");
        tea.setTeaAge(15);
        tea.setGrade(3);
        Assert.assertSame(1, dao.add(tea));
    }
}

---------------------------------------代码结束-------------------------------------------

log4j.properties

---------------------------------------代码开始-------------------------------------------

#appender是输出源,stdout是自定义的名字,target是输出目标,ConsoleAppender是输出到控制台
#layout是输出布局,PatternLayout是模芯布局,ConversionPattern是格式转换,FileAppender是
#输出到文件
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=%p %d{yyyy-MM-dd HH:mm:ss} %m %l %n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=E:\test.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%p %d{yyyy-MM-dd HH:mm:ss} %m %l %n

log4j.rootLogger=error, stdout
#%p是输出优先级debug,info,warn,error,fatal 设置为warn时就只能显示warn,error,fatal
#%d是日期格式
#%m是错误信息
#%l是错误所在类
#%n是错误位置
#空格依然是空格

---------------------------------------代码结束-------------------------------------------

mybaits-config.xml

---------------------------------------代码开始-------------------------------------------

<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd后缀文件是标签信息验证,没有它就不会有标签提示, 并且无法使用这些标签,是xml文件的一部分 -->
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    

    <typeAliases>
    <!-- 类型别名,给com.entity包下的所有实体类起别名,别名就是类名,且不分大小写 ,用在mapper映射文件中-->
        <package name="com.entity" />
    </typeAliases>
    


    <environments default="development">
        <!-- 用连接池加载数据库的数据 -->
        <environment id="development">
            <transactionManager type="JDBC" />        <!-- 交易管理类型 -->
            <dataSource type="POOLED">
                <!-- 我在这里遇到一个问题,后面运行代码的时候,显示错误no suit driver,后来发现是因为driver和url的值里面有一个小小的空格,去掉就好了 -->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/school?"/>
                <property name="username" value="root" />
                <property name="password" value="abcd1234" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
    <!-- 这里加载的必须是有内容的mapper映射文件,否则会报错而且你死也找不到,我已经死过一回了 -->
        <mapper resource="com/mapper/TeacherMapper.xml" />
    </mappers>
</configuration>

---------------------------------------代码结束-------------------------------------------

add.jsp

---------------------------------------代码开始-------------------------------------------

<%@ page language="java"  pageEncoding="UTF-8"%>
<!-- input的类型选择是实现不同功能的前提 -->
<form action="addTeacherServlet" method="post">
    姓名<input type="text" name="name" value=""/><br/>
    年龄<input type="text" name="age" value=""/><br/>
    年级<input type="text" name="grade" value=""/><br/>
    <br/>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="submit" value="提交">
</form>

---------------------------------------代码结束-------------------------------------------

list.jsp

---------------------------------------代码开始-------------------------------------------

<%@ page language="java"  pageEncoding="UTF-8"%>
<!-- prefix是自定义的 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<a href="add.jsp">添加</a>
<table border="1">
    <tr>
        <td>学生序号</td>
        <td>学生学号</td>
        <td>学生姓名</td>
        <td>学生年龄</td>
        <td>学生年级</td>
    </tr>
    <!--
     items英语是项目的意思,在这里接受跳转页面的数据,var是临时变量,用来循环遍历,varStatus是循环序号,count相当于一个显示序号的方法 
    jsp页面用钱号$获得传来的值,mapper中用得是#
    -->
    <c:forEach items="${teaList}" var="tea" varStatus="v">
        <tr>
            <td>${v.count}</td>
            <td>${tea.teaId}</td>
            <td>${tea.teaName}</td>
            <td>${tea.teaAge}</td>
            <td>${tea.gradeId}</td>
        </tr>
    </c:forEach>
        <!-- 日期格式:YYYY-MM-DD HH:mm:ss:SS 表示    :年份-月份-日 时:分:秒:毫秒  -->
            <td colspan="5" align="center"><fmt:formatDate value="${date}" pattern="YYYY-MM-DD HH:mm:ss:SS"/></td>
</table>

---------------------------------------代码结束-------------------------------------------

至此,项目完成

猜你喜欢

转载自blog.csdn.net/qq_41857764/article/details/85687197