servletmybatis1

MyUtil.setParams

自己实现将请求数据取出并存放到对应的实体对象,之前使用是tomcat提供的

D1

 

软件开发流程:

 

产品/项目定义

需求分析    功能定义    性能定义  安全定义。。。。。。

概要设计    软件结构    模块划分   模块之间关系。。。。。。

数据库设计:

详细设计:针对重要模块详细流程图   类图。。。。。。

编码:

测试:单元测试   集成测试   系统测试    验收测试  

正式上线

 

先将mybatis模板代码运行起来(针对user表)

 

然后创建一张表func1(

fld1    int   pk   , 

 fld2    varchar  not null,

 fld3    date/datetime   )

 

利用mybatis代码模板,实现对表的增加即可

first       10:50 

11:10        <50%    

11:30        30%左右没完成           

last        11:50 

       

同一个工程中同时操作两张及以上表  user1/func1,只要能增加

 

实现对多个表操作,注意变化部分

 

mybatis框架配置文件mybatis-config.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>

         <properties resource="com/dlj/resources/db.properties" />

         <typeAliases>

                   <typeAlias type="com.dlj.model.User" alias="User"></typeAlias>

                   <typeAlias type="com.dlj.model.Func1" alias="Func1"></typeAlias>

         </typeAliases>

         <environments default="development">

                   <environment id="development">

                            <transactionManager type="JDBC" />

                            <dataSource type="POOLED">

                                     <property name="driver" value="${jdbc.driverClassName}" />

                                     <property name="url" value="${jdbc.url}" />

                                     <property name="username" value="${jdbc.username}" />

                                     <property name="password" value="${jdbc.password}" />

                            </dataSource>

                   </environment>

         </environments>

         <mappers>

                   <mapper resource="com/dlj/mapper/UserMapper.xml" />

                   <mapper resource="com/dlj/mapper/Func1Mapper.xml" />

         </mappers>

</configuration>

 

 

不同表对应的实体类     

 

package com.dlj.model;

 

/**

 * @author karthy

 *

 */

public class Func1 {

 

         private Integer fld1;

       private String fld2;

    private Date  fld2; 

   // 你可以使用String  java.util.Date  java.sql.Date只要做到对所有数据库都通用

  

         。。。。。。。

 

}

 

不同表对应的映射配置文件

 

Func1Mapper.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.dlj.mapper.Func1Mapper">

 

         <select id="getFunc1ById" parameterType="int" resultType="Func1">

                  

         </select>

 

    。。。。。。。。。。。。。

</mapper>

 

 

映射代码提炼

public interface MyMapper {

  
public void insert(Object  obj);

  
public Object getById(Integer id);

  
public List<Object> getAll();

  
public void update(Object obj);

  
public void delete(Integer id);

}

 

public interface Func1Mapper extends  MyMapper {



}

public interface UserMapper extends  MyMapper{



}

 

 

数据库操作提炼

 

package com.dlj.dao;

import com.dlj.mapper.MyMapper;
import com.dlj.util.MyBatisDAOUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @author karthy
 *
 */

public class MyDAO {


  
public void insert(Class cls,Object obj) {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
     
try {
         MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
         myMapper.insert(obj);
         sqlSession.commit();
      }
finally {
         sqlSession.close();
      }
   }
  
public Object getById(Class cls,Integer id) {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
     
try {
         MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
        
return myMapper.getById(id);
      }
finally {
         sqlSession.close();
      }
   }

  
public List<Object> getAll(Class cls) {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
      List<Object> lst =
null;
     
try {
         MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
         lst = myMapper.getAll();
        
return lst;
      }
finally {
         sqlSession.close();
      }
   }

  
public void update(Class cls,Object obj) {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
     
try {
         MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
         myMapper.update(obj);
         sqlSession.commit();
      }
finally {
         sqlSession.close();
      }

   }

  
public void delete(Class cls,Integer id) {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
     
try {
         MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
         myMapper.delete(id);
         sqlSession.commit();
      }
finally {
         sqlSession.close();
      }

   }
}

 

 

使用serlvet和mybatis实现对表func1增加删除修改查询

实现func1.action

@WebServlet(urlPatterns = "/func1.action")
public class Func1Action extends HttpServlet {
   
@Override
   
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String op=req.getParameter(
"op");
        PrintWriter out= resp.getWriter();
       
if(op==null) op="";
       
switch (op){
           
case "insert":
               out.print(
"insert ......");
               
break;
           
case "check":
                out.print(
"yes");
               
break;
           
default:

               
break;
        }
    }

运行程序访问增加界面,

点击增加能看到insert 。。。。。。

 

继续,οnkeyup="verify(this.value)"

实现verify能发现异步请求

