您的位置:首页 > 其它

Mybatis+servlet实例(Mybatis学习)

2015-12-23 14:05 513 查看
最近吴菜鸟在学习mybatis在网上搜了一下,大多要么是mybatis文档,要么是SpringMVC+MYBATIS整合的实例。因为吴菜鸟想一步一步的学习,但是始终找不到一个纯mybatis的实例。所以就结合公司数据库自己写了一个简单的多表联接查询,学习中。。也供像我这样的菜鸟参考。因为之前没有什么基础所以费了点劲。其中还有不明白的地方请高手指教。

开发环境:Eclipse Mars Release (4.5.0)

JDK 1.7.0

tomcat 8.0

maven 3.3.3

mybatis 3.3.0

1.MAVEN的安装及MAVEN项目的创建

参见我另外一篇http://blog.csdn.net/wutao0805/article/details/47127159

这里需要说明的是按此方式创建虽然项目没有错误,但是在实际中ECLIPSE会弹出错误信息,在网上收罗了一下终于彻底解决了。
首先在eclipse中java-compiler中JDK版本设为1.7,然后项目properties-java build path中JRE的版本也应是1.7,maven-project facets中对应dynamic web module为3.1 java 为1.7

此外在pom.xml中加上

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.1</version>

<configuration>

<source>1.7</source>

<target>1.7</target>

</configuration>

</plugin>

</plugins>

</build>

WEB.XML头文件应该为

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"/>

这样在eclipse中使用MAVEN就不会报错了。

项目整体目录



2.引入所需的jar包

<dependency>

<groupId>com.hynnet</groupId>

<artifactId>sqljdbc4-chs</artifactId>

<version>4.0.2206.100</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.3.0</version>

</dependency>

3.创建实体类ZhiZao.java

package com.wu.pojo;

public class ZhiZao {

private String ddate; //单据下达日期

private String billno; //生产任务单

private int jsqty; // 计划生产数量

private String jdate;//计划完工日期

private int sqty; //实作数量

private String wuliao; //物料

private String date; //日期

private int scqty; //期间生产数量

private int hgqty; //合格数量

private int fxqty; //返修数量

public String getDdate() {

return ddate;

}

public void setDdate(String ddate) {

this.ddate = ddate;

}

public String getBillno() {

return billno;

}

public void setBillno(String billno) {

this.billno = billno;

}

public int getJsqty() {

return jsqty;

}

public void setJsqty(int jsqty) {

this.jsqty = jsqty;

}

public String getJdate() {

return jdate;

}

public void setJdate(String jdate) {

this.jdate = jdate;

}

public int getSqty() {

return sqty;

}

public void setSqty(int sqty) {

this.sqty = sqty;

}

public String getWuliao() {

return wuliao;

}

public void setWuliao(String wuliao) {

this.wuliao = wuliao;

}

public String getDate() {

return date;

}

public void setDate(String date) {

this.date = date;

}

public int getScqty() {

return scqty;

}

public void setScqty(int scqty) {

this.scqty = scqty;

}

public int getHgqty() {

return hgqty;

}

public void setHgqty(int hgqty) {

this.hgqty = hgqty;

}

public int getFxqty() {

return fxqty;

}

public void setFxqty(int fxqty) {

this.fxqty = fxqty;

}

public ZhiZao() {

super();

} //必须要有这个无参构造方法,不然根据UserMapper.xml中的配置,在查询数据库时,将不能反射构造出ZhiZao实例

}

3.实体的映射器 (接口)ZhiZaoMapper.java

package com.wu.dao;

import java.util.List;

import java.util.Map;

import com.wu.pojo.ZhiZao;

public interface ZhiZaoMapper {

public List<ZhiZao>serchByDate(Map<String, String> map);

}

该接口类似于Hibernate中的DAO层接口,唯一不同的是,MyBatis中,只声明该接口就可以,不需要去实现.

4.映射器对应的配置文件ZhiZaoMapper.xml代码如下

<mapper namespace="com.wu.dao.ZhiZaoMapper">

<!-- 这里namespace必须是UserMapper接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”-->

<select id="serchByDate" parameterType="java.util.Map" resultType="ZhiZao">

<!-- 这里的id必须和UserMapper接口中的接口方法名相同,不然运行的时候也要报错 -->

select CONVERT(varchar(10),t4.fcommitdate,120) as ddate,

t2.FICMOBillNO as billno,

t4.FAuxQty as jsqty,

CONVERT(varchar(10),t4.FPlanFinishDate,120) as jdate,

t4.FAuxQtyFinish as sqty,t3.FName as wuliao,

t1.FCheckDate as date,

t2.FAuxQtyfinish as scqty,

t2.FAuxQtyPass as hgqty,

t2.FAuxReprocessedQty as fxqty

from SHProcRpt t2 left join SHProcRptMain t1 on t2.FinterID=t1.FInterID

left join t_ICItem t3 on t2.FItemID=t3.FItemID

inner join ICMO t4 on t4.FBillNo=t2.FICMOBillNO

where t1.FCheckDate >=#{date1} and t1.FCheckDate <= #{date2} and (t2.FOperID=40015 or t2.FOperID=40002)

