Mybatis 第一个Demo
来源:互联网 发布:天下游显示网络不稳定 编辑:程序博客网 时间:2024/05/16 14:51
慕课网Mybatis 自动回复机器人
项目结构 以及表结构:
第一步.导入相应的Mybatis包放在web-app的lib文件夹下并加入路径
第二步.创建实体类Message
package Com.Entity;public class Message {//主键 private int id; //指令 private String command; //描述 private String description; //内容 private String content; public Message(){ }public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCommand() {return command;}public void setCommand(String command) {this.command = command;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getContent() {return content;}public void setContent(String content) {this.content = content;} }
第三步.创建核心配置文件(把数据库的信息配置进核心文件)Configuration.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><!-- <settings> <setting name="useGeneratedKeys" value="false"/> <setting name="useColumnLabel" value="true"/> </settings> <typeAliases> <typeAlias alias="UserAlias" type="org.apache.ibatis.submitted.complex_property.User"/> </typeAliases> --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="" value=""/> </transactionManager> <dataSource type="UNPOOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments><!-- 配置Message.xml文件 --> <mappers> <mapper resource="Com/config/sqlxml/Message.xml"/> </mappers> </configuration>
第四步.实现db层(和数据库交互的类)
package Com.DB;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;/** * 正真和数据库交互:db层 * 编写访问数据库类 * @author liu * */public class DBAccess {//把异常向上抛,抛给DAO层 因为Dao层捕获异常,拿到SqlSession在finally中关闭SqlSession这个对象 public SqlSession getSqlSession() throws IOException{ //1.通过配置文件获取配置信息 是一个路径就不能写点了 从src下开始 Reader reader=Resources.getResourceAsReader("Com/config/Configuration.xml"); //2.通过配置信息创建一个sqlSesisonFactory SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); //3.通过sqlSesisonFactory打开一个sqlSession SqlSession sqlSession=sqlSessionFactory.openSession();return sqlSession; }}
第五步.配置Message.xml文件(相当于JDBC中的写sql语句和查询结果的赋值给Message对象)
<?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"><!-- 配置好了字段和属性,sql语句等 要把这个配置文件注册到核心配置文件Configuration.xml中 --><mapper namespace="Message"> <resultMap type="Com.Entity.Message" id="MessageResult"> <!-- id:是主键名 result:是普通字段的名字 column指的是数据库里面的字段 property指的是实体类中的属性 数据库里面的字段类型与jdbcType里面的字段类型有一种对应关系 jdbc jdbcType int INTEGER varchar VARCHAR --> <id column="ID" jdbcType="INTEGER" property="id"/> <result column="COMMAND" jdbcType="VARCHAR" property="command"/> <result column="DESCRIPTION" jdbcType="VARCHAR" property="description"/> <result column="CONTENT" jdbcType="VARCHAR" property="content"/> </resultMap><!-- id为这个sql语句起一个唯一的名字(是在所有的配置文件中不能重名 ,以后不只一个配置文件) 记住是唯一的 以后的sql语句不能重名 但是在不同的<mapper namespace="">中 相同的ID是可以存在的 sql语句的resultMap属性是指向resultMap标签的 所以resultMap标签的id就是sql语句resultMap属性的值 --> <select id="selectbycommand" resultMap="MessageResult"> SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message where 1=1 </select> </mapper>
第六步..编写Dao层
package Com.DAO;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;import org.apache.ibatis.session.SqlSession;import Com.DB.DBAccess;import Com.Entity.Message; /* * 和Message表相关的处理类 */public class Service {//返回的是符合条件的Message集合--》 Mybatis版public List<Message> selectbycommand(String command,String description){DBAccess dbAccess=new DBAccess();List<Message> messagelist=new ArrayList<Message>();//sqlSession放在外面 无论如何都可以关掉SqlSession sqlSession=null; //处理DB层抛上来的异常try{sqlSession=dbAccess.getSqlSession();//调用Message.xml文件中得sql语句获取返回结果并把每个message对象添加到messagelist中messagelist=sqlSession.selectList("Message.selectbycommand");}catch(IOException ex){ex.printStackTrace();}finally{if(sqlSession!=null){sqlSession.close();}}return messagelist;}//返回的是符合条件的Message集合--》 JDBC版/*public List<Message> selectbycommand(String command,String description){ List<Message> messagelist=new ArrayList<Message>(); try {Class.forName("com.mysql.jdbc.Driver");Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF8","root","123456");List<String> paramlist =new ArrayList<String>();StringBuffer sql=new StringBuffer("SELECT ID,COMMAND,DESCRIPTION,CONTENT FROM message where 1=1");if(command!=null&&!"".equals(command.trim())){//前面有空格或者sql字符串末尾加空格不然会报错sql.append(" and COMMAND=? ");paramlist.add(command);}if(description!=null&&!"".equals(description.trim())){sql.append(" and DESCRIPTION like '%' ? '%'");paramlist.add(description);} PreparedStatement ptmt=conn.prepareStatement(sql.toString()); for(int i=0;i<paramlist.size();i++){ ptmt.setString(i+1, paramlist.get(i)); System.out.println("加入的字符串:"+paramlist.get(i)); } Message mess=null; ResultSet rs= ptmt.executeQuery(); while(rs.next()){ mess=new Message(); mess.setId(rs.getInt("ID")); mess.setCommand(rs.getString("COMMAND")); mess.setDescription(rs.getString("DESCRIPTION")); mess.setContent(rs.getString("CONTENT")); messagelist.add(mess); } } catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} return messagelist; }*/}第七步.编写Servlet并配置进web.xml文件
package Com.Servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import Com.DAO.Service;import Com.Entity.Message;public class ListServlet extends HttpServlet {/**列表页面初始化控制 * The doGet method of the servlet. <br> */ public List<Message> messagelist=null;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//接收页面的值String command=request.getParameter("command");String description =request.getParameter("description");System.out.println("获取的参数:"+request.getParameter("command"));//向页面传值request.setAttribute("command",command);request.setAttribute("description",description);//查询消息列表并传递给页面Service service=new Service();messagelist=service.selectbycommand(command,description);//放入request中 request.setAttribute("messagelist", messagelist); System.out.println("加入成功");//服务器内部转发request内保存的值就不会过期 //跳转页面 request.getRequestDispatcher("/list.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// TODO Auto-generated method stubthis.doGet(req, resp);} }
<servlet-mapping> <servlet-name>ListServlet</servlet-name> <url-pattern>/List.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
list.jsp文件
<%@ page language="java" import="java.util.*"contentType="text/html; charset=utf-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE" /><title>内容列表页面</title><link href="<%=basePath%>resource/css/all.css" rel="stylesheet"type="text/css" /></head><body style="background: #e1e9eb;"><form action="<%=basePath%>List.action" id="mainForm" method="post"><div class="right"><div class="current">当前位置:<a href="javascript:void(0)" style="color:#6E6E6E;">内容管理</a>> 内容列表</div><div class="rightCont"><p class="g_title fix">内容列表 <a class="btn03" href="#">新 增</a> <aclass="btn03" href="#">删 除</a></p><table class="tab1"><tbody><tr><td width="90" align="right">指令名称:</td><td><input name="command" type="text" class="allInput" value="${command}" /></td><td width="90" align="right">描述:</td><td><input name="description" type="text" class="allInput" value="${description}" /></td><td width="85" align="right"><input type="submit"class="tabSub" value="查 询" /></td></tr></tbody></table><div class="zixun fix"><table class="tab2" width="100%"><tbody><tr><th><input type="checkbox" id="all" onclick="" /></th><th>序号</th><th>指令名称</th><th>描述</th><th>操作</th></tr><c:forEach items="${messagelist}" var="message"varStatus="status"><tr<c:if test="${status.index%2!=0 }">style="background-color:#ECF6EE;"</c:if>><td><input type="checkbox" /></td><td>${status.index+1 }</td><td>${message.command }</td><td>${message.description }</td><td><a href="#">修改</a> <a href="#">删除</a></td></tr></c:forEach></tbody></table><div class='page fix'>共 <b>4</b> 条 <a href='###' class='first'>首页</a> <a href='###'class='pre'>上一页</a> 当前第<span>1/1</span>页 <a href='###'class='next'>下一页</a> <a href='###' class='last'>末页</a> 跳至 <inputtype='text' value='1' class='allInput w28' /> 页 <ahref='###' class='go'>GO</a></div></div></div></div></form></body></html>
小结:
Model层:实体类
DB层(数据库层):加载驱动,获取链接Dao层:执行SQL语句,获取操作结果封装消息,返回操作结果其中的操作就会用到Model层
Servlet:一般就是--》接收页面的值,向页面传值,查询消息列表(Dao层的操作结果)并返回给页面,向页面跳转
View层:接收Servlet的资源呈现给用户
各层之间如何耦合:如--》在Servlet层创建Dao层具体操作类的对象
阅读全文
0 0
- Mybatis 第一个Demo
- mybatis(3)--第一个mybatis的demo
- 使用IntelliJ IDEA的第一个MyBatis Demo
- IText第一个DEMO
- IText第一个DEMO
- [StoryToolKit]第一个demo
- IText第一个DEMO .
- Servlet 第一个DEMO
- 第一个demo
- EasyUI 第一个demo
- js第一个demo
- 第一个Python demo
- nodejs第一个demo
- monkeyrunner第一个demo
- springboot第一个demo
- 工作流第一个demo
- MyBatis学习笔记(一)IntelliJ IDEA的第一个MyBatis Demo
- 第一个mybatis例子
- ANSI, UNICODE,UTF8编码的区别
- 10、react之 组件生命周期
- 进度条样式用渐变来实现
- 模型汇总15 领域适应性Domain Adaptation、One-shot/zero-shot Learning概述
- [置顶] Android 7.0实际开发中调用系统相机和获取相册照片遇到的坑具备向下兼容
- Mybatis 第一个Demo
- PHP多种方式获取文件的后缀名
- SDUT-1186 C语言实验——数组逆序
- sofia-sip帮助文档
- java入门1
- web安全--文件上传漏洞解决
- 图像旋转算法与实现
- codeforces round 119 div2 A-D
- 苹果-iOS-ARKit