function verify(fld1) {
    $.
ajax(
        {
           
url:"func1.action?op=check&fld1="+fld1,
           
success:function (res) {
                alert(res);
            }
        }

    );

}

访问能看到yes消息框

 

设计界面 html/jslt/other tag

addFunc1.jsp

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

<html>

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

 <form action="func1.action" οnsubmit="return check(this)">

    <input type="hidden" id="op" name="op" value="insert">

    fld1: <input id="fld1" name="fld1" οnkeyup="verify(this.value)"> <br>

    fld2: <input id="fld2" name="fld2"> <br>

    fld3: <input id="fld3" name="fld3"> <br>

    <input type="submit" value="insert">

</form>



</body>
</html>

 

编辑Func1Action.java,创建insert函数

case "insert":
    insert(req, resp);
   
break;

 

private void insert(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Func1 func1 =
new Func1();
    PrintWriter out = resp.getWriter();

//将请求中数据取出并赋值给func1对象
    MyUtil.setParams(req, func1);
    out.print(func1);
  

}

编辑Func1.java重写toString函数

@Override
public String toString() {
  
return "fld1:"+fld1+",fld2:"+fld2+",fld3:"+fld3;
}

运行应用输入数据,在页面能看到用户输入的数据,再继续。。。。

 

创建业务逻辑层

public interface Func1Service {
   
public abstract  boolean insertFunc1(Func1 func1);
}

public class Func1ServiceImpl implements  Func1Service{
   MyDAO
dao=new MyDAO();
   
@Override
   
public boolean insertFunc1(Func1 func1) {
       
try {

//调用数据库层
           
dao.insert(Func1Mapper.class, func1);
        }
catch (Exception e) {
          
return  false;
        }
       
return  true;
    }
}

 

编辑action,调用业务逻辑层

private void insert(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Func1 func1 =
new Func1();
    PrintWriter out = resp.getWriter();
    MyUtil.
setParams(req, func1);
    out.print(func1);

//调用业务逻辑层
   
func1Service.insertFunc1(func1);


}

 

运行应用输入正确数据,能将数据增加到表中

 

D2

js怎么设置事件?

打开浏览器,按F12,使用js创建标签,并为标签设置某个事件

 

<form action="func1.action" οnsubmit="return check(this)">

    <input type="hidden" id="op" name="op" value="insert">

    fld1: <input id="fld1" name="fld1" οnkeyup="verify(this.value)"> <br>

    fld2: <input id="fld2" name="fld2"> <br>

    fld3: <input id="fld3" name="fld3"> <br>

    <input type="submit" value="insert">

</form>
 
布置一个任务,去掉οnsubmit="return check(this)"使用js设置onsubmit事件
 

实现异步校验

实现校验动作

private void check(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Func1 func1 =
new Func1();
    PrintWriter out = resp.getWriter();
    MyUtil.setParams(req, func1);

   
if (func1Service.getFunc1(func1) != null) {
       out.print(
"yes");
    }
else {
      out.print(
"no");
    }
}

业务逻辑层

@Override
public Func1 getFunc1(Func1 func1) {
   
try {
       
return (Func1) dao.getById(Func1Mapper.class, func1.getFld1());
    }
catch (Exception e) {
       
return null;
    }
}

数据库层

public Object getById(Class cls,Integer id) {
   SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
         .openSession();
  
try {
      MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
     
return myMapper.getById(id);
   }
finally {
      sqlSession.close();
   }
}

相关配置

<select id="getById" parameterType="int" resultType="Func1">
   SELECT  FROM func1        WHERE fld1 = #{id}
</
select>

 

做好后启动应用,地址栏直接发请求,能看到yes或no

继续。。。。。。

 

将记录日志的功能加到工程里

 

将mybatis获取连接对象写成函数

private  SqlSession getConn() {
  
try {
      SqlSession sqlSession = MyBatisDAOUtil.getSqlSessionFactory()
            .openSession();
     
return  sqlSession;
   }
catch (Exception e) {
     
log.fatal(e.getMessage());
     
return  null;
   }

}

 

实现登录功能

复制stu表对应的类

public class Stu {
  
private  int xh;
  
private  String xm;
  
private  float xs;

 

set/get

无参/有参构造函数

。。。。。。。

 

 

}

复制之前的登录界面login.jsp

<form action="stu.action" >
    <input type="hidden" id="op" name="op" value="login">
     user: <input id="xh" name="xh" >
    <font color="red">${sessionScope.err}</font>
    <br>
    pass: <input type="password" id="xm" name="xm"> <br>
    <input type="submit" value="login">
</form>

实现登录action

private void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    Stu stu =
new Stu();
    PrintWriter out = resp.getWriter();
    MyUtil.setParams(req, stu);
   