</select>

</mapper>

注:这里需要注意的是XML文件中的<和>号的处理,有两种方法

第一种方法:

因为这个是xml格式的,所以不允许出现类似“>”这样的字符,但是都可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 。 mapper文件示例代码

<select id="selectMonthAdvertise" resultMap="ResultMap">

select * from ad_n_advertise_t where user_id in

<foreach item="item" index="index" collection="userIdList" open="(" separator="," close=")">

#{item}

</foreach>

and isdelete=#{isdelete,jdbcType=TINYINT}

and <![CDATA[</span>date_sub(curdate(), INTERVAL 30 DAY) <= date(crt_time)]]>

order by crt_time desc

</select>

第二种方法:

用了转义字符把>和<替换掉。 mapper文件示例代码:

<select id="selectMonthAdvertise" resultMap="ResultMap">

select * from ad_n_advertise_t where user_id in

<foreach item="item" index="index" collection="userIdList" open="(" separator="," close=")">

#{item}

</foreach>

and isdelete=#{isdelete,jdbcType=TINYINT}

and date_sub(curdate(), INTERVAL 30 DAY) <= date(crt_time)

order by crt_time desc

</select>

附:转义字符表

< < 小于号

> > 大于号

& &


' ‘
单引号

" " 双引号

5.MyBatis的配置文件conf.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">

<configuration>

<typeAliases>

<typeAlias alias="ZhiZao" type="com.wu.pojo.ZhiZao"/>

</typeAliases>

<environments default="development">

<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>

<property name="url" value="jdbc:sqlserver://201.123.200.2:1433;databaseName=AIS20151210103024" />

<property name="username" value="sa"/>

<property name="password" value=" 密码"/>

</dataSource>

</environment>

</environments>

<mappers>

<mapper resource="com/wu/mapping/ZhiZaoMapper.xml"/>

</mappers>

</configuration>

6.加载配置文件获得一个sqlsession

package com.wu.dbcon;

import java.io.IOException;

import java.io.Reader;

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 DBcon {

public static SqlSession getsqlsession() throws IOException{

//通过配置文件获取数据库连接信息

Reader reader = Resources.getResourceAsReader("conf.xml");

//通过配置信息构建一个SqlSessionFactory

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

//通过SqlSessionFactory打开一个数据库会话

SqlSession sqlsession = sqlSessionFactory.openSession();

return sqlsession;

}

}

7.sevlet文件

package com.wu.servlet;

import java.io.IOException;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

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 org.apache.ibatis.session.SqlSession;

import com.wu.dao.ZhiZaoMapper;

import com.wu.dbcon.DBcon;

import com.wu.pojo.ZhiZao;

@WebServlet("/serch")

public class serch extends HttpServlet {

private static final long serialVersionUID = 1L;

public serch() {

super();

// TODO Auto-generated constructor stub

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.getWriter().append("Served at: ").append(request.getContextPath());

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/*

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

Date stadate = new Date();

Date enddate = new Date();

try {

stadate=df.parse((String)request.getParameter("date1"));

enddate=df.parse((String)request.getParameter("date1"));

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

*/

String stadate=request.getParameter("date1");

String enddate=request.getParameter("date2");

Map<String, String> map = new HashMap<String, String>();

map.put("date1", stadate);

map.put("date2", enddate);

System.out.println("值"+stadate);

SqlSession sqlsession = null;

sqlsession=DBcon.getsqlsession();

ZhiZaoMapper zm = sqlsession.getMapper(ZhiZaoMapper.class);

List<ZhiZao> list=zm.serchByDate(map);

request.setAttribute("list",list);//将查询结果保存在attribute list中

request.getRequestDispatcher("index.jsp").forward(request, response);

}

}

8.index显示页面

<%@page import="com.wu.pojo.ZhiZao" import="java.util.List"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<title>Insert title here</title>

</head>

<body>

<form action="serch" method="post">

起始日期<input name="date1" type="text" >

截止日期<input name="date2" type="text">

<input type="submit" value="确定">

</form>

<table border=1>

<tr>

<td>单据下达日期</td>

<td>生产任务单</td>

<td>计划生产数量</td>

<td>计划完工日期</td>

<td>实作数量</td>

<td>物料</td>

<td>日期</td>

<td>期间生产数量</td>

<td>合格数量</td>

<td>返修数量</td>

</tr>

<tr>

<% List<ZhiZao>list =(List<ZhiZao>) request.getAttribute("list");

if(list==null||list.size()<1){

out.print("没有数据");

}else{

for(ZhiZao zz:list){

%>

<tr>

<td><%= zz.getDdate() %></td>

<td><%=zz.getBillno() %></td>

<td><%=zz.getJsqty() %></td>

<td><%=zz.getJdate() %></td>

<td><%=zz.getSqty() %></td>

<td><%=zz.getWuliao() %></td>

<td><%=zz.getDate() %></td>

<td><%=zz.getScqty() %></td>

<td><%=zz.getHgqty() %></td>

<td><%=zz.getFxqty() %></td>

<%

}

}

%>

</tr>

</table>

</body>

</html>

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: