学完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/>
<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>
---------------------------------------代码结束-------------------------------------------
至此,项目完成