if(stuService.getStu(stu)!=null){
       req.getSession().setAttribute(
"islogin", stu);
       resp.sendRedirect(
"addFunc1.jsp");
    }
else {
       req.getSession().setAttribute(
"err", "invalid user or pass");
       resp.sendRedirect(
"login.jsp");
    }

}

实现登录业务逻辑


public class StuServiceImpl implements StuService {
    MyDAO
dao = new MyDAO();
    Logger
log=Logger.getLogger(StuServiceImpl.class);

   
@Override
   
public Stu getStu(Stu stu) {
       
try {
           
return (Stu) dao.getByObj(StuMapper.class, stu);
        }
catch (Exception e) {
           
log.error(e.getMessage());
           
return null;
        }
    }
}

编辑数据库访问

public Object getByObj(Class cls,Object obj) {
   SqlSession sqlSession =getConn();
  
try {
      MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
     
return myMapper.getByObj(obj);
   }
finally {
      sqlSession.close();
   }
}

编译映射命名

public interface MyMapper {

  
public void insert(Object  obj);

  
public Object getById(Integer id);

  
public Object getByObj(Object  obj);

  
public List<Object> getAll();

  
public void update(Object obj);

  
public void delete(Integer id);

}

编辑表对应的xml

<mapper namespace="com.dlj.mapper.StuMapper">

   <select id="getByObj" parameterType="Stu" resultType="Stu">
      SELECT        *
     
FROM stu
      WHERE xh = #{xh} and  xm=#{xm}
   </
select>

编辑mybatis框架配置文件

<configuration>
   <properties resource="com/dlj/resources/db.properties" />
   <typeAliases>
          <typeAlias type="com.dlj.model.Stu" alias="Stu"></typeAlias>
         <typeAlias type="com.dlj.model.Func1" alias="Func1"></typeAlias>
   </typeAliases>
   <environments default="development">
      <environment id="development">
         <transactionManager type="JDBC" />
         <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driverClassName}" />
            <property name="url" value="${jdbc.url}" />
            <property name="username" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
         </dataSource>
      </environment>
   </environments>
   <mappers>
          <mapper resource="com/dlj/mapper/StuMapper.xml" />
         <mapper resource="com/dlj/mapper/Func1Mapper.xml" />
   </mappers>
</configuration>

启动应用,测试登录功能是否实现

显示数据

创建显示数据jsp

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2018/10/13
  Time: 14:02
  To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <meta charset="UTF-8">
    <title>showStu</title>
    <script src="js/jquery.min.js"></script>
    <script>
     function  getStu() {
         $.
ajax(
             {
                
url:"func1.action?op=ajaxsel",
                
dataType:"json",
                
success:function (data) {
                    
var str="";
                    
for (var i=0;i<data.length;i++) {
                     
var x=data[i];
                    
str=str+"<tr><td>"+x.fld1+"</td><td>"+x.fld2+"</td><td>"+x.fld3+"</td>";
                    
str=str+"<td> <a href='#' οnclick='return ajaxdel("+x.fld1+")'> del</td></tr>" ;

                     }
                     $(
"#func1").html(str);

                 }
             }
         );
     }

    </
script>
    <style>
      table,tr,td{
       
border: 1px solid black;
       
border-collapse: collapse;
      }
    </
style>
  </head>
  <body>
  <table >
    <thead>
       <tr>     <td>fld1</td>   <td>fld2</td>  <td>fld3</td>   <td> op</td>      </tr>

    </thead>
     <tbody id="func1">


    </tbody>

  </table>

  </body>
<script>
    getStu();

</
script>

</html>

实现查询action

private void ajaxsel(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        Func1 func1 = new Func1();
       
PrintWriter out = resp.getWriter();
//        MyUtil.setParams(req, func1);
//        out.print(func1);
       
List<Func1> lstFunc1=   func1Service.getAllFunc1();
        out.print(JSON.toJSONString(lstFunc1));

    }

实现业务逻辑

@Override
public List<Func1> getAllFunc1() {
   
try {
      
return ( List) dao.getAll(Func1Mapper.class);
    }
catch (Exception e) {
      
log.error(e.getMessage());
      
return  null;
    }
}

编辑表对应的xml

<mapper namespace="com.dlj.mapper.Func1Mapper">
   <insert id="insert" parameterType="Func1" >
      INSERT INTO func1(fld1, fld2, fld3)
      VALUES(#{fld1}, #{fld2}, #{fld3})
   </
insert>

   <select id="getById" parameterType="int" resultType="Func1">
      SELECT  FROM func1        WHERE fld1 = #{id}
   </
select>

   <resultMap type="Func1" id="Func1ResultSet">
           <id property="fld1" column="fld1" />
           <result property="fld2" column="fld2" />
           <result property="fld3" column="fld3" />

   </resultMap>

       <select id="getAll" resultMap="Func1ResultSet">
           SELECT * FROM func1
       </
select>

 

启动应用地址栏直接请求查询动作

 

 

实现异步删除

 

 

实现删除action

private void ajaxdel(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Func1 func1 =
new Func1();
        PrintWriter out = resp.getWriter();
        MyUtil.setParams(req, func1);

//        out.print(func1);
      
if(   func1Service.deleteFunc1(func1) ) {
           out.print(
"yes");
       }
      
else
      
{
           out.print(
"no");
       }


    }

实现删除业务逻辑

@Override
public boolean deleteFunc1(Func1 func1) {
   
try {
     
return  dao.delete(Func1Mapper.class, func1.getFld1());
    }
catch (Exception e) {
       
log.error(e.getMessage());
       
return false;
    }
}

调整删除DAO

public boolean delete(Class cls,Integer id) {
   SqlSession sqlSession =getConn();
  
int n=0;
  
try {
      MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
      n=myMapper.delete(id);
      sqlSession.commit();
   }
finally {
      sqlSession.close();
   }
  
return n>0;
}

 

增加删除配置

<delete id="delete" parameterType="int">
   DELETE FROM func1 WHERE       fld1 = #{id}
</
delete>

 

启动应用地址栏直接发删除请求看到yes或no

 

继续。。。。。。。。。跟前端对接。。。

编辑显示数据界面

function  ajaxdel(fld1) {
   
if(confirm("确定要删除[fld1="+fld1+"]的数据吗?")){
        $.
ajax(
            {
               
url:"func1.action?op=ajaxdel&fld1="+fld1,
               
success:function (data) {
                   
if(data=="yes"){
                        $(
"#fld"+fld1).remove();
                    }
                }
            }
        );
    }
   
return false;
}

 

 

运行程序

点击删除,选择确定则删除、取消则不删除

 

实现修改功能

复制增加界面,命名修改界面modifyFunc1.jsp

 

  <form action="func1.action" οnsubmit="return check(this)">

    <input type="hidden" id="op" name="op" value="update">

    <input type="hidden" id="oldfld1" name="oldfld1" value="${param.oldfld1}">

    fld1: <input id="fld1" name="fld1" value="${param.fld1}" οnkeyup="verify(this.value)"> <font color="red"

                                                                                                 id="fld1ts"></font>

    <br>

    fld2: <input id="fld2" name="fld2" value="${param.fld2}"> <br>

    fld3: <input type="date" id="fld3" name="fld3"> <br>

    <input type="submit" id="update" value="update">

</form>

 

在显示数据部分增加修改超链接

实现修改action

注意:使用哈希表传递参数

实现修改业务逻辑

@Override
public boolean updateFunc1(Map map) {
   
try {
       
dao.update(Func1Mapper.class, map);
    }
catch (Exception e) {
       
log.error(e.getMessage());
       
return false;
    }
   
return true;
}

实现数据库操作

public boolean update(Class cls, Map map) {
   SqlSession sqlSession =getConn();
  
int n=0;
  
try {
      MyMapper myMapper = (MyMapper) sqlSession.getMapper(cls);
      n=myMapper.update(map);
      sqlSession.commit();
   }
finally {
      sqlSession.close();
   }
  
return n>0;

}

命名映射

public interface MyMapper {

  
public void insert(Object  obj);

  
public Object getById(Integer id);

  
public Object getByObj(Object  obj);

  
public List<Object> getAll();

  
public void update(Object obj);

  
public int update(Map map);

  
public int delete(Integer id);

}

配置文件

<?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.dlj.mapper.Func1Mapper">
   <insert id="insert" parameterType="Func1" >
      INSERT INTO func1(fld1, fld2, fld3)
      VALUES(#{fld1}, #{fld2}, #{fld3})
   </
insert>

   <select id="getById" parameterType="int" resultType="Func1">
      SELECT  FROM func1        WHERE fld1 = #{id}
   </
select>

   <resultMap type="Func1" id="Func1ResultSet">
           <id property="fld1" column="fld1" />
           <result property="fld2" column="fld2" />
           <result property="fld3" column="fld3" />

   </resultMap>

       <select id="getAll" resultMap="Func1ResultSet">
           SELECT * FROM func1
       </
select>

   <delete id="delete" parameterType="int">
      DELETE FROM func1 WHERE       fld1 = #{id}
   </
delete>

   <update id="update" parameterType="Map">
      UPDATE func1
      SET       fld1=#{func1.fld1},fld2=#{func1.fld2},fld3=#{func1.fld3}
      WHERE
      fld1 = #{
oldfld}
   </
update>

</mapper>

 

运行效果

 

将之前练习过滤器增加

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值